宣告式程式設計(英語
:declarative programming)是一種程式設計范型
,與命令式程式設計相對立。它描述目目標性質,讓計算機明白目標,而非流程。宣告式程式設計不用告訴電腦問題領域,從而避免隨之而來的***。而命令式程式設計則需要用演算法來明確的指出每一步該怎麼做。
簡單的說,宣告式側重於做什麼,命令式側重於怎麼做。
雖然c++是物件導向的語言,但並不妨礙我們用宣告式的思想程式設計。下面舉個簡單的例子。
命令式風格:
vectornumbers = ;
int sum = 0;
for (auto iter = numbers.begin(); iter != numbers.end(); iter++)
宣告式風格:
方法一:
vectornumbers = ;
int sum = 0;
for each (auto num in numbers)
方法二:
vectornumbers = ;
int sum = 0;
for_each(numbers.begin(), numbers.end(), [&sum](int &num)
);
這兩種風格的區別就在於遍歷集合的方法。命令式中我們指定遍歷的方法。而在宣告式裡,我們不關心集合怎麼遍歷,僅僅是使用for each語句。這就是兩種思想區別。在宣告式中,我們更關心要」做「一件事情,而不太關心這件事是怎麼做的。
在上面的方法二中,我們用到了lambda表示式,這是c++11引進的新特性。lambda表示式可以使宣告式程式設計更為方便(當然並不是沒有了它就無法實現)。
再舉個例子,sql語言。sql是典型的宣告式語言。編寫sql語句只需關心程式設計目的,具體怎麼實現的則毫不關心。
不過c++並不是原生的宣告式語言,要完全像sql語言那樣的程式設計當然是不可能的。因此只能使用折中的方法。
邏輯與實現細節分離。
(該部分待補充)
宣告式程式設計並不神秘,也並不多高階。可能剛一聽會有「原來就這樣啊,還以為多高階呢」的想法。但一旦用這種思想來指導你寫**,將是一種完全不同的體驗。而且你的**質量也將提公升乙個檔次,並且這個過程是自然而然的。
未完待續……
怎麼使用Annotation進行宣告式事務管理
前言 spring對於各種各樣的orm框架 包括jdbc 都可以它進行宣告式事務管理,以下講 解的是spring對hibernate的宣告式事務管理,也是用的最多的 一 匯入命名空間並注入sessionfactory 在spring配置檔案中beans元素中 xmlns tx xsi schemal...
使用XML進行宣告式事務管理
前言 spring對於各種各樣的 orm框架 包括 jdbc 都可以它進行宣告式事務管理,以下講 解的是spring 對hibernate 的宣告式事務管理,也是用的最多的 一 匯入命名空間並注入sessionfactory 1.在 spring 配置檔案中 beans 元素中 xmlns tx x...
宣告式程式設計與命令式程式設計
先統一一下概念,我們有兩種程式設計方式 命令式和宣告式。我們可以像下面這樣定義它們之間的不同 命令式程式設計 命令 機器 如何去做事情,告訴它如何去做。宣告式程式設計 告訴 機器 你想要的是什麼,讓機器自己去做。宣告式程式設計和命令式程式設計的 例子 舉個簡單的例子,假設我們想讓乙個陣列裡的數值翻倍...