1 函式式程式設計

2021-09-24 08:06:31 字數 1637 閱讀 9445

關注點不同: 命令式程式設計關注的是怎樣做,告訴程式怎樣做,才能達到乙個功能 而函式式是關注做什麼,不需要告訴怎麼做,不需要關注實現的細節,告訴它要實現什麼功能即可

舉例:在一堆數字裡面找到最小的值,兩種實現方式如下

/**

* 什麼是函式式程式設計

*/public class whyuselambda ;

old(nums);

lambda(nums);

}// 命令式程式設計

public static void old(int nums)

}log.info("old method min: {}", min);

}// 函式式

public static void lambda(int nums)", min);

}}複製**

如此應該可以理解一下了,命令式程式設計需要我們告訴程式如何實現這個功能,注重實現的細節,函式式則不關注這個實現的細節,只要最終結果。

拓展一下剛才的例子,如果資料量很大,那麼按照之前的命令式程式設計**,消耗的時間就會很多,然後我們就得利用執行緒池和二分法等方法去優化我們的**,這裡面的**都是我們要實現的,而函式式就很便捷了,直接利用parallel方法快速優化,**如下:

int min = intstream.of(nums).parallel().min().getasint();

複製**

還有在**簡潔明瞭方面的對比:

public static void threadcontrast

() }).start();

new thread(() -> log.info("lambda method ok")).start();

}複製**

對比兩種寫法,你會發現函式式程式設計更優雅。也許你剛開始不怎麼習慣,但是用多了,你會發現,函式式程式設計是真的好用!

2. lambda 初接觸

修改一下上面使用執行緒的**如下:

public static void threadcontrast1

() };

new thread(target).start();

runnable target2 = () -> log.info("lambda method ok");

new thread(target2).start();

}複製**

可以看出, 這個 lambda 返回的是乙個介面的例項。

再修改一下**:

public static void threadcontrast2

() };

new thread((runnable)target).start();

object target2 = (runnable) () -> log.info("lambda method ok");

new thread((runnable)target2).start();

}複製**

如此可以看出,lambda 表示式要告訴它返回實現的介面型別。

簡單總結: lambda 表示式返回了乙個實現指定介面的例項

複製**

Scala函式式程式設計 1

val a list 1,2,3,4 遍歷迴圈 for i a print i for i 0 to a.length 1 println a i for i 0until a.length print a i foreach迭代列印 a.foreach x int println x 使用型別推斷...

談談函式式程式設計的優點(1)

談談函式式程式設計的優點 1 注 這是作者本人的體會和隨想,想到那裡寫到 不定時更新,有錯誤請指出。函式式程式設計 fp 和物件導向 oo 是兩種不同的程式設計正規化,近幾年,隨著對fp的重新認識,不少人認為相比oo,fp有一些明顯的有點,不少地方甚至於更近一籌。為何他們認為函式式程式設計 fp 優...

拿 C 搞函式式程式設計 1

最近閒下來了,準備出乙個 c 搞 fp 的合集。本合集所有 均以 c 8 為示例。可能你說,為什麼要這麼做呢?回答 為了好玩。另外,意義黨們請 gun cu ke!c 有委託,而且有 func 和 action 可以說函式被視為一等功名,跟 int bool 等型別並沒有什麼區別。那麼很多事情就簡單...