Re: [比較] 我為何鍾情於用 Scala 做為兵刃(三)

看板PLT (程式語言與理論)作者 (喲)時間14年前 (2011/01/22 00:46), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/11 (看更多)
※ 引述《brianhsu (墳墓)》之銘言: : 也因為如此,Scala 的做法是讓我比較習慣的:map、filter、length 這些 : 東西,是 List 物件的方法。 : 換句話說,上面的程式,在 Scala 中會長得像下面這樣: : ====================== 我是 Scala 程式分隔線 ========================= : val xs = List(-1, -2, -3, 0, 1, 2, 3) : val square = (n: Int) => n * n : val isGreaterThan5 = (n: Int) => n > 5 : val result = xs.map(square).filter(isGreaterThan5).length : // 上面那行和下面這行等價 : // val result = xs.map(n => n * n).filter(n => n > 5).length : println (result1) : ====================================================================== 我覺得 val result = xs.map(square).filter(isGreaterThan5).length 一句卻把物件導向演繹到極致了. 它意思是 xs 是物件, xs.map(square) 變成另一個物件,而且也是 List, 所以 (xs.map(square)).filter(isGreaterThan5) 又變成另一個 List 物件. "任何函數都是物件",的確如此,連函數處理結果也是物件. 跟一般 functional 所講的有一點差別的是: 這一串程式的點點串接也是個 高階函數,就像 (f . g . h) 的這種點點一樣. 只是在 Java 場合要表達成 以標的物為首,之後再接上要傳遞給標的物的各種訊息,包括 method 與函數參數. Java機制或 Scala 語言的最底層把點點處理掉了. 不曉得點點這部份可以怎麼寫呢? 前面所說 post-functional 說得也很好,恰好是在 Java-Scala 場合就要用 很混搭的,很 meta 的方式理解語言的二個構面. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.64.101

01/25 04:21, , 1F
囉嗦些: f compose g compose h apply 5 // left-assoc
01/25 04:21, 1F
文章代碼(AID): #1DERXGID (PLT)
討論串 (同標題文章)
文章代碼(AID): #1DERXGID (PLT)