scala初步
来源:互联网 发布:人工智能 技术论坛 编辑:程序博客网 时间:2024/05/29 12:53
scala是一个高扩展性很灵活的语言,我是看着《Programming in Scala 2nd Edition》这本书开始学习scala语言的,大致看完了这本书,渐渐开始喜欢上这个简洁而又强大的语言。采用书中描述的步骤,加上自己的理解,不管你有没有编程基础,比如java等语言,通过以下简单的几步我想就可以对scala语言有一个初步的了解并且能够进行一些简单的编程了。
1.使用scala解释器
最简单的开始学习scala的方式就是使用它的解释器,就像linux的shell一样可以写一些表达式和程序,然后得到执行和输出。scala的解释器可以在命令行输入scala打开,如下所示
$ scalaWelcome to Scala version 2.8.1.Type in expressions to have them evaluated.Type :help for more information.scala> 1 + 2
res0: Int = 3
resX 符号表示的结果变量可以在随后使用
2.定义变量
scala有两种变量(val 和 var),val类似java里面的最终变量(final variable) ,一旦被初始化就不能再改变了;var变量类似java里面的non-final变量,可以在它的生命周期里被重复的复制。
scala> val msg = "Hello, world!"msg: java.lang.String = Hello, world!
你会发现变量msg没有被显示的声明为String或者java.lang.String类型,这是因为scala有一个类型分析系统,可以自动判断变量的类型,你将msg初始化为一个字符串,所以scala判断msg类型为String。当然你可以显示的声明变量的类型,有时候也需要如此,但是最好是让系统自己判断而不是写一些多余的代码。在java中,你将变量类型放在变量前面,而scala中生命变量的方式却有所不同,如下所示:
scala> val msg3: String = "Hello yet again, world!"msg3: String = Hello yet again, world!
如果你为变量msg重新赋值,解释器将会报错:
scala> msg = "Goodbye cruel world!"<console>:6: error: reassignment to valmsg = "Goodbye cruel world!"ˆ如果你必须要为一个变量重新赋值的话,就需要将变量声明为var:
scala> var greeting = "Hello, world!"greeting: java.lang.String = Hello, world!scala> greeting = "Leave me alone, world!"greeting: java.lang.String = Leave me alone, world!
3.定义函数
scala中一个简单的函数如下:
scala> def max(x: Int, y: Int): Int = {if (x > y) xelse y}max: (x: Int,y: Int)Int函数定义以def开始,然后是函数名(max),然后是圆括号中以逗号隔开的参数列表,参数的类型必须显示的声明,因为scala的编译器无法判断出函数的参数类型。参数列表后用冒号分开前面的参数列表和函数的返回类型(此例中是返回Int类型),然后就是一个等号和大括号,大括号中是函数体。可以注意到scala的函数中并没有return关键字,这是因为scala的表达式的值就是返回值。函数的返回类型也可以省略,编译器会自动判断出函数的返回类型。如果一个函数体里面只有一个语句那么打括号也是可以省略的,如下所示:
scala> def max2(x: Int, y: Int) = if (x > y) x else ymax2: (x: Int,y: Int)Int
函数调用:
scala> max(3, 5)res4: Int = 5再看一个没有参数和返回值的函数定义:
scala> def greet() = println("Hello, world!")greet: ()Unit
scala既可以写大型的复杂程序,也可以用来编写一些脚本。scala的脚本就是文件中的一些scala语句,可以随后用来执行,比如新建一个文件hello.scala,然后把下面的语句添加进去
println("Hello, world, from a script!")
就可以执行:
$ scala hello.scalaHello, world, from a script!
5.while循环和if判断
同java中的while和if类似,看如下一段脚本:
var i = 0;while (i < args.length) {if (i != 0) {print(" ");}print(args(i));i += 1;}println();
执行结果:
$ scala echoargs.scala Scala is even more funScala is even more fun
6.使用foreach和for迭代
当时用while循环的时候你其实在使用命令式的方式编程,如同java,c++一样,每次执行一次命令,而且经常在不同的函数中间共享状态。但是如果你更了解scala的话,你会以一种更加函数式的风格编写代码。比如另一种打印每一个命令行参数的方式是:
args.foreach(arg => println(arg))可以看到,你调用了args的foreach方法,方法接受到了一个函数字符串,该函数接受一个名为arg的参数。执行的结果:
$ scala pa.scala Concise is nice
Conciseisnice这里scala编译器的类型分析系统自动判断出来arg的类型为String,如果你需要显式的定义个函数字符串的话:
args.foreach((arg: String) => println(arg))如果所示:
for循环的使用方式:
for (arg <- args)println(arg)$ scala forargs.scala for arg in argsforarginargs
同样使用的类型判断。
7.数组的类型
在scala中同样可以像java中一样使用new关键字初始化类型或者单例对象实例,可以用类型或者值进行参数化。用值参数化实例的时候,将值传递构造器圆括号中。如下一12345实例化一个大整型
val big = new java.math.BigInteger("12345")当你类型参数化实例的时候与java不同的是,你将类型列表放在方括号中,如下示例中,实例化一个整型数组,大小为3:
val greetStrings = new Array[String](3)greetStrings(0) = "Hello"greetStrings(1) = ", "greetStrings(2) = "world!\n"for (i <- 0 to 2)print(greetStrings(i))
也可以显示的实例化数组:
val greetStrings: Array[String] = new Array[String](3)数组也可以简单的写成:
val numNames = Array("zero", "one", "two")
实际上是调用的单例类Array的apply方法:
val numNames2 = Array.apply("zero", "one", "two")
8.使用List
- scala初步
- scala之初步认识
- Scala初步学习
- Scala初步认识(一)
- scala学习初步
- 第一节 Scala语言初步
- Scala语言初步
- Scala学习初步
- scala学习笔记一------初步了解scala
- Scala 模式匹配初步入门
- scala编程系列(1)-scala编程入门初步
- Scala入门到精通——第一节 Scala语言初步
- Scala入门到精通——第一节 Scala语言初步
- Scala入门到精通——第一节 Scala语言初步
- scala界面GUI编程实战初步了解
- 第十节 Scala类层次结构、Traits初步
- 第78讲:scala 中Type与Class初步学习
- Scala入门到精通——第十节 Scala类层次结构、Traits初步
- 数据压缩之贪心算法-赫夫曼编码
- 对于C11中的正则表达式的使用
- 工作记录
- 使用Eclipse构建Maven的SpringMVC项目
- 拓扑排序
- scala初步
- 如何在Mac OS X 中运行Lua (Running Lua on Mac OS X)
- 在Ubuntu上安装KVM并搭建虚拟环境
- 开发腾讯移动游戏平台SDK Android版Ane扩展 总结
- 约瑟夫环问题
- FizzBuzzWhizz
- javaScript传值比较
- android颜色对应的xml配置值,颜色表
- 写复杂视图时需要注意的问题