<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    吳密的博客

    每天進(jìn)步一點(diǎn)點(diǎn)
    posts - 12, comments - 1, trackbacks - 0, articles - 1
    寫(xiě)代碼是一個(gè)富有創(chuàng)意但又可能讓人思想麻痹的任務(wù),不管你是否喜歡你的工作,你總會(huì)找一些捷徑,但遺憾的是,大部分捷徑都違反了最佳編碼實(shí)踐原則, 這些捷徑要么會(huì)產(chǎn)生BUG,要么會(huì)導(dǎo)致數(shù)據(jù)出錯(cuò),我的建議是:在編寫(xiě)VBA代碼時(shí),不要走捷徑。下面是一些常見(jiàn)的錯(cuò)誤觀念,導(dǎo)致人們選擇了錯(cuò)誤的捷徑,雖 然其中一部分只適用于VBA或某種IDE,但大多數(shù)都是通用的。

      1、我不需要else子句

      If…then…else,select case等VBA語(yǔ)句都包含了else子句,這個(gè)子句后跟隨了所有具體的決策條件,這是處理一些帶條件事情的最好機(jī)會(huì),但開(kāi)發(fā)人員卻忽略了這個(gè)機(jī)會(huì),并認(rèn) 為沒(méi)必要這么做。包括一個(gè)else子句并不難,并且還可以提供一層額外的錯(cuò)誤捕捉機(jī)會(huì),你可以顯示一般性錯(cuò)誤,讓用戶知道預(yù)期的決定或行動(dòng)不會(huì)發(fā)生,或是 通過(guò)日志記錄下來(lái),用電子郵件發(fā)送給管理員或內(nèi)部開(kāi)發(fā)人員,總之想讓事件引起注意,一個(gè)未執(zhí)行的else子句比多個(gè)選擇更好。

      2、goto是一個(gè)有效的語(yǔ)句,我經(jīng)常使用它

      Goto是一個(gè)有效的語(yǔ)句,但使用不當(dāng)會(huì)產(chǎn)生難以駕馭的代碼,而且會(huì)隱藏錯(cuò)誤和拙劣的程序設(shè)計(jì),當(dāng)你不能想出一個(gè)更好的策略時(shí),不要輕易使用 goto語(yǔ)句,當(dāng)你真正需要一個(gè)簡(jiǎn)單的重定向程序流時(shí)可以使用它,每次敲下goto時(shí)都問(wèn)一下自己,是否有其它方法來(lái)處理這個(gè)重定向?如果有就不要使用 goto(我在VBA開(kāi)發(fā)中就從未使用過(guò)goto語(yǔ)句)。

      3、編譯器是在浪費(fèi)時(shí)間

      和其它編譯器不同,VBA編譯器不會(huì)生成一個(gè)可以脫離Office獨(dú)立執(zhí)行的模塊,相反,VBA編譯器實(shí)際上是一個(gè)語(yǔ)法檢查器,在真實(shí)運(yùn)行之 前,編譯你的代碼是捕捉語(yǔ)法錯(cuò)誤簡(jiǎn)單有效的方法,你為什么要這么做呢?因?yàn)檎Z(yǔ)法檢查器通常提供更深入的錯(cuò)誤信息,因此你可以更快地解決問(wèn)題。

      4、無(wú)任何錯(cuò)誤需要處理

      大多數(shù)開(kāi)發(fā)人員還沒(méi)有自信到自己的代碼是完美無(wú)缺的,但大多數(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ò)誤的說(shuō)明。

      ◆ 幫助程序立即從錯(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ù)上來(lái)驗(yàn)證用戶的輸入,你可以使用表屬性從底層來(lái)約束和驗(yàn)證,但大多數(shù)時(shí)候還是要靠你寫(xiě)的代碼 來(lái)驗(yàn)證,這也許是程序基本功能代碼完成后最重要的任務(wù),因此不要吝嗇你的代碼,不能依靠用戶不犯錯(cuò)誤的輸入,你應(yīng)該堅(jiān)定地拿起驗(yàn)證程序捕捉錯(cuò)誤并糾正它 們。

      6、認(rèn)為帶前綴或標(biāo)簽的命名約定不好

      你在創(chuàng)建一個(gè)變量時(shí),能通過(guò)數(shù)據(jù)類型和用途識(shí)別它是最好的,大多數(shù)VBA開(kāi)發(fā)人員喜歡添加3個(gè)字符的前綴,或標(biāo)簽來(lái)確定數(shù)據(jù)類型,例如,用于存 儲(chǔ)姓氏的字符串?dāng)?shù)據(jù)類型可能命名為strLastName,前綴確定了變量的數(shù)據(jù)類型,LastName確定了變量的用途,有些開(kāi)發(fā)人員認(rèn)為這個(gè)前綴是沒(méi) 有必要的,甚至?xí)斐筛蓴_,因此他們不使用前綴,在某些情況下,數(shù)據(jù)類型的確是顯而易見(jiàn)的,但有時(shí)卻不那么明顯,添加前綴或標(biāo)簽不會(huì)增加工作量,但它的好 處卻有很多,如:

      ◆ 標(biāo)簽是自文檔化(self-documenting)的。

      ◆ 在調(diào)試或修改代碼時(shí),你可以立即知道變量的數(shù)據(jù)類型。

      ◆ 在投入生產(chǎn)幾個(gè)月后,你也許早已記不得那些變量的含義了,或者你已經(jīng)離開(kāi),后來(lái)的維護(hù)者在前綴或標(biāo)簽的提示下,能更快地讀懂代碼。

      7、不會(huì)有任何空值

      無(wú)論你采取什么措施,空值總是帶有破壞性,如果你正確地處理空值,程序?qū)?huì)更穩(wěn)定,VBA提供幾種工具來(lái)發(fā)現(xiàn)和處理空值。

      ◆ 使用IsNull()確定一個(gè)表達(dá)式或值是否為空,你不能對(duì)空值使用比較操作符,如var=Null或var<>Null,直接比較總是返回空(T-SQL有時(shí)會(huì)返回False)。

      ◆ 在Access中,遇到Null時(shí),Nz()返回一個(gè)值,而不是Null。

      ◆ 如果你需要處理Null變量,請(qǐng)使用Var數(shù)據(jù)類型,它是唯一可以存儲(chǔ)Null的數(shù)據(jù)類型。

      8、我是唯一一個(gè)使用應(yīng)用程序的人,因此我在程序中嵌入了密碼

      密碼和用戶id值永遠(yuǎn)都不應(yīng)該嵌入到代碼中,你可能是唯一被授權(quán)使用該應(yīng)用程序的人,但這并不意味著就可以直接將密碼嵌入到程序中,相反,不管是誰(shuí)要使用這個(gè)程序,都應(yīng)該提供一個(gè)對(duì)話框讓其輸入登錄憑據(jù)。

      9、我寫(xiě)代碼時(shí)就做了測(cè)試,不用再測(cè)試了

      當(dāng)你寫(xiě)代碼時(shí)就做了測(cè)試,這很好,但這樣做是不夠的,開(kāi)發(fā)人員通常不適合測(cè)試自己寫(xiě)的代碼,他們不會(huì)把自己想象成用戶,因此很難發(fā)現(xiàn)重大BUG,往往是走走過(guò)場(chǎng)罷了,要知道最終是要把程序投入生產(chǎn)環(huán)境,那時(shí)就不是你自己使用了,因此應(yīng)該找一些最終用戶來(lái)測(cè)試。

      10、就我一個(gè)人開(kāi)發(fā),我只寫(xiě)代碼,文檔就免了

      如果就你一個(gè)開(kāi)發(fā)人員,也許你不會(huì)寫(xiě)文檔,你認(rèn)為那只是耽誤自己的工作,但大多數(shù)開(kāi)發(fā)人員在修改非自己寫(xiě)的代碼之前,都希望有良好的文檔參考。別的不說(shuō),至少下面這些內(nèi)容應(yīng)該有文檔記錄。

      ◆ 例行的目的/任務(wù)/目標(biāo)。

      ◆ 傳遞的值和參數(shù)的簡(jiǎn)短定義。

      ◆ 對(duì)一些非常規(guī)的代碼寫(xiě)法,附上解釋和想法。

    ◆ 誰(shuí)創(chuàng)建的代碼,誰(shuí)在什么時(shí)候修改過(guò)代碼,修改了哪些內(nèi)容,當(dāng)你離職后,其他接收的人看到良好的注釋一定會(huì)從心底敬佩你

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产亚洲一卡2卡3卡4卡新区| 亚洲av无码潮喷在线观看| 亚洲国产成人精品激情| 69av免费观看| 亚洲av无码电影网| 成**人免费一级毛片| 青草久久精品亚洲综合专区| 国产又黄又爽又刺激的免费网址| 亚洲欧美国产国产一区二区三区| 嫩草视频在线免费观看| 香蕉视频亚洲一级| 亚洲尤码不卡AV麻豆| 免费污视频在线观看| 亚洲蜜芽在线精品一区| 西西大胆无码视频免费| 亚洲欧美国产国产综合一区| 亚洲精品456播放| a级毛片无码免费真人久久| 亚洲a一级免费视频| 蜜桃视频在线观看免费网址入口| 亚洲1区2区3区精华液| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲精品网站在线观看不卡无广告| 精选影视免费在线 | 亚洲天堂一区二区| 夜夜爽免费888视频| 一级做性色a爰片久久毛片免费| 亚洲av永久无码精品秋霞电影影院| 亚洲一级毛片免费观看| 精品国产亚洲一区二区三区在线观看 | 少妇高潮太爽了在线观看免费| 精品久久久久久亚洲综合网| 亚洲午夜成人精品电影在线观看| 美女内射无套日韩免费播放| 亚洲精品日韩一区二区小说| 国产亚洲精品自在线观看| 91频在线观看免费大全| 色爽黄1000部免费软件下载| 亚洲综合久久成人69| 久久久久亚洲AV成人网| 日韩不卡免费视频|