1.前言
最近在参加Hadoop和Spark培训,需要使用Scala,自学了一下作为入门,这里作一个记录。
2.下载
1) 在scala官网下载,地址: http://www.scala-lang.org/
2) 下载IDE,地址: http://scala-ide.org/
3)配置环境变量
SCALA_HOME:C:\Program Files (x86)\scala
Path:C:\Program Files (x86)\scala\bin
在命令行中可以测试scala是否正常安装。
3.Hello Word
IDE 其实就是一个Eclipse的开发环境,大家都很熟悉了。新建工程->新建类即可!
可以发现,jre都是本地的,这也说明了scala是可以直接运行在JVM上的。scala也可以直接在交互式shell环境下运行(如命令行图所示),这也是scala很大的一个优势。
4.基本例子
1)变量的使用
[java] view plain copy object Hello { def main(args: Array[String]) { var a = 1; var b = 2; var c = a + b; println("c = " + c); } var 说明编译器可以做类型推断,字符和数字使用"+"连接成字符串。2)循环
[html] view plain copy var i = 0; // for loop execution with a range for( i <- 1 to 3){ println( "Value of i: " + i ); } 唯一的区别在于符号 <-3) 集合
[html] view plain copy var index = 0; val numList = List(1,2,3,4,5,6); // for loop execution with a collection for( index <- numList ){ println( "Value of index: " + index ); } 4)函数 [html] view plain copy def printMe() : Unit = { println("Hello, Scala!") } def addInt( a:Int, b:Int ) : Int = { var sum:Int = 0 sum = a + b return sum } 由参数和无参数的形式,感受一下!5)调用同一个包下面的类
[java] view plain copy class Yiibai(xc: Int, yc: Int) { var x: Int = xc var y: Int = yc def move(dx: Int, dy: Int) { x = x + dx y = y + dy println ("Yiibai x location : " + x); println ("Yiibai y location : " + y); } } 在main函数里面调用: [java] view plain copy val pt = new Yiibai(10, 20); pt.move(10, 10); 6) Tuples [html] view plain copy val pair = (99, "Luftballons") println(pair._1) println(pair._2) 注意访问形式7)类的继承
[java] view plain copy trait Friendly { def greet() = "Hi" } class Dog extends Friendly { override def greet() = "Woof" } class HungryDog extends Dog { override def greet() = "I'd like to eat my own dog food" } trait ExclamatoryGreeter extends Friendly { override def greet() = super.greet() + "!" } var pet: Friendly = new Dog println(pet.greet()) pet = new HungryDog println(pet.greet()) pet = new Dog with ExclamatoryGreeter println(pet.greet()) pet = new HungryDog with ExclamatoryGreeter println(pet.greet()) 输出: [java] view plain copy Woof I'd like to eat my own dog food Woof! I'd like to eat my own dog food! 8)Trait类似Java interface, 但可以定义方法体!
[java] view plain copy trait Friendly { def greet() = "Hi" } class Dog extends Friendly { override def greet() = "Woof" } 9)异常 [java] view plain copy import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Test { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } catch { case ex: FileNotFoundException =>{ println("Missing file exception") } case ex: IOException => { println("IO Exception") } } } } 输出: [html] view plain copy C:/>scalac Test.scala C:/>scala Test Missing file exception C:/> 10)文件写文件
[java] view plain copy import java.io._ object Test { def main(args: Array[String]) { val writer = new PrintWriter(new File("test.txt" )) writer.write("Hello Scala") writer.close() } } 读文件 [java] view plain copy import scala.io._ Source.fromFile(new java.io.File("cn.scala")).getLines().foreach(println) 5.总结scala 在 大数据, 云计算方面有较为广泛的运用,学习一下还是挺有用的,欢迎大家一起分享讨论。