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