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.blogspot.com
Scala - 釋迦樂,思家了: 5. 再論 class
http://sayscala.blogspot.com/2011/05/5-class_10.html
Scala - 釋迦樂,思家了. 在第 3 章我們討論 class 與 object 的宣告,這個章節我們將延續這個主題,繼續說明與 class 相關的議題。 張貼者: 釋迦樂,思家了! 訂閱: 張貼留言 (Atom). Scala - 釋迦樂,思家了. 5-15 Uniform access principle. 5-13 「無括號 method」與「空括號 method」. 5-11 Data member 與 Access methods. 5-10 Data member 與 method 的 name space. 5-4 檔案與 class 的關係. 5-2 Scala object hierarchy. 4-7 控制結構 - match expression. 4-6 控制結構 - try,例外處理. 4-5 控制結構 - for expression. 4-4 控制結構 - while statement. 4-3 控制結構 - if statement. 4-1 Scala 中的控制結構(Control Structures).
sayscala.blogspot.com
Scala - 釋迦樂,思家了: 5-7. Anonymous class
http://sayscala.blogspot.com/2011/05/5-7-anonymous-class.html
Scala - 釋迦樂,思家了. Anonymous class 就是不具名的 class,通常用在我們不需要給一個很清楚的 class 名稱時。 在 Java 我們時常遇到 anonymous class,anonymous class 讓我們很方便產生一個暫時性的 class。 Java 產生 anonymous class 的語法,通常隨著 create 一個 anonymous class 的 instance 一起。 Runnable r = new Runnable { / 這裡表示產生一個 anonymous class,但implements Runnable interface / 大括號裡面就是該 anonymous class 的內容 / 定義完 anonymous class,馬上 create 一個 instance 傳回去 public void run() { . } }; Thread thrd = new Thread(r).start(); });. 或許語法,你不會很熟悉,但這是很常見的寫法,請把它記住。 Scala 中的語法與 Java 的類似。
sayscala.blogspot.com
Scala - 釋迦樂,思家了: 5-1. Single inheritance
http://sayscala.blogspot.com/2011/05/5-1-single-inheritance.html
Scala - 釋迦樂,思家了. Scala 與 Java 一樣,為避免多重繼承所引起的問題,以及簡化語言的複雜性,採取單一繼承的方式,這也是許多程式語言的方式。 但多重繼承並不完全是缺點,它仍是很合乎人們的思考方式,為改善這個缺陷,Java 引進 interface 的觀念。 Scala 中不再支援,但支援更強的功能,叫做 trait(特徵)我們之後會好好解釋 trait。 張貼者: 釋迦樂,思家了! 訂閱: 張貼留言 (Atom). Scala - 釋迦樂,思家了. 5-15 Uniform access principle. 5-13 「無括號 method」與「空括號 method」. 5-11 Data member 與 Access methods. 5-10 Data member 與 method 的 name space. 5-4 檔案與 class 的關係. 5-2 Scala object hierarchy. 4-7 控制結構 - match expression. 4-6 控制結構 - try,例外處理. 4-5 控制結構 - for expression.
sayscala.blogspot.com
Scala - 釋迦樂,思家了: 5-4. 檔案與 class 的關係
http://sayscala.blogspot.com/2011/05/5-4-class.html
Scala - 釋迦樂,思家了. 5-4 檔案與 class 的關係. 在 Java 中,source code 的檔案名稱,以及目錄階層,與你的 class name 與 package 需要相對應。這是你在撰寫 Java 程式時需要注意的。 Java 規定 public class 需要放在與 class 同名的檔案中,目錄結構需要與 package 結構相同。 這樣規定的好處,是可以一目了然,看出原始碼的結構。但壞處是,常常我們會發現,Java 的檔案數很多,目錄層次也很多。最常感到無奈的是,你無法在一個 Java 原始檔案中看到兩個 public class,常常為了一個新的 public class,需要再產生一個 Java 檔案。 不僅僅 source code,甚至所編譯出來的 class file,Java 也會按照 package 的方式,將 class files 放置到對應 package 的目錄中。JVM 因此可以按照目錄,找尋到所需要的 class。 這種與檔案結構相對應的構想,有好也有壞,我們不適合去評判。 張貼者: 釋迦樂,思家了! 5-4 檔案與 class 的關係.
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.blogspot.com
Scala - 釋迦樂,思家了: 5-6. Inner class
http://sayscala.blogspot.com/2011/05/5-4-inner-class.html
Scala - 釋迦樂,思家了. Inner class 在 Java 中時常被使用,在 Scala 中也一樣很常被使用。 Java 宣告 inner class 的方式,是在 class 中 宣告另一個 class。 Inner class 被編譯後,會產生 outer class$inner class 的 classfile。 甚至在 method 中也可以宣告 inner class。 範例:宣告 inner class. Class J1 { class J11 { / inner class void print() { System.out.println("J11"); } } }. 2 J1$J11.class:代表 J11 的 inner class。 範例:在 method 中宣告 inner class,此時只有該 method 才知道這個 inner class。 2 J1$J11.class:代表 J11 的 inner class。 範例:inner class instance 的 creation。 請注意 j1.new J11() 這個特殊語法 } }. 請注意...
sayscala.blogspot.com
Scala - 釋迦樂,思家了: 五月 2011
http://sayscala.blogspot.com/2011_05_01_archive.html
Scala - 釋迦樂,思家了. 5-15 Uniform access principle. Scala 嘗試將 data field 與 method 做進一步的一致化,也就 data field 與 method 區分不要再這麼清楚,以後可以視為同一個種類(可以把這二者想像是同一個東西)。一致化的好處是,sub class 可以很容易使用想要使用的方式,override parent 的 method 或是 val。 1 data field 會產生對應的 method. 2 method 與 data field 的 name space 是同一個. 3 val 可以 override val. 4 val 可以 override def. 12300;Uniform access principle」就是希望 class 的使用者端,可以不理會 class 真正的宣告方式如何,可以使用相同的方式來 access 該 class 的資料。 那要如何達到「uniform access principle」? 我們要達到使用 obj.length 的方式,可以使用的方法. 2 若使用 overrid...