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

請停止寫“爛”代碼!

譯文
云計算
作為一名在校教師,我的工作就是不斷審查學生們編寫的代碼。這里我不想取笑任何人,因此所有實例皆以匿名形式公布,單純希望大家能夠從中獲得啟示。

【51CTO.com快譯】作為一名在校教師,我的工作就是不斷審查學生們編寫的代碼。

[[178570]]

這里我不想取笑任何人,因此所有實例皆以匿名形式公布,單純希望大家能夠從中獲得啟示。閑言少敘,咱們先來看一個奇妙的例子:

  1. if(a<8&&b<8&&c<8)

  2. a = 8;b=8;c=8;

大家不妨看看其中的錯誤在哪。

怎么樣,大家發(fā)現(xiàn)了多少問題?

我們先對其進行分析。最惹眼的肯定是“if”的密度。其中的三項條件之間沒有用空格隔開。由于&運算符跟8相鄰,因此很容易讓人看花眼。這就是問題之一,空格。大家***在代碼內(nèi)容間加上空格,包括各語句之間、運算符之前與之后。下面我們對其進行重寫:

  1. if(a < 8 && b < 8 && c < 8)

很明顯,現(xiàn)在看起來好多了。

問題二

有過編程經(jīng)驗的朋友對“魔數(shù)”肯定有著深刻印象。魔數(shù)是指那些直接出現(xiàn)在代碼當中,不會自我描述且對于閱讀者而言毫無意義的數(shù)字。如果大家對于“8”這個數(shù)字沒有什么特別的負面感覺,那可以肯定您的編程從業(yè)時間并不長。這里歡迎大家來猜猜這個數(shù)字的含義。由于正是我本人給學生們布置的作業(yè),所以我很清楚這里“8”的意義(代表的是工人下班的最早時間),但對他人來說則很難猜。更糟糕的是,數(shù)字“8”在這段代碼中重復編寫了6次,意味著如果我們要將其換成7,則需要多次修改并反復查看以確認沒有漏掉某個“8”。

解決方案當然是使用常量。這里我們可以定義一條常量:

  1. finalint EARLIEST_HOUR = 8;

現(xiàn)在代碼變成了這樣:

  1. if(a < EARLIEST_HOUR && b < EARLIEST_HOUR && c < EARLIEST_HOUR)

  2. a = EARLIEST_HOUR; b = EARLIEST_HOUR; c = EARLIEST_HOUR;

接下來看看代碼中的語義:這段代碼到底要實現(xiàn)什么效果?現(xiàn)在有了常數(shù),看起來應該更為清楚。“if”負責測試三個變量,a、b與c。如果三個變量的值全面小于8,則全部獲得最早時間值分配。這類測試非常常見且能夠防止非法輸入狀況。然而,讓我們再來看看if本體——如果條件為真,哪行代碼會執(zhí)行if結(jié)果?

在開始之前,我們首先要強調(diào)一點,Java是會直接忽略空格的。這意味著就編譯器而言,我們可以隨意使用空格但并非強制性(當然,我們必須至少在兩個詞之間添加一個空格,但僅此而已)。這同時意味著Java中的語句會在編譯器發(fā)現(xiàn)“;”符號時終止,而非在行末自動終止。現(xiàn)在再來看看以上代碼。其全部寫在一行當中。由于這位同學在行前加了個“tab”,因此可以確定這一行屬于“if”語句。不過問題仍然存在——if的本體究竟是什么?以下為答案,if的本體是:

if(a < EARLIEST_HOUR && b < EARLIEST_HOUR && c < EARLIEST_HOUR)

a = EARLIEST_HOUR; b = EARLIEST_HOUR; c = EARLIEST_HOUR;

就是這樣,只有“a”屬于條件本體。那么語句剩下的部分呢?它們對于“if”毫無意義,意味著其無論條件是否為真都會被執(zhí)行。如果這位學生認為條件為真時三項分配會被全部執(zhí)行,那他就犯下了一個嚴重的邏輯錯誤——代碼不可能實現(xiàn)這樣的效果,但卻很難看得出現(xiàn)。

另外,我們還發(fā)現(xiàn)了另外兩個問題:

問題三——條件為真時只有一次分配能夠切實執(zhí)行,而這與程序員的預期不符。

問題四——將太多語句寫進同一行是種壞習慣。這并不是錯誤,Java允許這種作法,但其會干擾我們的審查與判斷。

下面來看正確的代碼編寫方式:

  1. if(a < EARLIEST_HOUR && b < EARLIEST_HOUR && c < EARLIEST_HOUR) {

  2. a = EARLIEST_HOUR;

  3. b = EARLIEST_HOUR;

  4. c = EARLIEST_HOUR;

  5. }

總體來講——這里列舉的代碼示例非常糟糕,其中包含大量問題且令程序員很難發(fā)現(xiàn)其中的錯誤與bug。我的建議時,作為剛剛?cè)腴T的程序員,大家應當編寫結(jié)構(gòu)更為清晰且簡潔的代碼、正確使用空格、常量與縮進等元素。

下面我們再來聊幾個大家可能感興趣的后續(xù)問題:

· 在***的代碼示例中,我利用該條件的本體包含了三個語句。我們該如何繼續(xù)使用單行語句編寫三次分配?如果不使用括號,又該如何實現(xiàn)?

· 我提到“8”是個無法解釋的“魔數(shù)”,但我并沒有提到該變量的名稱——a、b與c。您怎么看?這種命名方式是否也有問題?

· 如果a、b或者c中僅有一個變量的值小于8,您認為結(jié)果會如何?

 

原文鏈接:https://dzone.com/articles/bad-bad-code

原文標題:Bad, Bad Code! (And Tips to Avoid It)

原文作者:Shay Tavor

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

責任編輯:關(guān)崇 來源: 51CTO
相關(guān)推薦

2020-03-12 07:42:49

代碼程序員

2013-07-02 10:08:46

爛代碼代碼優(yōu)化代碼清理

2021-07-06 07:21:17

橋接模式組合

2024-05-10 12:29:30

接口類型

2020-10-23 09:57:23

TypeScriptany代碼

2015-09-14 09:28:47

2015-08-13 10:54:46

2023-01-16 07:35:40

代碼編碼重構(gòu)

2021-05-26 05:36:52

登陸接口開發(fā)代碼

2017-04-10 18:10:31

2023-08-29 17:47:02

嵌套 if開發(fā)

2023-05-24 16:41:41

React前端

2015-07-23 09:40:24

爛代碼程序員

2024-12-26 16:47:48

2020-10-31 21:59:37

Python列表開發(fā)

2015-07-23 09:30:43

爛代碼程序員

2013-09-29 11:08:08

2024-02-21 23:03:56

代碼系統(tǒng)

2020-02-27 16:17:31

代碼規(guī)范codegithub

2020-02-10 13:22:35

編程語言機器學習Python
點贊
收藏

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

主站蜘蛛池模板: 亚洲欧美日韩电影 | 久久久九九九九 | 欧洲在线视频 | 亚洲色图婷婷 | 欧美日韩在线一区 | 二区欧美| 国产精品成人一区二区三区 | 美女视频黄的 | www.日韩高清 | 农村真人裸体丰满少妇毛片 | 中文在线播放 | 婷婷综合网 | 国产网站在线免费观看 | 国产精品久久久久久婷婷天堂 | 91精品久久久久久久久久小网站 | 亚洲三级免费看 | 最新超碰| 精久久| 亚洲精品免费视频 | 亚洲成人精品一区 | 男人天堂网址 | 精品久久一区 | 黄色片大全在线观看 | 中文字幕韩在线第一页 | 91干b| 亚洲精品视频一区二区三区 | 国产亚洲精品久久久久动 | 欧美成人手机视频 | 久久久免费| 国产成人精品一区二区三区四区 | 国产午夜精品久久久 | 成人在线小视频 | 亚洲国产激情 | 国产精品久久精品 | 国产精品高潮呻吟 | 日韩欧美三区 | 亚洲视频在线观看免费 | av大片在线 | 成人欧美一区二区三区黑人孕妇 | 亚洲成人一区二区 | 91pron在线|