日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
我被噴了:這樣寫代碼是多此一舉?

本文轉(zhuǎn)載自微信公眾號(hào)「程序員魚皮」,作者魚皮。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序員魚皮公眾號(hào)。

十余年的龍州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整龍州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“龍州網(wǎng)站設(shè)計(jì)”,“龍州網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

大家好,我是魚皮,今天通過一件事情,分享寫代碼時(shí)的一個(gè)重要小技巧。

前段時(shí)間,我在編程導(dǎo)航項(xiàng)目中開源了一段代碼,實(shí)現(xiàn)的功能是,當(dāng)用戶的操作失敗時(shí),會(huì)在頁(yè)面上彈出一個(gè)錯(cuò)誤框,并提示 “操作失敗”,代碼如下:

 
 
 
 
  1. // 錯(cuò)誤提示 
  2. const ERROR_MESSAGE = "操作失敗"; 
  3.  
  4. // 刪除資源 
  5. const result = deleteResource();  
  6. if(!result) { 
  7.   alert(ERROR_MESSAGE); 

然而沒想到,有位同學(xué)直接留言說我這么寫代碼是多此一舉!為什么要單獨(dú)給 “操作失敗” 這個(gè)字符串定義一個(gè)常量呢?直接這么寫不就好了:

 
 
 
 
  1. // 刪除資源 
  2. const result = deleteResource();  
  3. if(!result) { 
  4.   alert("操作失敗"); 

似乎代碼變得更精簡(jiǎn)了,但其實(shí)這是一個(gè)常見的編程誤區(qū),魔法值 問題。

魔法值

什么是魔法值呢?聽起來有點(diǎn)像游戲的藍(lán)槽 MP 哈哈。

其實(shí),魔法值和 MP 一點(diǎn)關(guān)系都沒有!

魔法值指的是代碼中沒有任何定義,直接像魔法一樣憑空出現(xiàn)的值,可以是數(shù)字、字符串等,比如:

 
 
 
 
  1. // 輸出 
  2. console.log(1); 
  3. // 彈出警告框 
  4. alert("dog"); 

為什么要給這種值一個(gè)名號(hào) “魔法值” 呢,因?yàn)樗鼘?duì)代碼的影響非常惡劣!

魔法值的問題

首先,魔法值會(huì)嚴(yán)重影響代碼的 可讀性 和 可維護(hù)性。

像上面的魔法字符串看起來好像沒什么問題,但如果魔法值是數(shù)字,就必須通過閱讀其他代碼才能推斷出來,比如:

 
 
 
 
  1. if (a == 1) { 
  2.   alert("good"); 
  3. } else if (a == 2) { 
  4.   alert("bad"); 
  5. } else if (a == 3) { 
  6.   ... 

只憑這樣一段代碼,你能知道數(shù)字 1、2、3 分別是什么意思嗎?

有同學(xué)說了,我自己寫的代碼難道還會(huì)看不懂么?別急,過一個(gè)月你再來閱讀下這段代碼。

如果你的記憶力很好,自己一個(gè)做項(xiàng)目的時(shí)候追求點(diǎn)效率倒也無所謂了。但要是和其他同學(xué)一起做項(xiàng)目、維護(hù)代碼,寫帶有魔法值的代碼無疑會(huì)讓他人難以理解,如果再不寫注釋,可能他們連殺了你的心都會(huì)有了。

第二,魔法值還會(huì)影響開發(fā)的 效率和準(zhǔn)確性。

還是拿開頭那段代碼為例,噴我的同學(xué)根本沒有把代碼文件完整讀完,其實(shí)在該文件中,我不止一次使用到了 ERROR_MESSAGE 這一常量:

 
 
 
 
  1. // 錯(cuò)誤提示 
  2. const ERROR_MESSAGE = "操作失敗"; 
  3.  
  4. // 刪除資源 
  5. const result = deleteResource();  
  6. if(!result) { 
  7.   alert(ERROR_MESSAGE); 
  8. // 修改資源 
  9. const result = updateResource();  
  10. if(!result) { 
  11.   alert(ERROR_MESSAGE); 
  12.  
  13. ... 

如果像他說的一樣,不去定義常量,而是直接用魔法字符串,那么每次要彈出 “操作失敗” 時(shí),我都要重復(fù)去打這幾個(gè)字,浪費(fèi)時(shí)間的同時(shí),還存在打錯(cuò)字的風(fēng)險(xiǎn)。而如果使用預(yù)定義的常量,就能很輕松地利用開發(fā)工具提供的代碼提示和補(bǔ)全功能。

代碼補(bǔ)全

此外,魔法值還會(huì)影響代碼的 易修改性。

假如說同一個(gè)魔法字符串在代碼中多次出現(xiàn),那當(dāng)我要修改字符串文案時(shí),就要人工一個(gè)個(gè)地去找到這個(gè)字符串進(jìn)行修改,即使可以用開發(fā)工具提供的搜索和全局替換功能,但也要去檢查一遍,非常麻煩。

 
 
 
 
  1. alert("你操作失敗了"); 
  2. alert("你操作失敗了"); 
  3. alert("你操作失敗了"); 

而如果將字符串定義為常量,只用在定義處修改它的值即可。此時(shí)的常量名,倒像是魔法值的一個(gè)指針了。

 
 
 
 
  1. const ERROR_MESSAGE = "你操作失敗了" 
  2. alert("ERROR_MESSAGE"); 
  3. alert("ERROR_MESSAGE"); 
  4. alert("ERROR_MESSAGE"); 

解決魔法值

正因?yàn)槟Хㄖ祵?duì)代碼有很大的危害,所以各種代碼規(guī)范中,都建議開發(fā)者不要使用魔法值。

解決魔法值的方式很簡(jiǎn)單,其實(shí)上面已經(jīng)講到了,就是為一系列相同的值定義一個(gè) 常量。注意是常量,不是變量!因?yàn)槟Хㄖ档膬?nèi)容一般是固定的,其本身結(jié)構(gòu)不會(huì)被修改。

對(duì)于一系列的魔法值,建議定義為一個(gè)枚舉或單獨(dú)的常量類,比如資源有很多審核狀態(tài),可以把所有狀態(tài)集中定義。

JavaScript 代碼:

 
 
 
 
  1. const REVIEW_STATUS = { 
  2.   // 待審核 
  3.   WAITING: 0, 
  4.   // 通過 
  5.   PASS: 1, 
  6.   // 拒絕 
  7.   REJECT: 2 

Java 代碼:

 
 
 
 
  1. public enum ReviewStatus { 
  2.   WAITING, PASS, REJECT 

 

希望本期分享對(duì)大家有幫助,千萬(wàn)不要再寫爛代碼啦!


當(dāng)前標(biāo)題:我被噴了:這樣寫代碼是多此一舉?
路徑分享:http://m.5511xx.com/article/cdojoop.html