2014年4月6日 星期日

scala 中對於不接受參數的函數定義方式與使用方法

    scala 對於不接受參數的函數定義方式有兩種。如下面程式碼所示。

def test1 = { // 1. without ()
  println("SS")
}

def test2() = { //2. with ()
  println("GG")
}


test1()

    第一種寫法,沒有 () 。使用時,不可以加上 () 否則會出錯。因此呼叫時只有一種寫法,test1。

    第二種寫法,有 () 。使用時,可以加上 (),也可以不要加上 () 。因此呼叫時有兩種寫法, test2 或 test2()。

scala 語言特性優缺點分析

這篇文章闡述哪些 scala 特性"我認為"是好的,哪些是不好的。因為是"我認為",所以這是一篇充滿主觀意見的文章。


優點:

  1. type inference: 這個特性可以減少程式設計師輸入重複的資訊。
  2. lazy keyword: 可以做到延遲計算的功能 
  3. currying: 讓人更容易產生 partial function。
  4. 對於接受參數型別為 => Unit(Int等),要傳參數時,可以簡單的用 { } 代替。詳見範例 1
  5. actor: 多執行緒的函式庫,用 message queue share memory 的問題(當然,還是要看你的寫法。沒寫好還是有 share memory 的問題)



範例1
def repeat(times: Int) (func: => Unit) {
  for (n <- 1 to times) func
}

repeat (5) {
  println("SSS")
}


缺點:

  1. implicit conversion: 這會影響可讀性。因為你在閱讀時,無法立刻知道他在執行時,是以何種物件在執行。不過這個特性應該是為了能夠和 jvm 整合所產生的特性。
  2. 探討 scala 的函數呼叫與自動推論型別所產生的模糊情形


結論: scala 是一個很好的語言。不過他是 function programming language 的關係,可能不會紅起來。但是下一個如果能夠吸收 scala 的優點,改進 scala 的缺點,我猜能夠成為下一個主流語言。

2014年4月5日 星期六

scala play framework 使用方式





要建立專案,輸入

$ play new myFirstApp



進入 play 的 shell (用來輸入指令的)
$ cd myFirstApp
$ play shell


如果要啟用 dev server 在 play shell 輸入

run

或是

$ play run


進入 play 的 console (用來輸入程式碼的)

$ play debug console

如果要使用 stand-alone server

$ play start

你也可以把你的程式打包起來,複製到其他地方執行

$ play dist

他會產生一個 zip 檔,包含所有執行時必要的 jar。



其他可能有用指令

因為 neo4j 只支援 openjdk-7 ,所以用下面指令檢查 java version。不然 play start 未必能正常運作。

$javac -version
$java -version