Scala的實際應用場景

背景

我剛接觸函數式語言是在大學裏,一個叫Programming Languages的學科,一個學期學了將近10個開發語言,其中Functional Programming Language是一個系列,有Scheme,ML等。出來工作後,一直覺得這些語言在商業應用上似乎不太看重。

直到某天我看到一側新聞,Twitter採用了Scala解決了什麼什麼瓶頸問題,我纔對Scala開始了關注。

但是我不是談什麼是Scala,或者函數式編程的理論,我是談實際項目中我常用的小技巧。

常用場景

假如我需要顯示:(1)訂單列表,(2)訂單明細。假設前段是HTML,我有對象Order和OrderDetail。在顯示列表時,一般的做法是運用for-loop。在顯示明細時,也是會用for-loop。
其實在Functional Programming(FP)的思維方式通常不是這樣步驟式的一個一個處理。

FP的思維方式是通過函數來轉換成我們需要的東西。

例如我們有一個變量 orders 類型爲 List[Order],我們需要的HTML結果是 <table> 中,一個order爲一個 <tr> 行,我們就需要專注一個Order如何變做一行<tr>的函數:

val content = orders.map( o => "<tr><td>"+o.getOrderNo()+"</td></tr>" )

如果用Scala Template (Playframework),這個會容易維護一點:

@orders.map{ o =>
   <tr><td>@o.getOrderNo()</td></tr>
}

map是轉換的意思,是把在Collection內的每一個元素,通過你給的函數來做轉換。以上的例子,一個 List[Order] 通過map函數,轉換成爲List[String] , 或者在Scala Template裏的 List[Html]

如果你是做桌面應用,需要處理Widget的話,這個思維方式也合用。你可以把List[Order] map 成 List[Widget],接着把他們掛到相應的節點上。

一般的FP會提供比較強大的Collection處理、轉換、過濾等等功能。

用了這種思維方式,你會發現你的代碼變得非常簡潔,而且容易維護。

後話

通過思維方式的改變,就是從步驟式的思維方式變成結果導向的思考方式,個人經驗是會大大提升你的生產力,值得在商業領域上大力推廣。

我慢慢發現我開始不習慣使用 for-loop,while-loop 了。

發佈了27 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章