程式設計師應該掌握的實用程式設計技能(之一)
偶爾上一上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、引數化