您的位置:首页 > 其它

Scala学习笔记--第1章 Scala基础

2016-03-10 23:27 357 查看
1.1 Scala解释器
Scala解释器,其实就是相当于Linux的Shell,或者Windows的DOS窗口,正确安装Scala后,在命令行下执行scala指令,就进入到Scala解释器,如图:
Welcome to Scala version 2.11.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71).
Type in expressions to have them evaluated.
Type :help for more information.

scala>
这样就表示你已经成功安装Scala的运行环境,并已进入Scala解释器,现在可以在Scala解释器里进行操作。

scala> 10*5
res0: Int = 50

scala> res0 / 10
res1: Int = 5

scala> "Ha" * res1
res2: String = HaHaHaHaHa

scala> res0 * 0.5
res3: Double = 25.0
从图中可以看到,Scala解释器会显示生成结果的类型,例如Int、String、Double。res0,res1,res2,res3,是解释器声明的一个常量值,声明后不能修改的,假如需要更改它的值就会报错,例如:
scala> res3 = 30
<console>:9: error: reassignment to val
       res3 = 30
            ^ 
在Scala解释器中,也可以用Tab键进行补全方法名字,或者常量名,例如输入re后按Tab键:
scala> re
res0   res1   res2   res3   ref   reflect

scala> res2.to
toCharArray   toLowerCase   toString   toUpperCase
Scala解释器读到一个表达式,对它进行求值,将它打印出来,接着继续读下一个表达式,这个过程被称作读取-求值-打印-循环,即REPL。从技术上来说,这并不是一个解释器,实际上发生的是,输入的内容很快被编译成字节码,然后将这段字节码交予Java虚拟机执行。
1.2 Scala常用类型及声明值
Scala通过var或val来声明值,其中var声明的值可变,而val声明的值初始化后就不再可变,这有点类似于Java中final声明的变量。平常建议使用val来声明值,除非真的需要改变值的内容时,才用var声明,当然还是得视情况而定。声明值必须做初始化,否则将会报错。
1. val声明一个名称为sum的值,赋值为15,再次修改的时候就报错了。
scala> val sum = 1+2+3+4+5
sum: Int = 15

scala> sum = 20
<console>:8: error: reassignment to val
       sum = 20
           ^
2. var声明一个名称为count的值,count+=20,对其加20后输出:
scala> var count = 10
count: Int = 10

scala> count += 20

scala> println(count)
30
在上一章节中的Int、Double都是Scala的常用数据类型之一,和Java一样,Scala也有7种数值类型:Byte、Char、Short、Int、Long、Float、Double,还有1个Boolean类型,但是Scala并不会刻意去区分基本类型和引用类型。在Java中,声明一个常量或者变量时,总是会先指明这个常量和变量的类型,而在Scala中,则无需这么做,这个工作已经交给Scala编译器,编译器会自动识别变量和常量是数据类型或引用类型,并自动进行转换。
Scala还提供了RichInt、RichDouble、RichChar等,它们具有Int、Double、Char所不具备的方法,还有BigInt、BigDecimal,用于任意大小的数字。
1.3 Scala算术运算及函数
算术运算:
Scala的算术操作符和Java类似,例如加(+)、减(-)、乘(*)、除(/)、取余数(%),还有位操作符:&、|、^、>>、<<,但实际上,在scala中,这些操作符在代码中其实是一个方法,也就是说 a+b,在scala中真正的表现形式是 a+.(b),这里的”+“号就是一个方法名。
注意:在Scala操作符中,没有++和—,碰到一个常量需要自加一的情况,Scala中通常的表现方式是 count += 1。
Scala函数调用:
Scala除了有方法之外,还提供函数,相比Java,在Scala中使用数学函数更为简单,例如:
scala> import scala.math._   //在使用数学函数时,需要导入包,这里的下划线是“通配符”,在Java中的“*”通配符
import scala.math._

scala> sqrt(3)
res3: Double = 1.7320508075688772

scala> pow(2, 3)
res4: Double = 8.0
scala> min(3, Pi)
res7: Double = 3.0
在Java中,则直接调用Math的静态方法,而在Scala中是没有静态方法的,虽然有个类似静态方法的特性,叫做单例对象,后续会进行深入学习。通常一个类对应有一个伴生对象,其方法就跟Java的静态方法使用一样。
如果Scala定义的函数没有参数,那么在调用的时候,不需要(),例如方法distinct(获取字符串中不重复的字符):
scala> "helloworld".distinct
res8: String = helowrd

apply方法:
在Scala中,我们通常都会使用类似函数调用的语法。举个例子,取字符串str中的第几个字符,Java中的调用方法str.charAt(i),取第i个字符,而在Scala中,直接就是str(i)进行获取,就像是Java数组获取值一样。
scala> val str = "helloworld"
str: String = helloworld

scala> str(1)
res9: Char = e

scala> "Bigworld"(3)
res10: Char = w
可以把这种用法当做是()操作符的重载形式,其背后的实现原理是一个名为apply的方法,在StringOps类中(查看Scala的API文档),有个方法定义:def apply(n: Int): Char,上面执行的 “Bigworld”(3),实际运行的代码为:”Bigworld”.apply(3)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: