iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
1
Software Development

mostly:functional 從零開始的異世界程式觀 --- 函數式程式設計的試煉系列 第 7

mostly:functional 第六章:王國的改革、觀點的困境

我的語言的界限,即是我的世界的界限。

-- 路德維希·維根斯坦, 邏輯哲學論


回過神來,才發現窗外愈來愈暗,淺灰色的雲,不知從何時開始,已在這個城市的上空聚集起來。


在其它的國度,函式常常是…次等公民

例如 JAVA 王國,在很長的一段時間裡,一直都是個名詞的王國。在那時,所有的函式,都必須隸屬於一個物件,無法獨立存在。而這些與物件綁在一起的函式們,就稱之為方法 (method)

在 JAVA 王國裡,你可以這樣把數列的內容由小排到大,稱之為排序

// JAVA 語法
List<Integer> list = Arrays.asList(1, 4, 3, 6, 5, 2, 7, 8);
Collections.sort(list); //=> [1, 2, 3, 4, 5, 6, 7, 8]

但若你想要由大排到小,或是用不同的順序來排,那麼你要先另外創造一個用來比較的…物件,也就是身為主人的名詞,稱之為 Comparator,用來比較的物件。並在這個名詞裡,放進唯一的,用來排序的函式。

// JAVA 語法 
class DescComparator implements Comparator<Integer> {
  @Override
  public int compare(Integer i1, Integer i2) {
   return i2 - i1;
  }
}

真正要進行排序呼叫時,再將這個用來排序,只擁有方法的物件實體化,當做第二個參數傳進去:

// JAVA 語法 
Comporator cmp = new DescComporator();
Collections.sort(list, cmp); //=> [8, 7, 6, 5, 4, 3, 2, 1]

到了最近,情況似乎在慢慢的變好一點點了。在幾年前 JAVA 王國改朝換代時,終於引進了新的功能,讓大家可以如此排序數列:

// JAVA 8 以上的語法 
list.sort((i1, i2) -> i2 - i1);

雖然那個長久以來強硬的王國,終於逐漸的改革了,但是…

「但是什麼?」

許多人們的觀點,並沒有改變。只把這個當做特殊的語法糖,或僅是方便的功能。而沒有意識到,這可以是視野上的重大革新:

函數,是生而自由的

[To be continued]


上一篇
mostly:functional 第五章:文字,是非,與一等公民
下一篇
mostly:functional 第七章:不存在的名字、自由的樣貌
系列文
mostly:functional 從零開始的異世界程式觀 --- 函數式程式設計的試煉35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
微笑
iT邦新手 1 級 ‧ 2020-09-22 18:39:52

名詞王國的門是坍方的(不

taiansu iT邦新手 4 級 ‧ 2020-09-22 22:06:02 檢舉

/images/emoticon/emoticon37.gif

0
ayugioh2003
iT邦新手 2 級 ‧ 2020-10-20 15:36:12

名詞的王國

連結失效,因為網址最後多了一個 l ~

taiansu iT邦新手 4 級 ‧ 2020-10-20 16:41:20 檢舉

感謝 issue ! /images/emoticon/emoticon41.gif

我要留言

立即登入留言