最近接觸到了K8S
的架構(gòu),其中有一點(diǎn)很重要的是整體架構(gòu)采用的是聲明式編程
粗俱,主要的編程范式有三種:命令式編程
说榆,聲明式編程
和函數(shù)式編程
。
命令式編程:
命令式編程的主要思想是關(guān)注計(jì)算機(jī)執(zhí)行的步驟
寸认,即一步一步告訴計(jì)算機(jī)先做什么再做什么娱俺。
比如:如果你想在一個(gè)數(shù)字集合 collection
(變量名) 中篩選大于 5 的數(shù)字,你需要這樣告訴計(jì)算機(jī):
第一步废麻,創(chuàng)建一個(gè)存儲(chǔ)結(jié)果的集合變量 results
;
第二步模庐,遍歷這個(gè)數(shù)字集合collection
烛愧;
第三步:一個(gè)一個(gè)地判斷每個(gè)數(shù)字是不是大于 5,如果是就將這個(gè)數(shù)字添加到結(jié)果集合變量 results
中掂碱。
代碼實(shí)現(xiàn)如下:
List<int> results = new List<int>();
foreach(var num in collection)
{
if (num > 5)
results.Add(num);
}
很明顯怜姿,這個(gè)樣子的代碼是很常見(jiàn)的一種,不管你用的是 C
, C++
還是 C#
, Java
,Javascript
,BASIC
,Python
,Ruby
等等疼燥,你都可以以這個(gè)方式寫(xiě)沧卢。
聲明式編程:
聲明式編程是以數(shù)據(jù)結(jié)構(gòu)的形式來(lái)表達(dá)程序執(zhí)行的邏輯。它的主要思想是告訴計(jì)算機(jī)應(yīng)該做什么醉者,但不指定具體要怎么做
但狭。
SQL 語(yǔ)句就是最明顯的一種聲明式編程的例子,例如:
SELECT * FROM collection WHERE num > 5
除了SQL
撬即,網(wǎng)頁(yè)編程中用到的HTML
和 CSS
也都屬于聲明式編程立磁。
通過(guò)觀(guān)察聲明式編程的代碼我們可以發(fā)現(xiàn)它有一個(gè)特點(diǎn)是它不需要?jiǎng)?chuàng)建變量用來(lái)存儲(chǔ)數(shù)據(jù)。
另一個(gè)特點(diǎn)是它不包含循環(huán)控制的代碼如 for
剥槐, while
唱歧。
函數(shù)式編程:
函數(shù)式編程和聲明式編程是有所關(guān)聯(lián)的,因?yàn)樗麄兯枷胧且恢碌模杭粗魂P(guān)注做什么而不是怎么做粒竖。但函數(shù)式編程不僅僅局限于聲明式編程颅崩。
函數(shù)式編程最重要的特點(diǎn)是“函數(shù)第一位”,即函數(shù)可以出現(xiàn)在任何地方蕊苗,比如你可以把函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù)沿后,不僅如此你還可以將函數(shù)作為返回值。大部分常見(jiàn)的編程語(yǔ)言一半都已經(jīng)提供了對(duì)這種編程方式的支持朽砰,比如 JavaScript得运,再有 C# 中的 LINQ 和 Java 中的 Lambda 和閉包的概念膝蜈。
Java 8
最大的一個(gè)對(duì)函數(shù)式編程支持的更新就是 Stream API
,感興趣的可以了解下熔掺,官方文檔地址:https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html
相比于以前的命令式編程饱搏,在 Java 中我個(gè)人現(xiàn)在更傾向于函數(shù)式編程的方法,它可以讓代碼的邏輯更清晰更優(yōu)雅置逻,比如同樣的邏輯用 Java 8
的Stream
方式寫(xiě)就是:
List<Number> results = collection.stream()
.filter(n -> n > 5)
.collect(Collectors.toList());
總結(jié)
以上就上不同的三種編碼方式的區(qū)別了推沸,大家可以好好體會(huì)一下,在以后做系統(tǒng)架構(gòu)的過(guò)程中適當(dāng)運(yùn)用合適的編程方式會(huì)對(duì)架構(gòu)的易用性和可讀性有一定幫助券坞。