码迷,mamicode.com
首页 > 其他好文 > 详细

学习大数据:Scala

时间:2020-09-17 18:00:46      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:定义变量   算术   常用   脚本   java   位操作   返回值   until   工作   

Scala 基础语法
1.1 声明变量
1)以 val 定义一个常量(无法改变其内容):

scala> val name="zhangsan"
name: String = zhangsan

scala> name="lisi"
<console>:12: error: reassignment to val
       name="lisi"
           ^

2)以 var 定义一个可修改值的变量:

scala> var age=20
age: Int = 20

注:在scala中,我们鼓励你使用 val ——除非你真的需要改变它的内容。

3)多种定义变量的形式

scala> val msg:String = "hello"
msg: String = hello

scala> val msg:Any = "hello"
msg: Any = hello

scala> val msg = "hello"
msg: String = hello

4)scala 常用类型

和 Java 一样,scala 也有7种数值类型:Byte、Char、Short、Int、Long、Double、Float,以及一个Boolean类型(注意首字母大写)。跟Java不同的是,这些类型都是类。

1.2 算术和操作符重载
Scala 的算术操作符和在 Java 中的效果是一样的:+—*/%等操作符完成的是它们通常的工作,位操作符&|^>><<也一样。只有一点特别的是:这些操作符实际上是方法,例如:

a + b
是如下方法调用的简写
a.+(b)

这里的+是方法名,Scala 并不会对非字母或数字的方法名有偏见。又如:

scala> 1.to(10)
可以写成
scala> 1 to 10
res0: scala.collection.immutable.Range.Inclusive = Range 1 to 10

1.3 控制结构
1)条件表达式

Scala 中的if/else表达式有值,这个值就是跟在if或else之后的表达式的值:

scala> val i = 1
i: Int = 1

scala> val s = if(i > 0) 1 else -1
s: Int = 1
混合类型表达式的返回值类型是公共超类型 Any
scala> val s = if(i > 0) 1 else "error"
s: Any = 1

2)语句终止

Scala 中和JavaScript 等其它脚本语言类似——行尾的位置不需要分好,若想在单行中写下多个语句可以用分号隔开。

3)循环语句

Scala拥有于Java和C++相同的while和do循环:

while(n > 0) {
    r = r*n
    n-= 1
}

Scala的for循环区别于以往:

for(i<- 1 to n)
    r = r * i

1 to n返回数字1到数字n(含)的Range(区间);遍历字符串或数字时,往往需要使用从0 到n-1的区间,这时可以用until方法而非to方法,如遍历字符串:

val s = "Hello"
var sum = 0
for (i <- 0 until s.length)
    sum += s(i)

// 等价于如下写法
for (ch <- "Hello")
    sum += ch

高级 for 循环和 for 推导
以 变量<- 表达式 的形式提供多个生成器,用分号隔开:

scala> for (i <- 1 to 3 ; j <- 1 to 3) print((10*i+j) + " ")
11 12 13 21 22 23 31 32 33 

每个生成器都可以带一个守卫,以if开头的Boolean表达式:

scala> for (i <- 1 to 3 ; j <- 1 to 3 if i!=j) print((10*i+j) + " ")
12 13 21 23 31 32 

可以使用任意多的定义,引入可以在循环中使用的变量:

scala> for (i <- 1 to 3 ; form = 4-i ; j <- form to 3) print((10*i+j) + " ")
13 22 23 31 32 33

如果for循环的循环体以yield开始,则该循环会构建出一个集合,每次迭代生成集合中的一个值:

scala> var v = for( i <- 1 to 10) yield i % 3
v: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)

这类循环叫做for推导式,for推导式生成的集合与它的第一个生成器是类型兼容的:

scala> for ( c <- "Hello" ; i <- 0 to 1) yield (c + i).toChar
res6: String = HIeflmlmop

scala> for ( i <- 0 to 1 ; c <- "Hello") yield (c + i).toChar
res7: scala.collection.immutable.IndexedSeq[Char] = Vector(H, e, l, l, o, I, f, m, m, p)

学习大数据:Scala

标签:定义变量   算术   常用   脚本   java   位操作   返回值   until   工作   

原文地址:https://blog.51cto.com/14814821/2529902

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!