偶爾上一上IT網站,發現求新、求奇、求專、求偏的東西甚多!可謂大千世界無所不有!但面對中國軟體的現狀,一方面我們發現有很多很多的實用軟體正在編制過程之中,很多人都在加班加點,忙得不亦樂乎;還有很多很多的實用軟體沒有人開發、等待有人開發。另一方面,我們也發現有大量閒置的程式設計師,不知道自己要開發什麼!不知道要掌握什麼程式設計技能,在網路上這學那,花了大量的時間,除了學了還是學了,就是沒有做,美好時光就這樣白白流失,令人心痛。許多程式設計師並不知道這些實用軟體目前最缺乏的不是新的、奇的、專的、偏的東西,而是實用技術,是實用技術運用的品質和技巧。
由於程式設計是“條條大路通羅馬”,程式設計師有很大的自主性,程式設計師可以採用任意方法實現功能,導致程式設計水平的高低不平。我認為程式設計師應該掌握的實用程式設計技能,掌握這些技能就要掌握這些技能的本質,吃透這些本質,才能歸納其應用範圍和注意點:而那些只會寫程式不知道為什麼這樣寫的程式設計師則可能不能用最好的語句、最簡的語句、最恰當的語句來編寫程序,更不用說採用更高的技巧去組合這些語句,以達到高質量的程序。
長期的程式設計實踐中我認為以下的程式設計技能是基礎,是必須要掌握的,其他更高層次的程式設計技能,則要用到才能學到。
1、 賦值
賦值是程式設計中不可缺少的基本語句,而且是最基本的語句。掌握這個語句,看起來很簡單,但是越是簡單東西越是要注意。最簡單的賦值是指將一個值賦給一個變數。例如x=1。
賦值的本質是事物間的轉移。而且賦值本身就是一個中間過程,反映到程式碼層級意義就是將記憶體中的值或記憶體指標賦給一個記憶體指標。
賦值有兩個面向:一個是:取什麼值或變數或對象,一個是:賦到什麼變數或物件。程式設計師在程式設計的時候,往往在兩個方面都有困惑:我取什麼值、取什麼變數、取什麼對象,怎麼找到這些值、這些變數、這些對象,我取到後,我賦給誰。這都是我們常常會遇到的。
在我們賦值的時候我們要注意:
1) 等式兩面的資料型態要相等。
2) 賦值語句比其他語句相比是比較快的。這點在註重效率方面要注意的。
賦值語句比函數呼叫快,比循環語句快。
例如:一個巨大循環中寫了一個循環語句:
for(i=0;i<3;i++)
A[i]=i+1;
不如將其變成賦值語句:
A[0]=1;
A[1]=2;
A[2]=3;
3) 當有多條賦值語句的時候,賦值處理可能會有先後序。
4) 賦值語句多了(20條以上,閱讀起來非常死板,沒有技術含量),可能要考慮到循環賦值。
2、 條件處理
條件處理是僅次於賦值處理程式設計內容,程式的變化基本上是由於條件處理引起的。不同的條件成立將進行不同的處理。所以條件處理的本質是事物變化的改變帶來相對應的改變。
在程式設計實踐中,我們往往困惑於:什麼樣的條件?做什麼事?而且還要考慮什麼時候開始考慮條件。
賦值處理是個順序處理。而條件則增加賦值處理的可能性,當條件滿足時,A賦值就可能執行了,當條件不滿足時,B賦值就可能執行了。
在條件處理的時候,我們要注意:
1) 我們如何選擇我的條件?即我們的條件表達式。
其實這個問題很複雜。
一般來說,我們會把最主要的條件當作第一個條件。但是,我們也會把滿足條件的最大結果集的條件當作第一個條件。這樣最後的條件,往往是不能滿足的,或是滿足後,也不需要太多處理的。
從條件式的設計中,我們可以單一變數來表示條件,也可以多個變數運算來表示條件,單一變數中,可以用數值型、字元型、邏輯型來表示。其中,也是很有講究的。
例如。 flag==1;flag=='1';flag==True
都可以讓程式條件轉移,但是,如何選擇則要考慮的許多因素。
2) 我們不要遺漏例外情況
例如,我們考慮i=1的時候,i=2的時候,就是沒有考慮到i<1的時候和i>2的時候。
遺漏條件,往往說明我們的程式設計師缺乏全局觀念、缺乏例外觀念。很多程式寫的不好的原因其中就有這個問題。
3) 條件間不能有交叉
例如:
If(i>1 &&i<=5)
x=1;
If(i>4&&i<10)
x=2;
當i=5的時候,
x先等於了1,後等於了2。這個必須要避免的。很多程序出錯,都和這類問題有關。
4) 要特別注意條件處理的覆蓋問題。
例如:if(flag==1)
X=1;
If(flag==2)
X=2;
X=5;
無論什麼條件,x始終等於5。
5) 要知道if和case的各自適應情況。懂得什麼時候用if,什麼時候用case。
3、 循環
循環是重複操作的簡單表達,只要有重複操作,就可以採用循環語句。循環的本質是重複。
在循環處理的時候,我們要注意:
1) 循環處理是影響效率的重要面向
當程式出現效率問題的時候,要先在迴圈語句中進行查找。
2) 循環處理的前提條件
一般來說,重複執行三次以上可以用迴圈語句。低於三次的,最好不要用迴圈語句。
例如:
For(i=0;i<3;i++)
B[i]=i;
不如寫成:
B[0]=0;
B[1]=1;
B[2]=2;
當然從可讀性和可擴展性方面,也可以用循環語句。
3) 不同的迴圈條件採用不同迴圈語句
程式設計師要懂得什麼情況下用for,什麼情況下用do while,什麼時候用foreach
雖然用以上語句都能達到相同目的,但是程式設計師還是要知道其的應用範圍,使得應有最恰當。
4) 充分利用循環中的,中斷循環,繼續循環,函數返回,程式退出等語句,使得循環更加豐富多彩。
4、 字串操作
字串是訊息的重要的表現形式。字串操作是程式設計中最常用的操作之一。字串操作的本質是資訊的加工。由於許多資訊沒有標準,程式設計師對其操作以符合自己的標準要求。
例如:有的字串包含了多種訊息,那就必須對字串進行拆分;有的字串缺失訊息,那就要對字串進行合併。
對字串操作主要注意以下幾個方面:
1) 空串處理
由於原始的字串由於操作原因和系統原因,字串的頭尾會出現若干個空格,那麼在字串處理之前,必須要將空格除去。
2) 亂碼處理
有些字串中存在各種亂碼,導致字串顯示出現看不懂的字元。這些情況主要是字串出現了控製字元的代碼,漢字中出現字元不符。
3) 分隔符號處理
分隔符號往往會出現一筆記錄之中或參數之中,起到分隔資訊之用,透過分隔符號來把資訊取出來。實際當中會出現訊息內容本身含有分隔符,或亂碼產生中產生分隔符,這些情況,就需要改變分隔符或進行特殊的處理。
4) 字元與其他資料類型的轉變
在實際程式設計當中,我們運算的物件的一致性,往往要進行字串轉向其他資料類型的操作,或其他資料類型轉向為字串的操作。一般來說,其他資料類型轉為字串比較容易,而字串轉換成其他資料類型,就要考慮轉換前的字串格式是否符合要求。
例如:將“1,000,000”轉換成數值,則轉換前要將“,”去掉。
5) 子字串處理
子字串處理在查詢中經常使用。子串匹配有前、中、後三種。子字串匹配往往要花費的時間較多,子字串越短、查詢串越長則消耗的時間越長。在建立索引欄位中進行查詢時,只有前匹配才能利用索引,到達快速查詢之目的,但是在中後匹配則索引無效,需要每個記錄逐一匹配,時間最長。程式設計師要了解以上內容,因勢利導,才能正確進行子字串處理,以達到快速查詢目的。
5、 算術運算
算術運算在程式設計之中是僅次於字串操作內容。其中加1操作很多,用途也很廣。一般應用軟體中加減乘除最為常用。算術運算本質是數值類別資訊的加工。算術運算一方面是實際應用的演算法要求,另一方面則是程式演算法的需要。
例如,應用系統中要計算長方形的面積。則會編寫S=L*D語句。
若要編寫計算100個長方形面積,則需要一個指針,透過指針+1進行下一個長方形面積的計算。而指標加1,這個運算則是演算法的需要了。
算術運算用於應用中公式計算相對簡單。但是,算術運算用於演算法的技巧和實現就不那麼簡單了,其註意點是:定義一些中間變量,透過中間變量的加減,使之能變成循環操作。
6、 數組
數組是存放資料的一個集合,數組運算也是程式設計常常遇到的:數組的本質是事物的集合。但是要注意這個集合物件個數是有限的,而其陣列是存放在記憶體之中的,因此陣列操作很快。數組的使用很大一部分是利用循環語句。數組和循環的結合使得程式的品質有很大的提升。
對數組我們應該注意:
1、 陣列的個數相關問題
2、 多維數組的表示方法,以及存放形式
3、 數組越界問題
4、 空數組
5、 數組在循環語句中的運用。
附:我以為這個主題一篇文章就能解決了,但是越寫越越多,我只好分精簡再精簡,還是要分篇寫吧。
下篇《程式設計師應該掌握的實用程式設計技能2》
主要內容:
7、 調用
8、 文件操作
9、邏輯運算
10、 數組
11、 資料庫
12、 控件
13、 類
14、 參數化