国产精品一区二区在线观看完整版,在线观看91精品国产性色,欧美日韩另类视频

杭州校區切換校區
圖標

學習文章

當前位置:首頁 > >學習文章 > >

請停止寫“爛”代碼!

發布時間: 2017-06-16 14:22:24

作為一名IT培訓講師,我的工作就是不斷審查學生們編寫的代碼。

      

這里我不想取笑任何人,單純希望大家能夠從中獲得啟示。我們先看一個奇妙的例子:

  1. if(a<8&&b<8&&c<8)

  2. a = 8;b=8;c=8;

大家不妨看看其中的錯誤在哪。大家發現了多少問題?我們先對其進行分析。最惹眼的肯定是“if”的密度。其中的三項條件之間沒有用空格隔開。由于&運算符跟8相鄰,因此很容易讓人看花眼。大家最好在代碼內容間加上空格,包括各語句之間、運算符之前與之后。下面我們對其進行重寫:

  1. if(a < 8 && b < 8 && c < 8)

有過編程經驗的朋友對“魔數”肯定有著深刻印象。魔數是指那些直接出現在代碼當中,不會自我描述且對于閱讀者而言毫無意義的數字。如果大家對于“8”這個數字沒有什么特別的負面感覺,那可以肯定您的編程從業時間并不長。這里歡迎大家來猜猜這個數字的含義。由于正是本人給學生們布置的作業,所以我很清楚這里“8”的意義(代表的是工人下班的最早時間),但對他人來說則很難猜。更糟糕的是,數字“8”在這段代碼中重復編寫了6次,意味著如果我們要將其換成7,則需要多次修改并反復查看以確認沒有漏掉某個“8”。解決方案當然是使用常量。這里我們可以定義一條常量:

  1. finalint EARLIEST_HOUR = 8;

現在代碼變成了這樣:

  1. if(a < EARLIEST_HOUR && b < EARLIEST_HOUR && c < EARLIEST_HOUR)

  2. a = EARLIEST_HOUR; b = EARLIEST_HOUR; c = EARLIEST_HOUR;

接下來看看代碼中的語義,這段代碼到底要實現什么效果?現在有了常數,看起來應該更為清楚。“if”負責測試三個變量,a、b與c。如果三個變量的值全面小于8,則全部獲得最早時間值分配。這類測試非常常見且能夠防止非法輸入狀況。然而,讓我們再來看看if本體——如果條件為真,哪行代碼會執行if結果?在開始之前,我們首先要強調一點,Java是會直接忽略空格的。這意味著對編譯器而言,我們可以隨意使用空格但并非強制性。這同時意味著Java中的語句會在編譯器發現“;”符號時終止,而非在行末自動終止。現在再來看看以上代碼。其全部寫在一行當中。由于這位同學在行前加了個“tab”,因此可以確定這一行屬于“if”語句。那么問題仍來了,if的本體究竟是什么?if的本體是:

if(a < EARLIEST_HOUR && b < EARLIEST_HOUR && c < EARLIEST_HOUR)

a = EARLIEST_HOUR; b = EARLIEST_HOUR; c = EARLIEST_HOUR;

就是這樣,只有“a”屬于條件本體。那么語句剩下的部分呢?它們對于“if”毫無意義,意味著其無論條件是否為真都會被執行。如果這位學生認為條件為真時三項分配會被全部執行,那他就犯下了一個嚴重的邏輯錯誤,代碼不可能實現這樣的效果,但卻很難看得出現。另外,我們還發現了另外兩個問題:

1.條件為真時只有一次分配能夠切實執行,而這與程序員的預期不符。

2.將太多語句寫進同一行是種壞習慣。這并不是錯誤,Java允許這種作法,但其會干擾我們的審查與判斷。

下面來看正確的代碼編寫方式:

  1. if(a < EARLIEST_HOUR && b < EARLIEST_HOUR && c < EARLIEST_HOUR) {

  2. a = EARLIEST_HOUR;

  3. b = EARLIEST_HOUR;

  4. c = EARLIEST_HOUR;

  5. }

總體來講這里列舉的代碼示例非常糟糕,其中包含大量問題且令程序員很難發現其中的錯誤。我的建議是作為剛剛入門的程序員,大家應當編寫結構更為清晰且簡潔的代碼、正確使用空格、常量與縮進等元素。下面我們再來聊幾個大家可能感興趣的后續問題:

?在最后的代碼示例中,我利用該條件的本體包含了三個語句。我們該如何繼續使用單行語句編寫三次分配?如果不使用括號又該如何實現?

?我提到“8”是個無法解釋的“魔數”,但我并沒有提到該變量的名稱。這種命名方式是否也有問題?

?如果a、b或者c中僅有一個變量的值小于8,結果會如何?

  

上一篇: Linux下清空或刪除大文件內容的五種方法

下一篇: 安裝KDE Plasma后,你要做的七件事

在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優質服務!

<bdo id="pdyax"></bdo>

    <pre id="pdyax"></pre>
    <menuitem id="pdyax"></menuitem>
      <form id="pdyax"><tbody id="pdyax"></tbody></form>

      1. <center id="pdyax"><center id="pdyax"></center></center>
          1. 主站蜘蛛池模板: 蒙城县| 巴林左旗| 宿迁市| 杨浦区| 尉犁县| 凤台县| 收藏| 特克斯县| 浪卡子县| 玉溪市| 延津县| 沙田区| 斗六市| 淮南市| 法库县| 华宁县| 台北县| 民和| 江孜县| 徐州市| 扶余县| 丹寨县| 洪江市| 江阴市| 涞水县| 个旧市| 颍上县| 禄丰县| 临朐县| 磴口县| 惠来县| 乌鲁木齐县| 石首市| 金塔县| 新河县| 清水河县| 民县| 普陀区| 福鼎市| 怀柔区| 临夏县|