我越發(fā)堅(jiān)信習(xí)慣的力量

習(xí)慣

前兩天跟同事做代碼走查,看到代碼里面很多這樣的寫法。

enum {OK, ERROR};
WORD32 calledFunc();
{
    if(cond)
    {
        return ERROR;
    }
    return OK;
}
void func()
{
    if(!calledFunc())
    {
        //do something
    }
}

看到if(!calledFunc())時(shí),我很疑惑,calledFunc()的返回值類型不是bool,為什么在判斷條件中要用!。他說,他想在函數(shù)calledFunc()返回成功時(shí)做些事情。他繼續(xù)說到,你看,成功時(shí)返回OKOK == 0,(!OK) == 1。聽起來倒也挺有道理。但是這其實(shí)是一種典型的巧合編程。

首先,為什么要跟我做這么多解釋?解釋類似于注釋,是代碼沒有表達(dá)作者意圖的體現(xiàn)。而事實(shí)上,這段代碼也是存在隱患的。假如有一天,某個(gè)后來人心血來潮,想增加一種錯(cuò)誤類型,枚舉的定義變成這樣enum {FATAL_ERROR, OK, ERROR};,再看看if(!calledFunc()),還是之前的邏輯嗎?但是如果代碼明確地寫成if(OK == calledFunc()),無(wú)論枚舉值如何變化,代碼邏輯永遠(yuǎn)不會(huì)出問題,這就是代碼的可擴(kuò)展性??此圃谀撤N巧合下兩種實(shí)現(xiàn)的結(jié)果相同,但是不良的編程習(xí)慣產(chǎn)生的代碼是脆弱的。我們不能僅僅局限于代碼的語(yǔ)法,眼光應(yīng)該放的更遠(yuǎn),應(yīng)該穿透到它背后的價(jià)值觀去認(rèn)識(shí)它,這樣的得到的知識(shí)才是牢靠的,經(jīng)得起考驗(yàn)的。

不幸的是,我并沒有機(jī)會(huì)在代碼走查現(xiàn)場(chǎng)說明我的這些想法。因?yàn)?,我的同事表現(xiàn)出了極大的排斥情緒,他覺得我是在吹毛求疵,他認(rèn)為不應(yīng)該在這種不影響當(dāng)前代碼正確性的問題上斤斤計(jì)較。在我看來,這些細(xì)節(jié)恰恰體現(xiàn)了一個(gè)程序員的習(xí)慣問題,這些看似微不足道的習(xí)慣,每一個(gè)背后都有一個(gè)價(jià)值觀支撐,正是這種日積月累的持續(xù)思考和習(xí)慣養(yǎng)成,體現(xiàn)出一個(gè)優(yōu)秀程序員和一個(gè)普通程序員的本質(zhì)區(qū)別。不斷刻意練習(xí)去夯實(shí)好的習(xí)慣,讓它變的像水和空氣一樣平常,才能生產(chǎn)出行云流水般的軟件作品。連Kent beck 這樣的大師都說自己算不上一個(gè)偉大的程序員,僅僅是一個(gè)擁有良好編程習(xí)慣的程序員,這讓我越發(fā)堅(jiān)信習(xí)慣的力量,并且將在自己的職業(yè)生涯中孜孜追求。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,692評(píng)論 18 399
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,034評(píng)論 25 709
  • 第一章 那年年少 我不知道遇見你是對(duì)還是錯(cuò),但我知道遇見你我開心過。 ”阿俊吶?!?"阿俊吶?!?”阿俊吶?!?“...
    阿俊xi閱讀 529評(píng)論 0 1
  • using (CargoSysDbContext db = new CargoSysDbContext()){Da...
    LiviaLiu閱讀 292評(píng)論 0 0

友情鏈接更多精彩內(nèi)容