成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我被噴了:這樣寫代碼是多此一舉?

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

[[396356]]

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

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

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

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

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

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

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

魔法值

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

[[396357]]

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

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

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

為什么要給這種值一個名號 “魔法值” 呢,因為它對代碼的影響非常惡劣!

魔法值的問題

首先,魔法值會嚴(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é)說了,我自己寫的代碼難道還會看不懂么?別急,過一個月你再來閱讀下這段代碼。

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

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

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

  1. // 錯誤提示 
  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. ... 

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

代碼補(bǔ)全

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

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

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

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

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

解決魔法值

正因為魔法值對代碼有很大的危害,所以各種代碼規(guī)范中,都建議開發(fā)者不要使用魔法值。

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

對于一系列的魔法值,建議定義為一個枚舉或單獨(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 

 

希望本期分享對大家有幫助,千萬不要再寫爛代碼啦!

 

責(zé)任編輯:武曉燕 來源: 程序員魚皮
相關(guān)推薦

2015-07-03 11:25:31

央視WiFi

2020-04-16 22:27:26

顯示器60Hz游戲

2009-08-19 16:14:17

.NET接口

2021-06-09 09:19:39

SSL證書數(shù)據(jù)安全公鑰

2020-09-24 10:59:45

區(qū)塊鏈央行數(shù)字貨幣

2020-09-16 06:51:37

Java線程JVM

2021-08-16 13:39:40

Windows 10Windows微軟

2009-03-02 16:52:59

SQL數(shù)據(jù)庫開發(fā)

2017-05-18 18:12:50

中小企業(yè)

2020-08-17 08:18:51

Java

2021-03-17 16:53:51

IO多路

2025-04-23 08:22:37

JavaKotlin類型

2009-11-08 22:34:30

2014-03-19 15:41:21

編程語言編程規(guī)則

2009-02-18 18:14:51

VMwareUbuntu系統(tǒng)

2024-12-26 07:41:47

Java類型ArrayList

2013-08-26 13:52:58

云服務(wù)云安全云取證

2021-01-12 15:58:03

云管理

2021-01-03 14:45:50

數(shù)字貨幣支付寶現(xiàn)金

2023-09-19 12:45:36

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91色视频在线观看 | 亚洲人成在线观看 | av一区在线| 久久国产精品99久久久久 | 日韩精品免费一区二区在线观看 | 成人日韩精品 | 美女天堂av| 国产目拍亚洲精品99久久精品 | 在线免费观看日本视频 | 欧美黄色片 | 午夜国产羞羞视频免费网站 | 麻豆久久久 | 91婷婷韩国欧美一区二区 | 久久国内精品 | 精品一二三区视频 | 久久综合伊人 | 国产精品自拍啪啪 | 91成人免费看片 | 亚洲成人免费 | 欧美精品久久久 | 黄色片视频 | 狠狠干狠狠操 | 亚洲综合大片69999 | 欧美a区| 国产精品一级 | 亚洲综合中文字幕在线观看 | 欧美日韩视频在线 | 毛片久久久 | 最新av在线网址 | 人人干人人看 | 热久久久| 麻豆久久精品 | 午夜在线观看视频 | 久久久在线视频 | 久久99精品久久久 | 欧美三级成人理伦 | 久久伊人精品 | 岛国av免费看 | 日韩欧美电影在线 | 91高清视频在线观看 | 色黄爽 |