精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

接手爛代碼,不用對上任客氣!

譯文 精選
開發 前端
本文將為你介紹一些實用的代碼閱讀策略,你可以根據實際情況使用它們。

作者 | Isaac Lyman

譯者 | 崔皓

誰都喜歡可讀性強的代碼,希望接手的代碼容易閱讀,容易理解,從而減少交接的工作量,但并不是所有的代碼都有好的易讀性,接手前輩的“屎山”通常是一件令開發者非常痛苦的事情。

關于代碼有一種流行說法:代碼被閱讀的次數是它被書寫次數的十倍,而且產品的壽命越長,這個比例就越高。考慮到這點,我們似乎對“理解代碼”的投資明顯不足。開發者通常更側重于編碼的能力,而不是閱讀和解釋已有代碼的能力,即便這種場景在日常工作中會頻繁出現。

開發任務的前80-95%時間應該用來閱讀代碼以及文檔。在研究現有代碼的過程中,你可能會學到很多東西,只有讀完代碼之后才能說:“這個功能已經存在了,或者是加入這個功能弊大于利”。

本文將為你介紹一些實用的代碼閱讀策略,你可以根據實際情況使用它們。

一、重構局部變量和方法

有時候,一段代碼非常模糊會誤導讀者甚至讓人難以推理出其含義。一個幾乎沒有風險的方法是重新命名局部變量和私有方法,以更準確地描述它們的作用。這些類型的修改不會影響到當前工作文件之外的功能,只要注意避免命名沖突,就不會導致邏輯錯誤。如果可能的話,使用IDE的重構工具(而不是文本查找和替換),這樣就可以一鍵重命名所有被使用的東西了。

例如,考慮下面這段JavaScript代碼

function ib(a, fn) {
return (a || []).reduce((o, i) => {
o[fn(i)] = i;
return o;
}, {});
}

它閱讀起來非常困難,方法名ib對理解函數功能毫無用處。不過,這并不妨礙你對它做出推斷:

由于reduce是在a上被調用的(并且它返回到一個空數組),a應該是一個數組類型。

回調參數i將是該數組的一個元素。

reduce的第二個參數,一個空的對象{},告訴我們回調參數o是一個字典(對象)。

所以,通過重命名,我們可以得到如下結果:

function ib(array, fn) {
return (array || []).reduce((dict, element) => {
dict[fn(element)] = element;
return dict; }, {});
}

通過上面的調整,可以看到fn是把數組元素變成字典的鍵。這就揭示了函數ib的目的:將數組轉化為字典,用一個自定義的回調來確定索引每個元素的鍵。你可以把fn改名為getKey,而ib應該被命名為indexBy。重新命名一些標識符有助于我們理解代碼,而不需要改變它的邏輯,也不需要一下子考慮所有的部分。如果可以的話,強烈推薦修改。畢竟這樣可以提高代碼的可讀性,將使整個團隊受益,同時它并沒有增加或改變程序的功能。

二、搞清楚代碼是如何被調用的

大多數代碼都會被其他代碼調用。如果你在糾結一段代碼,那么搞清楚它的調用情況對于了解它的功能有非常大的幫助。可以將方法重命名為ThisBreaksOnPurpose。然后進行編譯,盡管在通過反射訪問的情況下,你在運行時才會看到錯誤,但編譯的錯誤提示會告訴這個方法在哪里被使用。

如果以上方法不可行,你可以通過文本搜索方法名。如果你很幸運,這個方法的名字在代碼庫中是唯一的。如果不是這樣,你可能會得到一個更大的結果集,并且不得不翻閱大量不相關的代碼。

三、搜索類似的代碼

有時,即使所有的標識符都被很好地命名,用例也很清晰,但是代碼還是很難理解。不是所有的代碼都符合編碼習慣。有時某個特定的操作并沒有遵循編碼習慣。在最壞的情況下,有問題的代碼出現在工作的代碼庫中,同時也沒有使用明顯的慣用語。

然而真正獨特的代碼在長期存在的代碼庫中是很少見的,特別是在單個表達式或代碼行上。如果花幾分鐘時間在項目中搜索類似的代碼,你可能會發現一些蛛絲馬跡來解開整個謎題。

全文搜索是其中最簡單的方法。你可以選擇一個突出的代碼片段進行搜索,搜索工具通常包括一個 "全詞 "搜索選項,這意味著搜索care.exe不會返回scare.exertion這樣的結果。如果你想進一步縮小范圍,可以用正則表達式而不是文本短語進行搜索。

當然,偶爾即使是正則表達式也不足以縮小范圍,沒有人愿意花幾個小時在搜索結果中尋找可能沒有幫助的東西。學習一些高級搜索技術也是值得的。許多程序員喜歡使用Unix的命令行工具,如grep和awk,或者在Windows上使用手寫的PowerShell腳本。我的首選是JS Powered Search,這是一個VS Code擴展,可以讓你在JavaScript中定義一個邏輯搜索查詢。

四、運行單元測試

在一個完美的代碼庫中,你可以通過使用單元測試了解代碼運行的狀態。但是大多數代碼庫并不完美;由于效率的原因,單元測試工作往往顯得可有可無,有時單元測試所描述的是過時的行為。盡管如此,檢查并執行代碼測試仍舊是一個好主意。至少,他們會描述代碼的輸入和輸出。

如果沒有單元測試或者單元測試不夠全面,你還有第二次挽救的機會。可以編寫一兩個測試來證明代碼是否存在的問題。如果發現問題并修復它然后提交修改,增加代碼庫的穩定性,讓這段代碼具有自解釋的能力。你永遠不必擔心增加自動化測試會破壞現有的功能。

測試需要花費時間來編寫,但此舉可以大大提升代碼執行效率。測試是代碼正常工作的實際證據,有單元測試在你就會相信代碼功能不會被破壞。

五、使用Debugger工具

一旦有了單元測試,就有了很好的機制幫助你進行逐步的調試。設置一個斷點或在這段代碼的頂部添加一個斷點/調試器語句。然后運行測試。一旦碰到了斷點,執行就會暫停,你可以每次前進一行,進入和退出函數,并檢查范圍內所有變量的值。

如果你知道哪些用戶行為觸發了相關的代碼,你就可以設置斷點并正常運行程序,與程序的界面進行交互。如果你這樣做,反饋回路會更長,但它也會使用更真實的數據,這可能有助于你發現空引用和邊緣案例。

從上到下的逐行調試可能對運行幾十或幾百次的代碼不太有用,比如嵌套的循環。對于這樣的代碼,可以在每個循環中添加匯總的變量,方便在循環結束的時查看總量。許多集成開發環境還允許你設置條件性斷點,可以通過設置條件在循環中暫停并進入斷點從而查看對應變量的值。

六、搜索知識庫

如果你的團隊把編寫文檔作為開發過程的一部分,你可以快速跳過這一步。文檔不應該是唯一的真理來源,你應該依靠代碼來了解程序的行為方式。

文檔雖然可以解釋代碼的 "How",但它往往更擅長解釋 "Why"。有時你明白一段代碼在做什么,但從另一個角度看貌似有些不對。所以在改變它之前,你應該盡一切努力去了解原來的程序員是根據什么信息或約束來編碼的。

一篇好的內部文檔也能為你指出知道真相的隊友。如果你已經走到了這一步,做了足夠多的工作,那么可以向外尋求幫助。確保讓對方知道你在做什么工作,你想解決什么問題,他們很有可能會注意到你的視野盲區。

七、使用版本控制注釋

看到這里,你已經了解了幾種有效的代碼閱讀策略。但即使如此,也可能會有無法解決的問題:一個奇怪的設計決定,一個打破代碼庫編碼模式的方法,一個沒有明顯理由的代碼特質。

版本控制系統可以顯示代碼庫中任何一行代碼的作者和提交。在Git中,就是git blame命令。大多數系統稱它為"blue"或"annotate"。你可以在命令行或IDE中運行這個命令。出現的將是一個逐行的提交列表:一個提交哈希值,一個提交信息,以及一個作者。

如果該行代碼的最近一次提交沒有意義——例如它是一個格式化或空白的變化,就需要通過文件的變更歷史來找到引入該行代碼的提交。同樣,版本控制系統有一些工具可以幫助你做到這一點。

一旦你拿到了PR和Ticket,不僅擁有了代碼的背景,還可以找到與之相關的工作人員:代碼的作者、PR審核者、任何評論或更新Ticket的人、簽署QA的人。如果前幾種方法都不奏效,那么是時候該和前輩們聊聊了。

八、先理解,再編碼

通過對以上步驟的學習,或許對你有所幫助,特別是對代碼背景的理解以及功能的實現方面。在你繼續前進之前,還需要考慮重構代碼以使其清晰,創建新的文檔,在這里投入的任何時間都會讓你和你的團隊在代碼的互動中獲得回報。

有效閱讀代碼的能力是一種秘密武器,它可以使你快速通過技術面試,并使你成為任何團隊的重要成員。擅長寫代碼的程序員是有價值的,擅長讀代碼的程序員就更具價值了。當生產中出現錯誤或急需開發新功能時,第一步也是最重要的一步就是理解,閱讀代碼是能讓你順利到達彼岸。

原文鏈接:https://stackoverflow.blog/2022/08/15/how-to-interrogate-unfamiliar-code/

譯者介紹

崔皓,51CTO社區編輯,資深架構師,擁有18年的軟件開發和架構經驗,10年分布式架構經驗。

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2013-07-02 10:08:46

爛代碼代碼優化代碼清理

2016-12-09 15:02:02

云計算

2015-08-13 10:54:46

2015-09-14 09:28:47

2022-11-03 17:33:40

JavaString 類型

2020-03-12 07:42:49

代碼程序員

2025-10-15 08:44:37

AI模型數據

2017-04-10 18:10:31

2015-07-23 09:40:24

爛代碼程序員

2015-07-23 09:30:43

爛代碼程序員

2018-11-19 09:02:53

垃圾代碼辭職入職

2020-02-10 13:22:35

編程語言機器學習Python

2020-02-24 10:45:44

代碼開發工具

2020-02-27 16:17:31

代碼規范codegithub

2024-02-21 23:03:56

代碼系統

2021-03-04 08:06:15

ZooKeeper集群代碼

2018-04-17 11:47:06

if代碼參數

2014-05-13 10:02:50

2020-09-18 07:05:34

Java編程語言

2009-07-09 07:55:21

點贊
收藏

51CTO技術棧公眾號

久久久国产午夜精品| 久久99国产精品视频| 亚洲色图清纯唯美| 国产高清在线一区| 久久久午夜影院| 日本在线电影一区二区三区| 91麻豆精品国产| 国产伦精品一区二区三区四区视频_| 无套内谢的新婚少妇国语播放| 日本在线不卡视频一二三区| 久久国产精彩视频| 国产吞精囗交久久久| 免费视频观看成人| 精品福利视频导航| 亚洲一区三区视频在线观看| 黄色片网站免费在线观看| 欧美aⅴ一区二区三区视频| 欧美成人免费网| 免费黄色在线视频| 国产suv精品一区| 欧美高清www午色夜在线视频| 中文字幕一区二区在线播放| 日韩av在线影院| 天天干天天操天天做| av老司机免费在线| 中文字幕日韩一区| 欧美激情国产日韩| 亚洲精品成av人片天堂无码| 蜜臀久久99精品久久久画质超高清| 久久久久久国产精品久久| 你懂得在线观看| 成人在线分类| 欧美羞羞免费网站| 成人在线免费观看av| a视频在线免费看| 国产精品视频一二| 欧美不卡福利| 四季av日韩精品一区| 国产一区二区三区免费看| 国产精品777| 日韩精品视频免费看| 女主播福利一区| 日韩在线观看免费高清| 国产三级av在线播放| 日韩成人一级| 亚洲精品久久久久久下一站 | 91成人网在线| 国产美女网站在线观看| 日本在线视频中文有码| 亚洲视频免费在线| 在线观看亚洲视频啊啊啊啊| 黄色电影免费在线看| 91色九色蝌蚪| 极品尤物一区二区三区| 老牛影视av牛牛影视av| 国产精品综合二区| 91蜜桃网站免费观看| 国产三级小视频| 韩国一区二区在线观看| 国产日韩欧美黄色| 国产又粗又黄又爽| 国产在线一区二区| 亚洲一区亚洲二区| 国产精品毛片一区视频播| 久久国产精品露脸对白| 成人av番号网| 国产日韩在线观看一区| 国产精品一区二区在线观看不卡 | 日日鲁鲁鲁夜夜爽爽狠狠视频97| 污污在线观看| 亚洲午夜电影网| 你懂的av在线| 欧美一区久久久| 欧美在线免费观看亚洲| 天天爽人人爽夜夜爽| 亚洲高清国产拍精品26u| 调教视频免费在线观看| 成人精品免费网站| 欧美日韩电影一区二区| 1024国产在线| 亚洲精品国产第一综合99久久 | 99电影在线观看| www.久久久久久久久久| 成人免费观看av| 欧美激情导航| 国产精品实拍| 亚洲成a人v欧美综合天堂下载| 免费无码不卡视频在线观看| 成人看片网页| 91精品国产综合久久小美女| 在线观看一区二区三区四区| 色婷婷精品视频| yw.139尤物在线精品视频| 黄色一级视频免费观看| 国产日韩1区| 国产中文欧美精品| 黄色一级大片在线免费看国产一| 久久久99精品免费观看| 亚洲综合激情五月| 小早川怜子影音先锋在线观看| 日本丰满少妇一区二区三区| 国产精品igao网网址不卡| 免费日韩一区二区三区| 色婷婷综合久久久久| 久热精品在线观看| 免费在线观看日韩欧美| 国产精品美女诱惑| av播放在线| 亚洲第一狼人社区| 人人干人人干人人| 91蝌蚪精品视频| 中文字幕免费精品一区高清| 国产高清在线免费观看| 日韩av电影免费观看高清完整版| 91久久国产自产拍夜夜嗨| 欧美大片aaa| 综合亚洲深深色噜噜狠狠网站| 九色在线视频观看| 国产精品视频一区二区三区综合| 日韩久久午夜影院| 久久久久噜噜噜亚洲熟女综合| 日本欧美一区二区| 精品在线视频一区二区| av毛片在线看| 欧美日韩国产在线观看| 中文字幕一区二区三区人妻| 欧美日韩国产在线一区| 国产乱肥老妇国产一区二| 五月婷婷开心中文字幕| 亚洲最大色网站| 潘金莲激情呻吟欲求不满视频| 亚洲美女久久| 性欧美视频videos6一9| www久久久com| 亚洲视频一二三区| 亚洲综合在线网站| 亚洲精品无吗| 91sa在线看| 日韩中文字幕免费观看| 亚洲综合免费观看高清完整版在线| 黄色在线视频网| 在线观看欧美理论a影院| 午夜精品美女自拍福到在线| 亚洲爆乳无码一区二区三区| 亚洲日本护士毛茸茸| 欧美一级视频在线| 色综合五月天| 国产精品一区二区三区免费视频 | 久久成人18免费网站| 中文字幕在线视频第一页| 久久女同精品一区二区| 国产精品后入内射日本在线观看| 超碰一区二区三区| 隔壁老王国产在线精品| 蜜臀久久精品久久久久| 亚洲国产精品久久久男人的天堂 | 免费成人午夜视频| 久久中文资源| 26uuu另类亚洲欧美日本一| 手机在线观看免费av| 午夜视频在线观看一区二区三区| 久久国产劲爆∧v内射| 亚洲国产精品第一区二区三区| 国产在线一区二区三区欧美| heyzo中文字幕在线| 亚洲电影免费观看高清完整版在线| 久久免费视频6| 99久久免费视频.com| 黄色片网址在线观看| 欧美调教视频| 日韩免费观看网站| 在线观看a视频| 51久久夜色精品国产麻豆| 国产一区二区播放| 国产99久久久精品| a级黄色一级片| 免费看av成人| 国产啪精品视频| 成人高清免费在线| 亚洲成人中文字幕| 91porny九色| 亚洲欧洲成人精品av97| 黄色激情在线观看| 爽好多水快深点欧美视频| 一区二区精品国产| 2020最新国产精品| 日本韩国在线不卡| 国产一二三区在线观看| 精品国产百合女同互慰| 在线永久看片免费的视频| 中文字幕亚洲在| 中文字幕第九页| 日韩影院在线观看| www.男人天堂网| 你懂的一区二区三区| 国产日韩av在线播放| 免费网站在线观看人| 亚洲欧美日韩中文视频| 国产精品毛片久久久久久久av| 午夜精品久久久久久久久久| 欧美极品jizzhd欧美18| 成人黄色大片在线观看| 成人亚洲精品777777大片| 国产精品jizz在线观看美国| 日韩国产美国| 成人午夜网址| 成人福利在线视频| 一本大道色婷婷在线| 欧美成人合集magnet| 国内精品在线视频| 亚洲福利在线看| ,一级淫片a看免费| 色综合久久久久网| 免费人成年激情视频在线观看| 国产网站一区二区| 污污免费在线观看| 国产乱人伦偷精品视频不卡| 丁香啪啪综合成人亚洲| 国产精品v亚洲精品v日韩精品| 亚洲国产成人不卡| 激情小说亚洲图片| 91久久国产精品| av成人亚洲| 人妖精品videosex性欧美| 国产探花视频在线观看| 超碰91人人草人人干| 国产色a在线| 亚洲欧美激情一区| 日日夜夜精品免费| 欧美一区二区三区喷汁尤物| 中文字幕久久熟女蜜桃| 欧美日韩视频免费播放| 国产无遮挡又黄又爽又色| aiai久久| 欧美日韩亚洲一区二区| 欧美日韩在线视频免费| 中文字幕在线观看一区| 国产免费无遮挡吸奶头视频| 久久综合色播五月| 欧美一区二区免费在线观看| 国产91色综合久久免费分享| 亚洲天堂网站在线| 久久99精品一区二区三区| 免费看a级黄色片| 老司机午夜精品视频| 国产成人久久婷婷精品流白浆| 日韩视频免费| 国产69精品久久久久999小说| 韩日精品在线| 久久久久久久9| 在线观看日韩av电影| 男女日批视频在线观看| 99av国产精品欲麻豆| 久久久久久免费看| 夜夜嗨一区二区三区| 欧美 日韩 国产 高清| 一本色道88久久加勒比精品| 麻豆tv在线播放| aa国产精品| 亚洲精品无码久久久久久| 中文日韩欧美| 18禁男女爽爽爽午夜网站免费| 久久动漫亚洲| 男女污污的视频| 久久精品国产亚洲高清剧情介绍| 久久99999| 精彩视频一区二区三区| 国产精品久久久久野外| 成人av网站免费观看| 中文精品在线观看| 中文字幕乱码久久午夜不卡| 精品在线观看一区| 一区二区欧美国产| 西西44rtwww国产精品| 色婷婷av一区二区三区之一色屋| 久久久久久久久久一级| 欧美丰满少妇xxxxx高潮对白| 99精品人妻无码专区在线视频区| 精品国产一区二区三区忘忧草 | 国产成人免费网站| 影音先锋黄色资源| 中文字幕免费观看一区| 国产又黄又爽又无遮挡| 性感美女久久精品| 羞羞色院91蜜桃| 欧美一区二区三区日韩视频| 污污的视频网站在线观看| 中文字幕日韩在线视频| 97超碰资源站在线观看| 97热精品视频官网| 日韩高清不卡| 成人av资源网| 免费av一区| 4444亚洲人成无码网在线观看 | 午夜精品在线免费观看| 国产麻豆视频一区| 日本黄色网址大全| 自拍偷拍国产亚洲| www.中文字幕在线观看| 欧美男同性恋视频网站| 五十路在线观看| 久久久国产一区二区| 欧美舌奴丨vk视频| av一区观看| 日韩1区在线| 青青艹视频在线| 激情综合色播五月| 实拍女处破www免费看| 亚洲黄色小说网站| 中文区中文字幕免费看| 日韩精品在线播放| av在线免费观看网址| 国产盗摄xxxx视频xxx69| av日韩在线播放| 一区二区三区四区欧美日韩| 久视频在线观看| 亚洲在线中文字幕| 亚洲天堂视频在线| 日韩精品在线观看一区| 哥也色在线视频| 国产99视频精品免视看7| 一区二区三区四区高清视频| 色播亚洲婷婷| 国产精品女主播一区二区三区| 久久艹这里只有精品| 国产精品色婷婷| 黄色污污网站在线观看| 亚洲国产精品美女| 特级毛片在线| 成人网欧美在线视频| 日韩在线二区| 午夜视频在线瓜伦| 久久婷婷综合激情| 中文字幕一区二区三区精品| 日韩精品一区二区三区中文不卡| 欧美私人网站| 国产精品天天狠天天看| 国产欧美日韩影院| 欧美一级黄色影院| 久久久亚洲国产美女国产盗摄| 国产成人无码精品久在线观看| 精品国产百合女同互慰| 天天干在线视频论坛| 97人人模人人爽人人少妇| 综合天堂久久久久久久| 极品粉嫩美女露脸啪啪| 中文字幕视频一区二区三区久| 亚洲一区二区人妻| 日韩中文字幕在线播放| 国产精品99| 亚洲午夜久久久影院伊人| 麻豆视频一区二区| 国产一二三av| 欧美精品欧美精品系列| 成人在线直播| 不卡一区二区三区视频| 亚洲国产免费看| 国产精品无码专区| 日韩欧美精品中文字幕| 户外极限露出调教在线视频| 国产成人亚洲综合91精品| 日韩欧美电影| 国产农村妇女精品久久| 亚洲精品成人在线| 国产91久久久| 欧美一区二区视频97| 欧美日韩伦理| 亚洲午夜精品一区| 亚洲午夜免费电影| 天堂中文网在线| 国产成人在线精品| 日韩欧美伦理| 日本泡妞xxxx免费视频软件| 亚洲电影一区二区三区| 国产资源在线播放| 91精品免费视频| 悠悠资源网久久精品| 亚洲最大成人网站| 欧美精品久久一区| 成年人国产在线观看| 蜜桃av噜噜一区二区三| 麻豆一区二区在线| 久久高清免费视频| 亚洲欧美日韩网| 国内不卡的一区二区三区中文字幕| 免费在线黄网站| 久久亚洲影视婷婷| 国产有码在线观看| 久久久久亚洲精品成人网小说| 欧美黑白配在线| jizz大全欧美jizzcom| 亚洲综合久久久| 岛国最新视频免费在线观看| 亚洲影影院av| 久久看片网站| 久久艹精品视频| 国产亚洲欧美另类中文| 精品国产亚洲一区二区三区大结局| 欧美精品久久久久久久免费| 中文字幕在线一区|