Scala 是一门多范式的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。 学习Scala会让人有打开眼界的感觉,非常的优雅的写法和与C/C++一些不同的思想。
非常的简单,在ubuntu中只需要sudo apt-get install scala即可,在其他的linux中,找到下载源文件安装即可。
安装成功后使用scala进入shell环境:
yqtao@yqtao:~$ scala Welcome to Scala version 2.11.6 (OpenJDK 64-Bit Server VM, Java 1.8.0_121). Type in expressions to have them evaluated. Type :help for more information. scala>下面编写一个简单的hello,world程序:
在shell中输入下面的内容:
object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } }上面是一个单例模式,定义了一个main方法,可以用如下方式进行调用:
scala> HelloWorld.main(null) //输出结果 Hello, world!首先建立一个HelloWorld.scala文件,编辑此文件,写入:
object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } }下面对上述文件编译运行:
//编译scalac yqtao@yqtao:~/scala$ scalac HelloWorld.scala //运行scala yqtao@yqtao:~/scala$ scala HelloWorld //输出结果 Hello,world在命令行输入scala进入交互式界面,下面进行一些简单的交互操作:
scala> 1+2 res0: Int = 3 scala> res0+2 res1: Int = 5上面的res0,res1为Scala 解释器自动生成的变量名或者由你指定的变量名用来指向计算出来的结果,Int为计算类型。
Scala 定义了两种类型的变量 val 和 var ,val一旦初始化之后,不可以重新复制(我们可以称它为 常变量 )。而 var 就是普通的变量可以随意修改。
注意scala定义变量是一定要加val或var,这点和python不一样。
scala> val a=1+2 a: Int = 3 //出错,不能修改 scala> a=4 <console>:8: error: reassignment to val a=4 ^ scala> var b=1 b: Int = 1 //可以修改 scala> b=3 b: Int = 3注意上面的定义没有指定类型,因为scala是类型推导的,当然也可以自己指定类型。需要注意其形式变量后a:Int与我们熟悉的c语言不同。
scala> val a:Int=4 a: Int = 4如下定义一个比较大小的函数,这里注意其格式。
scala> def max(x:Int,y:Int):Int={ | if (x>y) x | else y | } max: (x: Int, y: Int)IntScala 函数以 def 定义,然后是函数的名称(如 max )。Scala 中变量类型是放在参数和变量的后面,以 : 隔开。这种做的一个好处是便与“ type inference ”。 此外每个 Scala 表达式都有返回结果(这一点和 Java,C# 等语言不同),比如 Scala 的 if else 语句也是有返回值的,因此函数返回结果无需使用 return 语句。实际上在Scala代码应当尽量避免使用 return 语句。函数的最后一个表达式的值就可以作为函数的结果作为返回值。
调用方法:
scala> max(1,2) res0: Int = 2Scala 的数据类型都是对象(比如整数),如你可以这样使用:
scala> (-1).abs res1: Int = 1Scala 发现基本类型 Int 没有提供 abs() 方法,但可以发现系统提供了从 Int 类型转换为 RichInt 的隐式自动转换,而 RichInt 具有 abs 方法,那么Scala就自动将 1 转换为 RichInt 类型,然后调用 RichInt 的 abs 方法。
Scala 的基本数据类型有:Byte、Short、Int、Long 和 Char(这些成为整数类型)。整数类型加上Float 和 Double 成为数值类型。此外还有 String 类型,除 String 类型在 java.lang 包中定义,其它的类型都定义在包 scala中。
Scala 的基本数据类型的字面量也支持方法(这点和 Java 不同,Scala 中所有的数值字面量也是对象),比如:
scala> (-2.7).abs res3: Double = 2.7 // 感觉很神奇 scala> -2.7 abs warning: there was one feature warning; re-run with -feature for details res4: Double = 2.7 scala> 0 max 5 res5: Int = 5 scala> 4 to 6 res6: scala.collection.immutable.Range.Inclusive = Range(4, 5, 6)Scala 提供了丰富的运算符用来操作前面介绍的基本数据类型。这些运算符(操作符)实际为普通类方法的简化(或者称为美化)表示。比如 1+2 ,实际为 (1).+(2) ,也就是调用 Int 类型的 + 方法。 这里感觉很神奇的感觉:Scala中所有的数据类型都是对象,操作符是类方法的简化表示。
scala> 1+2 res0: Int = 3 //调用类Int的方法.+ scala> val sum=(1).+(2) sum: Int = 3+ 符号是一个运算符,并且是一个中缀运算符。 在Scala 中你可以定义任何方法为一操作符。 比如 String 的 IndexOf 方法也可以使用操作符的语法来书写。 例如:
scala> val s="abc" s: String = abc scala> s indexOf "b" res1: Int = 1 scala> s.indexOf('b') res2: Int = 1由此可以看出,运算符在Scala 中并不是什么特殊的语法,任何Scala方法都可以作为操作符来使用。是否是操作符取决于你如何使用这个方法,当你使用 s.indexOf(‘o’) 时,indexOf 不是一个运算符。 而你写成 s indexOf ‘o’,indexOf就是一个操作符,因为你使用了操作符的语法。
其余的操作如四则运算,位运算等于其他编程语言类似。
参考资料 https://www.shiyanlou.com/courses/490
