寫代碼是一個富有創(chuàng)意但又可能讓人思想麻痹的任務(wù),不管你是否喜歡你的工作,你總會找一些捷徑,但遺憾的是,大部分捷徑都違反了最佳編碼實踐原則,這些捷徑要么會產(chǎn)生BUG,要么會導(dǎo)致數(shù)據(jù)出錯,我的建議是:在編寫VBA代碼時,不要走捷徑。下面是一些常見的錯誤觀念,導(dǎo)致人們選擇了錯誤的捷徑,雖然其中一部分只適用于VBA或某種IDE,但大多數(shù)都是通用的。 1、我不需要else子句 If…then…else,select case等VBA語句都包含了else子句,這個子句后跟隨了所有具體的決策條件,這是處理一些帶條件事情的最好機會,但開發(fā)人員卻忽略了這個機會,并認為沒必要這么做。包括一個else子句并不難,并且還可以提供一層額外的錯誤捕捉機會,你可以顯示一般性錯誤,讓用戶知道預(yù)期的決定或行動不會發(fā)生,或是通過日志記錄下來,用電子郵件發(fā)送給管理員或內(nèi)部開發(fā)人員,總之想讓事件引起注意,一個未執(zhí)行的else子句比多個選擇更好。 2、goto是一個有效的語句,我經(jīng)常使用它 Goto是一個有效的語句,但使用不當(dāng)會產(chǎn)生難以駕馭的代碼,而且會隱藏錯誤和拙劣的程序設(shè)計,當(dāng)你不能想出一個更好的策略時,不要輕易使用goto語句,當(dāng)你真正需要一個簡單的重定向程序流時可以使用它,每次敲下goto時都問一下自己,是否有其它方法來處理這個重定向?如果有就不要使用goto(我在VBA開發(fā)中就從未使用過goto語句)。 3、編譯器是在浪費時間 和其它編譯器不同,VBA編譯器不會生成一個可以脫離Office獨立執(zhí)行的模塊,相反,VBA編譯器實際上是一個語法檢查器,在真實運行之前,編譯你的代碼是捕捉語法錯誤簡單有效的方法,你為什么要這么做呢?因為語法檢查器通常提供更深入的錯誤信息,因此你可以更快地解決問題。 4、無任何錯誤需要處理 大多數(shù)開發(fā)人員還沒有自信到自己的代碼是完美無缺的,但大多數(shù)人對錯誤處理都會掉以輕心,錯誤處理和你的設(shè)計和邏輯一樣重要,不要放棄它,相反,在處理錯誤時應(yīng)當(dāng)特別小心,一個未處理的錯誤通常意味著程序投入使用后,你會接到更多的支持電話,也許程序因這個錯誤而停止了工作,也許它導(dǎo)致了數(shù)據(jù)異常,在處理錯誤時,你可以: 與你的用戶分享一些信息,包括立即糾正錯誤的說明。 幫助程序立即從錯誤中安靜地回復(fù),用戶永遠也不會知道程序曾經(jīng)發(fā)生了錯誤。 跟蹤錯誤,以便你進行修復(fù)。 5、我的用戶將輸入正確的數(shù)據(jù) 如果程序正常運行需要依賴用戶的準確輸入,這將是風(fēng)險很大的一件事,這不是對用戶能力的質(zhì)疑,用戶都不是傻子,但確保程序正常運行并不是他們的本職工作,你不能依賴他們輸入正確的數(shù)據(jù),相反,你應(yīng)該從技術(shù)上來驗證用戶的輸入,你可以使用表屬性從底層來約束和驗證,但大多數(shù)時候還是要靠你寫的代碼來驗證,這也許是程序基本功能代碼完成后最重要的任務(wù),因此不要吝嗇你的代碼,不能依靠用戶不犯錯誤的輸入,你應(yīng)該堅定地拿起驗證程序捕捉錯誤并糾正它們。 |
[發(fā)布者:yezi] | ||
相關(guān)閱讀:
·北大新任校長王恩哥:一所大學(xué)也要有夢想
·物理學(xué)家王恩哥就任北京大學(xué)第十一任校長
·研究生為助父“留任”校長編造茂名“最大貪污
·專訪:中新高校校長看好亞洲大學(xué)發(fā)展前景
·粵港合作“一試三證”首頒44張證書
|