程式碼維護上的難題(The Challenges and Difficulties of Code Maintenance)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

在看完軟體建構之道無暇的程式碼後,在下要以這篇文章簡短說明程式碼在維護上的難題,首先以最簡單的例子:在文字模式下輸出 Hello World 文字。


請先看此網頁 The Hello World Collection,光是語言的選擇就有好多種了,且同一種語言也可以不同的寫法,例如 C 語言也可以像下面:

#include <stdio.h>
/*
 * 這是印出 Hello World 的程式嗎?
 */

int main(void) {

 printf("%c%c%c%c%c%c%c%c%c%c%c%c", 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100);
 return 0;
}

而Java更可以這樣子寫:

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d


變數命名與註解的例子
若在看到類似下面的程式碼時,看的人會如何想?

#include <stdio.h>

/*
 * 底下程式碼我也不知道在做什麼,因為我是接手的人,並非原作者
 * 而原作者也已經往生了,更糟的還在後頭,
 * 關於此部分的程式碼也沒有任何文件。
 */
int main(void) {

 int guessWhatIsIt;
 /*
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
 */

 char charCanNotBeA_VariableName;
 short shortCanNotBeA_VariableName;
 int intCanNotBeA_VariableName;
 long longCanNotBeA_VariableName;
 float floatCanNotBeA_VariableName;
 double doubleCanNotBeA_VariableName;

 for(int i = 0; i < 100; i++) {
  /*
   * Under construction....
   */
 }


 /*
  * The following code has a bug that needed to fixed quickly.
  */

 a_bug_in_some_function(param1, param2, param3);
 return 0;
}
條件式寫法的例子(由FB wayne.chang 網友所提供)
有的人喜歡把 if 包很多層,但一般比較接受的是用 && 連接條件。另外,遇到 enumeration 用 switch 也比多個 if 來的讓人接受。


真可謂程式語言裡的火星文,以上只是問題的幾點,還有可移植性、容不容易擴充、排版、整體架構等問題。

沒有留言: