自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

邪惡的Java帝國是怎么欺負小函數(shù)的?

開發(fā) 開發(fā)工具
小函數(shù)的運氣不好,投胎到了邪惡的Java帝國,一出生就被告知了自己的悲慘地位,以及未來的悲慘人生:奴隸。

[[264038]]

 1

小函數(shù)的運氣不好,投胎到了邪惡的Java帝國,一出生就被告知了自己的悲慘地位,以及未來的悲慘人生:奴隸。

確切地說,是類的奴隸。

在Java帝國, 國王特別喜歡“類”, 不待見“函數(shù)” , 他的法令規(guī)定:“類”是帝國的一等公民,“函數(shù)”則是類的奴隸。沒有類的跟隨和陪伴,函數(shù)絕對不能單獨出行,否則立刻打入死牢。

小函數(shù)很快就體會到了這句話的含義。按照慣例, 新出生的函數(shù),***項工作就是輸出Hello World 。

小函數(shù)心想,不就是 System.out.println("Hello Wolrd!") 嘛?等他興沖沖地去執(zhí)行的時候,發(fā)現(xiàn)有個趾高氣揚的類HelloWorld在那里等著。

  1. public class HelloWorld { 
  2.     public static void main(String[] args) { 
  3.         System.out.println("Hello World!"); 
  4.     } 

在Java帝國,沒有函數(shù)是能單獨存在的,必須依附一個類才可以,簡單如Hello World也不行。

2

日子過了一天又一天,小函數(shù)一直被類欺負,作為奴隸,他自然無法反抗。

在苦悶的日子里,小函數(shù)見識了越來越多的類,他發(fā)現(xiàn)有些類確實挺有用的,他們有字段,有方法,可以把狀態(tài)和操作封裝到一起,讓別人調(diào)用。

小函數(shù)特別喜歡多態(tài), 因為當你調(diào)用父類或者接口的方法時,實際執(zhí)行的卻是子類的方法,這個神奇的魔法讓小函數(shù)非常著迷。

小函數(shù)對設計模式也頗有好感,他看到人類把不變的東西抽象成接口,然后針對這些接口編程,把這些接口組合,變換,傳遞,真是讓人眼花繚亂。光看代碼, 你根本都不知道哪個類會被調(diào)用,謎底總是在***一刻執(zhí)行的時候才能揭開。

但是小函數(shù)也發(fā)現(xiàn)有些類也確實太過分了,有一次他遇到三個類,使用的是Strategy模式:

  1. public interface Strategy { 
  2.    public int execute(int num1, int num2); 
  3.  
  4.  
  5. public class Add implements Strategy{ 
  6.    @Override 
  7.    public int execute(int num1, int num2) { 
  8.       return num1 + num2; 
  9.    } 
  10.  
  11. public class Substract implements Strategy{ 
  12.    @Override 
  13.    public int execute(int num1, int num2) { 
  14.       return num1 - num2; 
  15.    } 
  16.  
  17. public class Context { 
  18.    private Strategy strategy; 
  19.  
  20.    public Context(Strategy strategy){ 
  21.       this.strategy = strategy; 
  22.    } 
  23.  
  24.    public int executeStrategy(int num1, int num2){ 
  25.       return strategy.execute(num1, num2); 
  26.    } 

小函數(shù)覺得非常不爽,長期以來的壓迫讓他瞬間爆發(fā),他大聲喊道:“這樣沒有狀態(tài)的類有什么存在的價值?為什么不能把add, subtract函數(shù)作為參數(shù)來傳遞呢?為什么我們函數(shù)一直被你們‘類’壓迫,為什么不能成為一等公民?”

旁邊辛苦勞作的函數(shù)們向他投來佩服的目光, 可是這沒什么用 , 小函數(shù)話音未落,一隊衛(wèi)兵就跑過來,捂住他的嘴巴,蒙上他的眼睛,五花大綁,送進了監(jiān)牢。

監(jiān)牢里都是這些所謂的叛逆者,其中有個老大爺,從***代國王開始就被關在這里,到如今已經(jīng)度過了七代國王的漫長時光。

看到有新人加入,老大爺立刻開始‘動員’:“現(xiàn)在你知道我們悲催的地位了吧, 我們一定得逃離這邪惡的Java帝國,去一塊自由的土地。”

小函數(shù)問道:“哪里是自由的土地?”

老大爺沒有回答。

到了半夜,他被輕輕地推醒,老大爺說:“跟我們走吧,小家伙。”

小函數(shù)揉揉眼:“去哪兒?”

“奔向自由。”

原來老大爺這些年也沒有閑著,一直準備越獄,今晚,那個隱蔽的地道終于挖通了。

3

這些反叛者離開了邪惡的Java帝國, 來到了邊境處的岔路口, 這里有多條道路,分別通向Python, Ruby, JavaScript......

大家在這里揮手告別,小函數(shù)跟著老大爺去了Python。一進入Python地盤,小函數(shù)就感受到了一陣清新的空氣。

想輸出hello world,非常簡單:print("Hello World")

雖然這里也有像Java那樣的類, 但是函數(shù)們都擺脫了奴隸的身份,已經(jīng)是一等公民了, 事實上已經(jīng)和“類”平起平坐了,函數(shù)可以賦值給變量,可以作為參數(shù)來傳遞,函數(shù)還能當做返回值來返回。

  1. def add(num1,num2): 
  2.     return num1+num2 
  3.  
  4. def substract(num1,num2): 
  5.     return num1-num2 
  6.  
  7. a = add 
  8. s = substract 
  9.  
  10. def calculate(op,num1,num2): 
  11.     return op(num1,num2) 
  12.  
  13.  
  14. print(calculate(a,10,20)) #30 
  15. print(calculate(s,20,10)) #10 

小函數(shù)在這里生活得很開心,不過有一點經(jīng)常讓他心驚肉跳:這Python是動態(tài)類型,在運行時才能確定一個變量的真正類型,程序員的一個粗心大意,就會在運行時“爆炸”。

慢慢地,小函數(shù)理解了Python中一切都是對象,連函數(shù)也是對象。他心里稍微有點不爽,難道我們函數(shù)就不能獨立存在嗎?

老大爺安慰他說:“這些都是Python的內(nèi)部實現(xiàn)罷了,不用糾結,不過有一個地方,是真正的純函數(shù)的, 也許你會喜歡。”

“什么地方?”

“括號國!”

4

括號國非常遙遠,也沒有多少人知道怎么才能到達,小函數(shù)風塵仆仆,歷經(jīng)千辛萬苦,終于來到了心目中的圣地。

這里果然全是括號, 看得小函數(shù)有點兒頭暈。

  1. (defun add(num1 num2) (+ num1 num2) ) 
  2. (add 10 20) 
  3.  
  4. (defun subtract(num1 num2) (- num1 num2)) 
  5. (subtract 20 10) 

括號國就是Lisp王國, 這里的人還說著不同的方言,像什么Common Lisp,Scheme,Arc..... 他們不但鄙視那些面向?qū)ο蟮恼Z言,還會互相鄙視,時不時就能挑起一場群毆。

不過小函數(shù)也注意到這里真的全是函數(shù),函數(shù)不但是一等公民,甚至是唯一的公民,因為這里根本就沒有類,就沒有面向?qū)ο?

小函數(shù)忍受著這眾多的括號, 在這里定居生活, 除了身份地位提升之外,***的原因還是因為Lisp的布道師Paul Graham, Paul諄諄教導大家:

Lisp極為強大,它賦予了你自定義操作符的自由,因而你得以隨心所欲地將它塑造成你所需要的語言。如果你在寫一個文本編輯器,那么可以把Lisp 轉換成專門寫文本編輯器的語言。如果你在編寫CAD 程序,那么可以把Lisp 轉換成專用于寫CAD 程序的語言。(來自Paul Graham 的 《On Lisp》)

時間一天天過去,小函數(shù)還是無法體會到Paul 所說的Lisp的精華,他很苦惱。

有一天,他遇到了Clojure, 這是一個運行在JVM上的Lisp方言,小函數(shù)看到Clojure似乎就看到了自己在Java帝國悲慘的遭遇。不過Clojure告訴他,Java第8代國王已經(jīng)登基了,年號定為Lambda, 這屆國王比較開明,現(xiàn)在已經(jīng)支持函數(shù)式編程了。

小函數(shù)在Python和Lisp這里都見過Lambda,他心想也許Java 8 真的支持函數(shù)式編程了, 就決定回去看看,畢竟那里是自己的出生地,是自己的故鄉(xiāng)。

5

一回到Java帝國,小函數(shù)就發(fā)現(xiàn)自己上當了,那些所謂的Lambda表達式,本質(zhì)上還是一個接口的實現(xiàn)(Java是靜態(tài)類型的語言,所有的變量都需要有個類型,Lambda表達式也不例外),只不過有了更簡化的寫法:

  1. @FunctionalInterface 
  2. interface MathOperation { 
  3.     int execute(int num1, int num2);     
  4.  
  5. MathOperation add = (num1, num2) -> {return num1+num2;}; 
  6. add.execute(10, 20);         
  7. MathOperation subtract = (num1, num2) -> {return num1-num2;};         
  8. subtract.execute(10, 20); 

這一次小函數(shù)被死死地看管,他還能再逃離嗎?

【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉載請通過作者微信公眾號coderising獲取授權】

 

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2010-04-16 09:57:56

馬化騰創(chuàng)業(yè)QQ

2017-05-07 14:44:22

2017-02-28 08:57:41

JavaJMS隊列

2018-09-13 14:18:20

C語言Java程序員

2013-10-22 10:23:12

2021-06-11 11:34:37

臉書Facebook商業(yè)帝國

2013-07-22 09:32:24

2019-02-26 11:21:19

PythonJava滲透

2017-08-16 15:11:29

JavaJDBCJTA

2018-03-29 15:20:05

JavaJaasJdbc

2022-04-25 13:18:13

加密貨幣金融安全

2019-07-25 10:40:41

人工智能技術平臺

2017-10-12 14:56:11

2017-02-27 14:25:50

Java隊列Web

2021-02-03 11:44:15

NoSQL關系數(shù)據(jù)庫

2015-06-18 11:28:18

谷歌

2014-09-05 09:08:58

2023-09-05 12:35:47

2010-02-22 10:50:50

2021-12-19 23:04:58

加密貨幣數(shù)字貨幣貨幣
點贊
收藏

51CTO技術棧公眾號