1. 程式人生 > >scala學習總結

scala學習總結

1. 變數的宣告

scala有兩種變數:

val和var,val相當於Java中的final變數,一旦被賦值就不能修改。

var相當於java中的普通變數,其值可變

constant為定義常量的關鍵字

指定型別宣告變數:

2. scala的常用型別和條件表示式

Scala的數值型別有7種:(無引用型別)Byte、Char、Short、Int、Long、Float和Double

1個Boolean型別

Java中的void型別對應scala中的Unit

3. for迴圈

for推導式:

4. 方法和函式的宣告以及方法轉換為函式

定義方法:

è¿éåå¾çæè¿°

定義函式:

è¿éåå¾çæè¿°

將方法轉換成函式(神奇的下劃線):

è¿éåå¾çæè¿°

5. 陣列

陣列轉換:

6. 對映

對映是鍵/值對偶的集合。對偶是元組(tuple)的最簡單形態——元組是不同型別的值的聚集。

7. 元組

8. scala集合之seq、set、map

9.scala Lazy關鍵字

當val被宣告為Lazy時,它的初始化將被推遲,直到我們首次對它取值

10. scala函數語言程式設計

函數語言程式設計之reduce

函數語言程式設計之fold

函數語言程式設計之aggregate

scala實現wordCount

11.面向物件和模式匹配

apply方法:

12. scala柯里化

柯里化(Currying)指的是將原來接受兩個引數的函式變成新的接受一個引數的函式的過程。新的函式返回一個以原有第二個引數為引數的函式。

13. 隱式轉換和隱式函式

14.泛型

15. scala中的Actor

package ActorTest

import scala.actors.{Actor, Future}

/**
  * 用Actor實現同步和非同步的訊息傳送和接收
  */
class ActorDemo3 extends Actor {
  override def act(): Unit = {
    while (true) {

      receive {
        case "start" => println("starting")
        case AsyncMsg(id, msg) => {
          println(s"id: $id, AsyncMsg: $msg")
          Thread.sleep(2000)
          //傳送訊息
          sender ! ReplyMsg(5, "success")
        }
        case SyncMsg(id, msg) => {
          println(s"id: $id, SyncMsg: $msg")
          Thread.sleep(2000)
          //傳送訊息
          sender ! ReplyMsg(5, "success")
        }
      }
    }
  }
}

object ActorDemo3{
  def main(args: Array[String]): Unit = {
    val actorDemo3 = new ActorDemo3
    actorDemo3.start()

    //非同步傳送訊息,沒有返回值
    actorDemo3 ! AsyncMsg(1, "Hi~ AsyncMsg no res");
    println("沒有返回值地非同步訊息傳送完成")

    //同步傳送訊息,執行緒等待有返回值
    val resContent = actorDemo3 !? SyncMsg(2, "Hi~SyncMsg")
    println("有返回值的同步訊息傳送完成")
    println("返回值 :" + resContent);

    //非同步傳送訊息,有返回值,返回型別是Future[Any]
    val replyRes: Future[Any] = actorDemo3 !! AsyncMsg(3, "Hi~ AsyncMsg has res")
    //等待一會,獲取返回值,否則獲取到的是none
    Thread.sleep(5000);
    if (replyRes.isSet){
      println(replyRes.apply())
    }else{
      println("none")
    }
  }
}

case class AsyncMsg(id: Int, msg: String)

case class SyncMsg(id: Int, msg: String)

case class ReplyMsg(id: Int, msg: String)

16.Akka

scala學習書籍推薦:《快學scala》