scala初学12步
发布时间:2020-12-13 20:42:21 所属栏目:PHP教程 来源:网络整理
导读:第1步:下载和安装Scala 在 官网下载 并接紧缩,像安装ANT或MAVEN之类的那样,把解压后的bin路径加到path里面去就能够了。 在命令行模式下输入Scala cmd 写道 C:DocumentsandSettings19002850scala WelcometoScalaversion2.7.5.final(JavaHotSpot(TM)ClientV
第1步:下载和安装Scala 在官网下载并接紧缩,像安装ANT或MAVEN之类的那样,把解压后的bin路径加到path里面去就能够了。 在命令行模式下输入Scala cmd 写道 C:Documents and Settings19002850>scala Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.6.0_13) . Type in expressions to have them evaluated. Type :help for more information. scala> 如果你看到scala提示符,那末恭喜你,说明Scala安装成功了。 第2步:学习使用Scala解释器(interpreter) Scala也算是解释性语言,所以你可以直接与解释器交互。 cmd 写道 scala> 1 + 3 res0: Int = 4 scala> 直接输入 1 + 3 ,返回res0: Int = 4 res0表示变量名, Int表示类型, 4是值。 Scala的类型定义在冒号后面,和java放在前面不同,和UML类图的属性定义方式1样。 Scala是强类型语言,必须要定义类型,但Scala编译器足够聪明,他能够根据你的值帮你定义变量的类型。 这里res0是个变量名,所以你可以接下来再使用。 cmd 写道 scala> res0 * 3 res1: Int = 12 scala> 解释器又给了1个变量res1。 Scala的所有变量都是对象,所有操作都是方法。 所以*也是方法,你可以这样调用: cmd 写道 scala> res0.*(res1) res2: Int = 48 scala> 这个和java很不同,java的int不是对象。 是否是有点绕进去了,那末来个hello world宣布第2步结束。 cmd 写道 scala> println("Hello World!") Hello World! scala> 这个println是个方法,由于Scala有预定义导入1些类,所以可以直接使用。 由于Scala更新很快,每一个版本的Scala的解释器可能都有1些不同,所以如果返回的变量名或有其他有1点不1样,请不要太奇怪。 第3步: 定义变量 写程序最入门就是定义变量和方法,前面的变量由Scala解释器自动定义了,这1步自己定义变量。 Scala有两种类型的变量,val 和var 。 val 变量的值只能初始化1次,再次赋值就产生毛病,var就和java的变量相同,可以随时修改。 val 是函数式编程的风格,变量1旦赋值就不要再做修改,从程序上将有很多好处,但有时候做起来会比较绕。 cmd 写道 scala> val msg = "Hello World!" msg: java.lang.String = Hello World! scala> msg = "Hello JavaEye" :5: error: reassignment to val msg = "Hello JavaEye" ^ scala> Scala是强类型语言,每一个变量都需要类型。但如果你赋给变量的有足够明细的类型提示,那末编译器会帮你把类型加上去。 把刚才的msg打印出来 cmd 写道 scala> println(msg) Hello World! scala> 再来看看var ,比较好理解。 cmd 写道 scala> var greeting: String = "Hello World!" greeting: String = Hello World! scala> println(greeting) Hello World! scala> greeting = "Hello World!" greeting: String = Hello World! scala> println(greeting) Hello World! scala> 记住,Scala有两种变量标识,和java不1样。 第4步: 定义1些方法 之前程序就是变量和方法组成吧,所以变量和方法是最基础的东西。 我们定义1个取最大值的方法max cmd 写道 scala> def max(x: Int, y: Int): Int = if(x < y) y else x max: (Int,Int)Int 定义变量用val和var,定义方法用def 。 这个max方法有方法参数,返回值类型,方法体。麻雀虽小,5脏俱全了。 Scala的变量表示是变量名: 类型 ,这1点和java乃至其他语言都很不同,和UML风格比较接近。 调用方法很简单: cmd 写道 scala> max(3,8) res9: Int = 8 Scala中方法也是1个类型,或说是1个值,成为First Class。 所以可以把max看成是个变量名,(Int,Int)Int是它的类型。他可以作为参数传递,也能够赋值给其他变量。 cmd 写道 scala> val m = max _ m: (Int, Int) => Int = 将max赋值给m,请注意max后面带的下划线,不要忘记写了。调用m cmd 写道 scala> m(1,3) res11: Int = 3 scala> 在初学的时候就讲这个好像有点急进了,不太容易理解,不过没关系,先了解1下总比看到后稀里糊涂好。 第5步:运行脚本 Scala是1个动态性很强的语言,所以它也像Ruby那样,能够写脚本运行。 新建1个hello.scala的文本文件: println("Hello, world, from a script!") 打开命令行,并到达hello.scala所在的目录: D:>scala hello.scala Hello, from a script! D:> 可以看到很简单,就运行了这个脚本。 第6步: 循环用while,判断用if Scala中使用while和java差不多。 写个把输入的参数字符逐一打印出来的小脚本,printargs.scala var i = 0 while (i < args.length) { println(args(i)) i += 1 } 这段脚本会把传入的参数逐一打印出来。 while循环体外定义1个可变的变量i,在循环体内每次加1,直到传入的参数全部打印终了。 cmd D:>scala printargs.scala Scala is fun Scala is fun D:> 注意,Scala中不能用i++或++i if在第1篇的max方法中演示过了,不再重复。 第7步:用foreach和for进行迭代 上面介绍了用while做循环,用过ruby或喜欢java5新特性的人可能会说,hey,做个循环怎样这么丑? ruby,java5有foreach,Scala固然也有! 接着上面的需求,用foreach实现把传入的参数打印出来。 建个文本文件,叫pa.scala,里面写上 args.foreach(arg => println(arg)) 运行pa.scala你会看到 cmd D:>scala pa.scala Scala is easy Scala is easy D:> arg是迭代变量,不需要手工赋值,编译器会把传递给它。同时编译器会认出arg的类型,所以这里不需要定义类型。 但我觉得如果类型不是1目了然的情况下,最好是定义1下类型,可使浏览代码的人很轻松。 把arg定义上类型 pa.scala args.foreach((arg: String) => println(arg)) 注意当给变量定义类型的时候,必须要加括号! 这里传给foreach的实际上就是1个匿名方法! 匿名方法的定义是这样的: 方法参数 => 方法体 我们这个传入的匿名方法就是: (arg: String) => println(arg) 很懒的程序员会发现,这里arg好像没甚么必要,唯1参数传给唯1的方法体。在java这样的想法多是虚幻想,但Scala帮你实现了! 我们可以省略成: pa.scala args.foreach(println) 就这么少! Scala还有1个for迭代,可以做更多的事情,但这里只介绍1下它的简单用法。 在ruby中实现上面的打印参数: for arg in ARGV # Remember, this is Ruby, not Scala puts arg end 用Scala的for来实现 for (arg <- args) println(arg) 感觉怎样样?这里左箭头<-可以读成in。 在Scala,如果1句话是1行,可以省略分号;如果多个语句放在1行,用分号隔开。 第8步: 数组 数组是定义数据类型很重要很基础的容器。在Scala里如何使用数组呢?这次我们的参数由程序定义,并把他们打印出来。 建个文本文件,叫paramswithvalues.scala val greetStrings = new Array[String](3) greetStrings(0) = "Hello" greetStrings(1) = ", " greetStrings(2) = "world! " for (i <- 0 to 2) print(greetStrings(i)) 这里出现了很多Scala的新式武器! 1. 定义数组类型 Scala代码 val greetStrings = 3) val已介绍过了,表示greetStrings不能再被赋值。 这里Array[String]表示类型,可以读成字符串的数组,它是1个类型,也就是类,所以可以用new去实例化。 括号3表示数组容量是3 2. 数组元素赋值 Scala代码 greetStrings("Hello" 虽然greetStrings是不可更改的,但数字元素可以。 Scala用小括号代替java的中括号,可能很多java工程师会说:呵,发明新轮子。 其实Scala是被冤枉的。 Scala里所以东西都是对象,数组也不例外。数组赋值其实也是1个方法完成的。 上面的代码会被编译器转换成两个参数的方法: Scala代码 greetStrings.update(0, "Hello") 固然你也直接这样写上面的赋值: Scala代码 greetStrings.update("Hello") greetStrings.update(1, ") greetStrings.update(2,255)">"world! ") 3. 数组元素读取 在for循环体里面有 Scala代码 print(greetStrings(i)) 为何Scala不用中括号呢?是由于Scala有1套通用规则,会把小括号转换成apply。 所以编译器会得到这样的代码: Scala代码 print(greetStrings.apply(i)) 很魔术?其实只要知道Scala的1些通用规则,很多符号就变得非常简单易懂了。 如果不使用符号,我们的代码一样可以完成: Scala代码 val greetStrings = 3) greetStrings.update("world! ") 0.to(2)) print(greetStrings.apply(i)) 这里for循环用了0 to 2,很容易理解,就是从0到2,默许步进1. 当方法参数只有1个的时候,可以不写括号和点, 所以第1循环是这样写就够了: Scala代码 2) to是0的1个方法, Scala代码 2)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |