1. 程式人生 > >Scala 基礎入門教程

Scala 基礎入門教程

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)變數的使用

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 在大資料,雲端計算方面有較為廣泛的運用,學習一下還是挺有用的,歡迎大家一起分享討論。