今天在論壇看到乙個帖子:
「不錯,我一開始就是從c語言過來的,如果有電子方面的基礎的話,我就想搞硬體開發了,現在搞c#,有點像「拿來主義」,基本不知道其所以然,還是寫c++ 的時候心最靜,其實,我現在用「類」,就是把一些功能相似的函式放在一起搞成乙個類,然後使用,還不如c的函式來的直接,一開始寫程式的時候就接收的是面向過程的思維,物件導向細節的實現也是過程的
眼下這個專案快做完了,c,mfc,c#都在用,其實內心真的非常的矛盾,就想只學一種語言,從靈魂的深處出發,我想寫c++,每次在深夜寫c#寫到頭昏腦脹時,就會嘶聲力竭的大叫「我想寫c++」,那種感覺,就像三井壽對安西教練哭著說「我想打籃球」乙個樣子,可是每次在專案中遇到c++解決不了的難題的時候,我就會「犯賤的」想念c#,矛盾,人就是矛盾的產生 ==》 我就是c++&c#的產物」
看了上面的討論,我認為根本的問題不在語言。而且,所有的問題,很少能夠歸咎於語言特性限制的。
這讓我想到了《**大全》這本書中一直強調的乙個概念:深入一種語言去程式設計,而不是在一種語言之上去程式設計。
其間的區別是,在一種語言之上去程式設計,思想受限於語言特性的限制;深入一種語言去程式設計,放在首位的是我們的思想,我們首先要確定我們的思想,之後,要用語言特性去實現它。不要將我們的思想侷限於語言特性。
無論是c,c++,c#,我們都可以編寫出優秀的**,這其中,最重要的因素,是你的思想,你的思路,而不是你使用的語言。
舉例一:
斷言是指在開發期間使用的、讓程式在執行時進行自檢的**。斷言是乙個優秀程式設計師的乙個利器,但是,有些語言並不提供斷言機制。那我們就不用斷言了嗎?非也!我們可以很簡單的實現乙個斷言,比如,在c中:
#define assert(flag)/
if (!(flag))/
printf("assert failed! file=%s, line=%d./n", __file__, __line__);/
舉例二:
物件導向有乙個非常重要的概念就是封裝。在處理全域性資料時,一般不會直接的讓客戶端訪問資料本身,而是使用訪問器函式。比如,某類中有乙個static變數,一般會配備兩個函式:1)set***();//設定函式; 2)get***()//訪問函式。這樣做的好處是:1)對外部隱藏實現的細節。2)便於擴充套件,如果有一天變數要變成結構體,客戶端部分可以基本不動,而只修改訪問器函式即可。3)存在乙個**控制點,便於定位問題。
但是,如果你使用的c語言,面向過程的,是否也可以使用這種方法來實現封裝的好處?答案是可以的。比如,有乙個兩個檔案都需要訪問的全域性變數,你可以將此檔案定義為static,只允許他在其定義的檔案內使用。然後,定義兩個非static的訪問器函式,供客戶端來訪問此全域性變數。這樣,你也可以在c中使用封裝帶來的好處。
在一種語言上程式設計和深入一種語言去程式設計的區別
今天在論壇看到乙個帖子 不錯,我一開始就是從c語言過來的,如果有電子方面的基礎的話,我就想搞硬體開發了,現在搞c 有點像 拿來主義 基本不知道其所以然,還是寫c 的時候心最靜,其實,我現在用 類 就是把一些功能相似的函式放在一起搞成乙個類,然後使用,還不如c的函式來的直接,一開始寫程式的時候就接收的...
程式語言是一種邏輯語言(形式語言)
程式語言是表達邏輯推演的語言,是邏輯語言的乙個變種 電腦程式是建立在計算機硬體和一系列規則 協議 規範 演算法基礎之上的 形式語言理論主要研究的是內部結構模式這類語言的純粹的語法領域。形式語言理論是從語言學衍生而來,作為一種理解自然語言的句法規律。在電腦科學中,形式語言通常作為定義程式語言和語法的基...
一種程式語言的基本元素
一種程式語言基本上包括 資料型別,運算子,控制語句 其中資料型別包括 基本型別,集合型別,有了資料型別,才有變數的存在。運算子 計算機的本質就是運算,而寫程式,也是為了幫助人去計算,所以一種程式語言肯定有運算子 控制語句 人類社會發生的事情,都是有條件的,存在即為正確,因為有它存在的條件。所謂控制語...