标签:定义变量 算术 常用 脚本 java 位操作 返回值 until 工作
Scala 基础语法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)
标签:定义变量 算术 常用 脚本 java 位操作 返回值 until 工作
原文地址:https://blog.51cto.com/14814821/2529902