sayscala-tips.blogspot.com
Scala Tips: 5. Scala 的 Null, null, Nil, Nothing, None, Unit
http://sayscala-tips.blogspot.com/2011/05/scala-null-null-nil-nothing-none-unit.html
5 Scala 的 Null, null, Nil, Nothing, None, Unit. Null:是所有 AnyRef 的 subclass, null 是該 class 的唯一 instance。所以每個 AnyRef 都可以指定為 null。 Nothing:是所有 Any 的 subclass。角色與 Null相類似,但 Null 對應到 AnyRef,而 Nothing 對應到 Any。Nothing也是 Null 的 subclass。但 Nothing 並沒有 instance。 None:用在 Option class中,為避免像 Java 常產生 null exception,所以引進 Option,None表示此次的 operation沒有得到資料。 Unit:tuple-0的特殊 class,本身是 Value class(並非Reference class),只有一個 instance ()。 張貼者: 釋迦樂,思家了! 訂閱: 張貼留言 (Atom). Scala - 釋迦樂,思家了. 9 撰寫 Scala 的 script. 7 scalac 的 options.
sayscala-tips.blogspot.com
Scala Tips: 6. Scala 與 Java 之 static method 互相呼叫
http://sayscala-tips.blogspot.com/2011/05/scala-java-static-method.html
6 Scala 與 Java 之 static method 互相呼叫. 1在 Scala 中如何呼叫 Java 的 static method? 很簡單,與在 Java 中使用的方式一樣,「 class.method(param.) 」就可以呼叫到。 Public class J1 { static public void static m1() { System.out.println("J1.static m1."); } }. Class S1 { def print = { println("S1.print."); J1.static m1 / 這裡呼叫 Java 的 static method } }. 2在 Java 中如何呼叫 Scala 的 static method? Scala 中沒有 static method,取而代之使用 object 來取代。 Class S { def print instance = println("S.instance") } object S { def print static = println("S.static") }. 9 撰寫 Sca...
sayscala-challenge.blogspot.com
Scala 的企圖心與挑戰: 17. Scala 與新的語言功能 --Meta Programming
http://sayscala-challenge.blogspot.com/2011/04/scala-meta-programming.html
17 Scala 與新的語言功能 - Meta Programming. Meta programming 這種技巧,在一些新語言上非常強調。 所謂 meta(翻成中介),其實就是以「抽象這一層」來作為處理的對象。 所謂抽象這一層,就是抽取出一層來。舉例而言,object (或稱 instance) 的抽象那一層就叫 class。在 meta programming 中要強調的是如何處理抽象這一層。 讓我們將話講更實際一點,在一般語言中所謂的 meta programming,就是如何用程式定義(或控制) class 的行為,比如增加 class 的 field 與 method,或是用程式定義「當有程式呼叫到 class 沒有的 method 時應該如何處理」的手段。 雖然 meta programming 有它的優點,但也有它的缺點。 第一個缺點就是 compiler 無法幫你做預先的篩選。比如,你指定了呼叫到不存在的 method 該處理的方式,若你真的打錯 method 名稱,此時的 compiler 能力幫你檢查。 張貼者: 釋迦樂,思家了! 訂閱: 張貼留言 (Atom). 1 C 複雜性與...
sayscala-tips.blogspot.com
Scala Tips: 五月 2011
http://sayscala-tips.blogspot.com/2011_05_01_archive.html
9 撰寫 Scala 的 script. Scala 可以用來撰寫 script,此時你不需先宣告 class,就可以直接執行。 Script 的寫法,與許多 script language 類似,只是使用 Scala 的語法。 在 Scala script file 中,可以直接宣告 function 與變數,直接執行。 Val n = 10 println(n). 上例表示在 Scala script 的檔案內容,只有兩行。Scala interpreter 會直接這兩個 statement。 Scala script 可以使用 args 變數取得外界所傳進來的參數。 Scala interpreter 執行的方式,其實也是先 compile,再執行。 Scala 會把你的 script 變成類似以下的程式碼,然後 compiler,再執行。 Object S { def main(args: Array[String]) { new { / 原來的 script } } }. 你可使用 scalac 來 compile script。 7 scalac 的 options. 2在 Java 中如何...
sayscala-tips.blogspot.com
Scala Tips: 3. List 中有用的 methods
http://sayscala-tips.blogspot.com/2011/05/list-methods.html
3 List 中有用的 methods. 在 Scala 中 List 是常有用的資料結構,我們可以發現有許多 method 用在處理重複工作時,非常有用。其實這些 method 出現在 Traversable 中(List 繼承 Seq,Seq 繼承 Traversable),只要 繼承自 Traversable 就都可使用這些 method。 這些 method 將 function當成參數傳入,然後各個 element 對該 fucntion做運算,所以熟悉這些 method 也是熟悉 Higher order functionality 的重要基礎。 傳入一單參數的 function(unary function)。 List 每個 element 都呼叫 map 的 function,然後產生與原來 List 相同長度的另一個 List. List(a1, a2, . an) map (f) 會轉化為 List(f(a1), f(a2), ., f(an) 。 List(1, 2, 3) map ( * 2). 上例會得到 List(2, 4, 6). 可以使用 /: 取代 foldLeft&...
sayscala-challenge.blogspot.com
Scala 的企圖心與挑戰: 14. Scala 與新的語言功能 --平行處理
http://sayscala-challenge.blogspot.com/2011/04/scala_7003.html
14 Scala 與新的語言功能 - 平行處理. 平行處理是一個非常重要的程式設計方法,你幾乎不會不遇到它,在未來越來越多複雜的程式應用中,平行處理一定跑不掉。 12300;平行處理,我會啊,Java裡面不就不包含有 thread,用它就沒錯了」. 沒錯,Java 一開始出來時,在語言層級直接支援 thread,以那時的時空背景,確實是令人眼睛一亮的特色。 12300;Java有 thread、有 synchronized (lock),還有一大堆豐富的資料結構供我們使用,還不夠嗎?」. 以上確實都是使用 Java 撰寫平行處理程式時很重要工具。 可是,你若曾經使用 Java 的 thread 來開發過程式,你會發現並不是那麼好寫。你會遇到不少狀況,不是程式不小心就給你停住(deadlock啦),要不就是資料有時對有時不對(發生 race condition 了),要讓資料穩穩的走,實在不容易。 以上的這些感覺非常正常,不單是你,這也是大家都困繞擾的問題,因此才會持續有平行處理的解決方案出現。 2lock 的順序需要保持一致(避免 deadlock). 3盡量使用 Local Thread 變數.
sayscala-challenge.blogspot.com
Scala 的企圖心與挑戰: 18. Scala 與新的語言功能 --快速開發安全的應用程式
http://sayscala-challenge.blogspot.com/2011/04/scala_9858.html
18 Scala 與新的語言功能 - 快速開發安全的應用程式. 快速開發安全的應用程式,就是讓 programmer 可以很快做完他的工作,而且寫出來的程式碼不容易有 bug。 12300;寫出 bug 的程式不是 programmer 的問題嗎?」. 一方面是,一方面也不是,若是環境面可以阻擋 programmer 不容易寫出壞程式碼,那不就很好嗎? 像static type與 dynamic type之爭,static type 就是可以讓一些比較粗心的 pprogrammer 不會寫出錯誤的程式碼。 另外,如 Java 移除掉 C 語言中的 pointer,與增加 garbage ollection,也是因為這兩個特性可以大幅增加程式碼的可靠性。 1Scala 增加 functional 的特性:. 之前提到,函數式的方式著重在函數的可重複性,所以函數可以重複執行,不因情況不同而有不同的 return 值。 Scala 想要解決平行處理的問題,希望讓我們不用太花腦筋,就可以寫出 multi-thread 的正確程式。 4Generic(泛型):. 訂閱: 張貼留言 (Atom). 10 Scala...
sayscala-challenge.blogspot.com
Scala 的企圖心與挑戰: 8. Scala 的企圖心,也是它的特性--效能
http://sayscala-challenge.blogspot.com/2011/04/scala_8514.html
8 Scala 的企圖心,也是它的特性- 效能. 一個有彈性的語言,通常效能不會太強調。這種特性,你可以在很多 script 類型的語言中發現。 這其中的原因,有些是因為要維持彈性,所以很多東西只能 runtime 才來檢查,導致效能較差,有些是因為要動態編譯,所以自然就慢。 Scala 呢?會不會功能變大了,所以效能也變慢了。若是變得太慢,可會有許多人不想移轉過來的,現在還有這麼多 C 的使用者,效能考量是主要原因之一。 這個考量,Martin 早就知道了,在 Scala 的 compiler 中,會盡量編譯出最好的 bytecode 出來。 根據實驗數字,解決同樣一個問題,使用 Java 與使用 Scala 撰寫出來的程式,效能差不多,兩者在伯仲之間。不會像 Groovy 那樣,與 原有 Java 的解決方式,有很大的效能落差。 所以,你若是Java的愛用者,不需為考量 Scala 的效能 而不敢進入 Scala 的世界。 張貼者: 釋迦樂,思家了! 訂閱: 張貼留言 (Atom). Scala - 釋迦樂,思家了. 21 Scala 的企圖心,也是它的特性 - DSL.
sayscala-tips.blogspot.com
Scala Tips: 8. Java、Scala、Groovy 合併 compile
http://sayscala-tips.blogspot.com/2011/05/javascalagroovy-compile.html
8 Java、Scala、Groovy 合併 compile. 1 使用 groovyc 由 Groovy 原始碼產生對應的 class stubs。 2 使用 scalac 編譯 Scala 原始碼。需將 Java 原始碼一起餵給 scalac,Java 原始碼在此處的作用,是讓 scalac 參考,知道有哪些 Java classes。scalac 也會將一併參考 groovyc 所產生的 class stubs。 3 使用 javac compile Java 原始碼。javac 會參考 scalac 所產生的 classes,以及 groovyc 所產生的 class stubs。 4 使用 groovyc compile Groovy 原始碼,groovyc 將參考 javac 與 scalac 所產生出來的 classes。 張貼者: 釋迦樂,思家了! 訂閱: 張貼留言 (Atom). Scala - 釋迦樂,思家了. 9 撰寫 Scala 的 script. 8 Java、Scala、Groovy 合併 compile. 7 scalac 的 options.