快速開發安全的應用程式,就是讓 programmer 可以很快做完他的工作,而且寫出來的程式碼不容易有 bug。
「寫出 bug 的程式不是 programmer 的問題嗎?」
一方面是,一方面也不是,若是環境面可以阻擋 programmer 不容易寫出壞程式碼,那不就很好嗎?
像static type與 dynamic type之爭,static type 就是可以讓一些比較粗心的 pprogrammer 不會寫出錯誤的程式碼。
另外,如 Java 移除掉 C 語言中的 pointer,與增加 garbage ollection,也是因為這兩個特性可以大幅增加程式碼的可靠性。
像static type與 dynamic type之爭,static type 就是可以讓一些比較粗心的 pprogrammer 不會寫出錯誤的程式碼。
另外,如 Java 移除掉 C 語言中的 pointer,與增加 garbage ollection,也是因為這兩個特性可以大幅增加程式碼的可靠性。
Scala 有什麼方式可以增加開發速度與程式可靠性呢?
1.Scala 增加 functional 的特性:
- 之前提到,函數式的方式著重在函數的可重複性,所以函數可以重複執行,不因情況不同而有不同的 return 值。
- 這種特性在平行處理中非常的重要,某個函數早執行晚執行都不會讓程式有不同的情況發生,這就讓 programmer 少了仔細的需求,減少 programmer 犯錯的機會。
- 這裡面的重點,就是多用函數,多用不可變(immutable)的資料結構(你若熟Java,就知道 String 就是不可變的資料結構),多用常數(一旦指定了值就不可再變的變數)。為何要多用不可變的呢,就是避免平行處理中的競爭問題(race condition)。
2.盡量支援平行處理:
- Scala 想要解決平行處理的問題,希望讓我們不用太花腦筋,就可以寫出 multi-thread 的正確程式。
- 有經驗的 programmer 看到 multi-thread 也要倒抽一口冷氣,真難,頭腦不轉清楚,一不小心,不是無法同時進行,不然就是 deadlock。
- Scala使用 actor 的模式來解決平行處理。筆者認為,其實平行問題的範圍廣大,資料共用是最麻煩問題,actor 模式也只處理掉一點點,雖然已大幅改善寫作品質,但面對平行問題,你還是要多小心。
3.Type system:
- Scala 的型態系統是有名的複雜,但透過 type system,compiler 會預先幫我們過濾可能的問題,預先提醒。
4.Generic(泛型):
- Java 的 generic也就是 C++ 的 Template,就是讓一段程式碼可以適應各種不同的型態,不用因為不同的資料型態而寫出很多很像的程式碼。
- Scala 承繼 Java 中 generic 的觀念,並且把它擴充的更完整,更嚴格,所以也更不容易寫出錯誤的程式碼,保障程式碼品質,但同樣的就更複雜,這是需要付出的代價。
沒有留言:
張貼留言