精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线视频欧美区| 国产一区91精品张津瑜| 国产亚洲精品美女| 色国产在线视频| 免费网站成人| 成人激情久久| 亚洲一区国产视频| 日韩精品资源| 99热这里只有精品3| 在线欧美不卡| 最近中文字幕mv在线一区二区三区四区| 香蕉视频色在线观看| caoporn视频在线| 国产色产综合色产在线视频| 91日韩在线播放| 黄色片网站在线免费观看| 香港欧美日韩三级黄色一级电影网站| 欧美刺激脚交jootjob| 精品99在线视频| 亚洲性图自拍| 亚洲国产精品二十页| 国产精品区二区三区日本| 中文字幕第一页在线播放| 狠狠综合久久| xxxx性欧美| 久久午夜福利电影| 136福利精品导航| 欧美日韩极品在线观看一区| 亚洲 欧美 日韩 国产综合 在线 | 日韩av在线网页| 第一区免费在线观看| 欧美18av| 精品久久久久久久久久| 国产欧美123| 欧美精品hd| 国产欧美va欧美不卡在线 | 成人综合一区| 国产视频久久网| 艳妇乳肉亭妇荡乳av| 亚州一区二区| 91精品国产手机| 怡红院亚洲色图| 国产69精品久久久久9999人| 日韩欧中文字幕| 黄色影院一级片| av资源在线| 精品久久久中文| 无码中文字幕色专区| 日本在线观看大片免费视频| 亚洲欧美国产77777| 伊人情人网综合| 在线观看黄色av| 国产精品少妇自拍| 神马影院一区二区| 国产精品久久久久久久龚玥菲| 久久一夜天堂av一区二区三区| 久久天天狠狠| 欧美日韩国产亚洲沙发| 久久夜色精品国产欧美乱极品| 久久99精品久久久久久青青日本| 日韩一卡二卡在线| av影院午夜一区| 久久久一本精品99久久精品| 国产玉足榨精视频在线观看| 国产女主播视频一区二区| 新呦u视频一区二区| 求av网址在线观看| 亚洲男女毛片无遮挡| 欧美 国产 精品| 三级网站视频在在线播放| 亚洲成人av一区| 成人观看免费完整观看| 成人教育av| 欧美日韩一区二区三区在线看| 国产美女18xxxx免费视频| 精品国产免费观看| 成年人视频网站在线| 国产亚洲欧洲一区高清在线观看| 欧美lavv| 伊人免费在线| 玉足女爽爽91| 欧美性大战久久久久xxx| 偷拍精品精品一区二区三区| 欧美日韩精品综合在线| 午夜大片在线观看| 粉嫩久久久久久久极品| 亚洲成年人在线播放| 午夜理伦三级做爰电影| 久久日文中文字幕乱码| 欧美激情一区二区三区久久久| 亚洲国产综合久久| 久久久久久久尹人综合网亚洲| 国产精品视频自拍| 高h调教冰块play男男双性文| 91亚洲国产成人精品一区二三 | 91蝌蚪精品视频| 亚洲精品日韩在线| 亚洲一级理论片| 亚洲一级网站| 国产欧美精品日韩| 人妻妺妺窝人体色www聚色窝| 日本一区二区免费在线| 青青青青在线视频| 成人免费一区| 日韩高清av在线| 外国一级黄色片| 久久中文在线| 国产一区福利视频| 黄色av电影在线观看| 富二代精品短视频| 激情成人在线观看| 精品国产一区二区三区香蕉沈先生| 久久精品国产一区二区三区| 黄色在线免费观看| 成人18视频日本| mm131午夜| 国产精品亚洲一区二区三区在线观看| 日韩欧美国产小视频| 韩国三级hd中文字幕| 亚洲国产日韩在线| 91视频九色网站| 午夜激情在线观看| 色哟哟一区二区在线观看| 日本泡妞xxxx免费视频软件| 日韩伦理一区| 欧洲中文字幕国产精品| 亚洲精品一区二区三区区别| 国产精品久久久久久久久动漫| 午夜精品久久久久久久无码| 亚洲91网站| 久久香蕉国产线看观看av| 亚洲av无码不卡| 久久综合久久综合亚洲| 亚洲理论电影在线观看| 国产精品免费精品自在线观看| 中文字幕欧美日韩在线| 激情视频网站在线观看| 91美女片黄在线观看| 日本国产在线播放| 日本欧美高清| 26uuu另类亚洲欧美日本一 | 国产一区二区三区视频在线观看| 国产精品7777777| 成人av高清在线| 丝袜人妻一区二区三区| jizz国产精品| 久久久久久久爱| 狠狠人妻久久久久久综合麻豆| 一区二区三区自拍| 下面一进一出好爽视频| 综合精品久久| 97人人模人人爽人人少妇| 色婷婷视频在线观看| 精品少妇一区二区三区在线播放 | 成人免费视频视频在| 国产黄色在线网站| 日韩欧美高清一区| 国产亚洲精品女人久久久久久| 成人做爰69片免费看网站| 久久亚洲国产成人精品无码区 | 欧美另类一区| 视频在线日韩| 日韩在线观看免费全| 国产欧美综合视频| 亚洲一区二区三区四区五区黄| 中文字幕人妻熟女在线| 欧美福利影院| 精品国产乱码久久久久久蜜柚| 九色porny丨首页入口在线| 精品视频久久久久久| 95av在线视频| 午夜视频在线观看一区| 91精产国品一二三| 在线欧美日韩| 欧美一区二区三区电影在线观看| 怡红院成人在线| 中文字幕在线国产精品| 国产精品久久久久久在线| 伊人夜夜躁av伊人久久| 日本wwwwwww| 亚洲中午字幕| 亚洲一区二区在线免费观看| 精品999日本久久久影院| 欧美精品久久久久久久免费观看| 免费看男男www网站入口在线| 欧美三级欧美一级| 麻豆chinese极品少妇| 久久这里只有精品6| 91丝袜在线| 午夜精品久久久久久不卡8050| 亚洲永久无码7777kkk| 爽好多水快深点欧美视频| 亚洲一区二区三区涩| 亚洲一区二区三区四区电影| 2021久久精品国产99国产精品| 98在线视频| 精品国产欧美一区二区| 男人天堂av在线播放| 亚洲欧美日韩电影| 永久免费看mv网站入口78| 久久激情综合网| 六月丁香婷婷激情| 亚洲成人日韩| 欧美亚洲免费高清在线观看| 国产亚洲精aa在线看| 国产91|九色| av在线看片| 亚洲视频视频在线| 亚洲乱码在线观看| 欧美日韩中字一区| 美日韩一二三区| 亚洲精品一卡二卡| 精品国产aaa| 99国产精品国产精品毛片| 6080国产精品| 视频在线在亚洲| 福利视频一二区| 88国产精品视频一区二区三区| 欧美日韩在线一区二区三区| 999国产精品一区| 国产在线观看不卡| 波多野结衣亚洲| 国外成人在线直播| 中国av在线播放| 日韩中文字幕在线免费观看| 久久天堂电影| 日韩精品视频三区| 欧美一级做性受免费大片免费| 91精品午夜视频| 极品国产91在线网站| 欧美日韩久久久久| 日韩av综合在线| 亚洲一区二区三区四区五区中文| 丰满少妇被猛烈进入一区二区| 国产精品网友自拍| 日韩不卡av在线| 国产区在线观看成人精品 | 亚洲国产日韩欧美在线99| 国产色在线视频| 欧美日韩一区中文字幕| 无码人妻丰满熟妇区bbbbxxxx| 黄色一区二区三区| 日本五十路女优| 亚洲va韩国va欧美va| 久久久久久蜜桃| 亚洲影院久久精品| 免费在线观看黄视频| 一区二区在线观看视频| 18岁成人毛片| 一区二区三区资源| 久久久久久蜜桃| 亚洲午夜在线电影| 国产精品美女毛片真酒店| 亚洲成人一二三| 亚洲国产成人精品激情在线| 精品久久久中文| 天堂网免费视频| 欧美体内she精视频| 亚洲无码精品在线播放| 911精品产国品一二三产区| 国产精品一级二级| 日韩欧美三级在线| 色丁香婷婷综合久久| 日韩电影中文字幕一区| 欧美偷拍视频| 在线亚洲国产精品网| 秋霞a级毛片在线看| 不卡中文字幕av| 丁香高清在线观看完整电影视频| 韩国精品美女www爽爽爽视频| 日本乱码一区二区三区不卡| 91干在线观看| 老司机精品视频网| 亚洲最大福利网站| 欧美国产不卡| 亚洲精品免费在线看| 欧美1区3d| 91av资源网| 看电视剧不卡顿的网站| 绯色av蜜臀vs少妇| 久久尤物电影视频在线观看| 免费黄色国产视频| 亚洲午夜av在线| 波多野结衣理论片| 欧美一级搡bbbb搡bbbb| 香蕉视频免费看| 日韩中文字幕在线观看| av资源中文在线| 国产欧美精品一区二区| 国产精品jk白丝蜜臀av小说| 欧洲成人一区二区| 欧美一区久久| 熟女人妇 成熟妇女系列视频| 精品无码三级在线观看视频 | 噜噜噜天天躁狠狠躁夜夜精品| 欧美一区二区综合| 欧美不卡高清| 日韩有码免费视频| 国产成人综合自拍| 国产精品一二三区在线观看| 亚洲男人的天堂av| 国产一区二区视频网站| 日韩欧美亚洲一区二区| 欧美香蕉爽爽人人爽| 欧美高清激情视频| 99riav视频一区二区| 国产在线精品一区二区中文| 久久亚洲国产| 国产日产欧美视频| 成人综合在线观看| 欧美做爰啪啪xxxⅹ性| 在线观看日韩毛片| 色婷婷综合视频| 超在线视频97| 欧美一级做a| 欧美重口乱码一区二区| 99国产精品自拍| 又大又长粗又爽又黄少妇视频| 国产精品久线观看视频| 无码人妻精品一区二区三区不卡| 日韩亚洲欧美一区二区三区| av中文字幕在线| 日本精品一区二区三区在线播放视频 | 偷拍欧美精品| 爱情岛论坛成人| 91在线观看一区二区| 久久久美女视频| 日韩一区二区精品在线观看| 欧美r级在线| 国产精品视频久久| 国产亚洲欧美日韩在线观看一区二区 | 日韩av一卡二卡| 青草av在线| 99久久综合狠狠综合久久止| 99国产**精品****| 国产三级三级看三级| 国产日韩影视精品| 天天操中文字幕| 精品视频—区二区三区免费| 高清在线视频不卡| 国产中文一区二区| 亚洲日本久久| 亚洲调教欧美在线| 午夜精品久久久久久久99水蜜桃| 黄色www视频| 国模私拍视频一区| 久久悠悠精品综合网| 国产av天堂无码一区二区三区| 成人午夜视频福利| 日本少妇裸体做爰| 日韩经典中文字幕| 中文在线最新版地址| 欧美专区一二三 | 精品国产成人av| 天天爽夜夜爽夜夜爽| 91国产美女在线观看| 日韩精品导航| 激情视频综合网| 国产精品视频线看| 国产精品久久777777换脸| 日韩视频免费观看| 精品一区二区三区中文字幕| www.男人天堂网| 9i在线看片成人免费| 国产91国语对白在线| 正在播放亚洲1区| 97色婷婷成人综合在线观看| 日韩精品免费一区| 91影院在线免费观看| 加勒比在线一区| 久久精品国产精品亚洲| 一本色道69色精品综合久久| 东北少妇不带套对白| 久久久精品免费网站| 亚洲一区在线观| 九九热在线精品视频| 日韩黄色网络| 粉色视频免费看| 亚洲午夜羞羞片| 久久手机免费观看| 亚洲精品欧美极品| 亚洲一区二区三区高清不卡| 老熟妇一区二区| 欧美一区二区在线看| 日本不良网站在线观看| 亚洲午夜精品一区二区三区| 国产精品一二三| 国产熟妇一区二区三区四区| 欧美成人全部免费| 女厕嘘嘘一区二区在线播放| 性生活免费在线观看| 一区二区三区精品| 精品亚洲综合| 国产精品久久久久免费| 日本不卡视频在线观看| 国产亚洲精品久久久久久打不开| 亚洲午夜未删减在线观看| 日韩精品视频在线看| 日韩视频免费在线播放| 亚洲午夜久久久久久久久电影网 |