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是否正常安装。

scala案例 scala教程_scala

3.Hello Word

IDE 其实就是一个Eclipse的开发环境,大家都很熟悉了。新建工程->新建类即可!

scala案例 scala教程_Scala_02

可以发现,jre都是本地的,这也说明了scala是可以直接运行在JVM上的。scala也可以直接在交互式shell环境下运行(如命令行图所示),这也是scala很大的一个优势。

4.基本例子

1)变量的使用

object Hello {  
  def main(args: Array[String]) {  
      var a = 1;  
      var b = 2;  
      var c = a + b;  
      println("c = " + c);
}

var 说明编译器可以做类型推断,字符和数字使用"+"连接成字符串。

2)循环

var i = 0;  
// for loop execution with a range  
for( i <- 1 to 3){  
    println( "Value of i: " + i );  
}

唯一的区别在于符号 <-

3) 集合

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)函数

def printMe() : Unit = {  
     println("Hello, Scala!")  
}  
    
def addInt( a:Int, b:Int ) : Int = {  
     var sum:Int = 0  
     sum = a + b  
     return sum  
 }

由参数和无参数的形式,感受一下!

5)调用同一个包下面的类

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函数里面调用:

val pt = new Yiibai(10, 20);  
pt.move(10, 10);

6) Tuples

val pair = (99, "Luftballons")  
println(pair._1)  
println(pair._2)

注意访问形式

7)类的继承

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())

输出:

Woof  
I'd like to eat my own dog food  
Woof!  
I'd like to eat my own dog food!

8)Trait

类似Java interface, 但可以定义方法体!

trait Friendly {  
  def greet() = "Hi"  
}  
  
class Dog extends Friendly {  
  override def greet() = "Woof"  
}

9)异常

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")  
         }  
      }  
   }  
}

输出:

C:/>scalac Test.scala  
C:/>scala Test  
Missing file exception  
  
C:/>

10)文件

import java.io._  
  
object Test {  
   def main(args: Array[String]) {  
      val writer = new PrintWriter(new File("test.txt" ))  
  
      writer.write("Hello Scala")  
      writer.close()  
   }  
}

写文件

读文件

import scala.io._  
Source.fromFile(new java.io.File("cn.scala")).getLines().foreach(println)

5.总结

scala 在大数据,云计算方面有较为广泛的运用,学习一下还是挺有用的,欢迎大家一起分享讨论。

6.教程网站

http://www.runoob.com/scala/scala-tutorial.html

7.Scala对比Java的有点

a)Scala的代码简洁,相对于Java,代码量能减少一个数量级,不过使用门槛高;

b)Scala效率比Java高,适用于大数据处理,算法处理。