国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

程序員,請優(yōu)先提高代碼的可讀性

移動開發(fā)
現(xiàn)在,當有人提及“優(yōu)化”一詞時,他們通常是指“優(yōu)化執(zhí)行時間”,除非他們明確表明要優(yōu)化GPU的內(nèi)存消耗,網(wǎng)絡流量等等。

[[116931]]

現(xiàn)在,當有人提及“優(yōu)化”一詞時,他們通常是指“優(yōu)化執(zhí)行時間”,除非他們明確表明要優(yōu)化GPU的內(nèi)存消耗,網(wǎng)絡流量等等。
了解優(yōu)化對象

當我開始編程時,所擁有的處理器執(zhí)行速度很慢,內(nèi)存空間也非常有限 —— 有時僅以KB衡量。因此,必須合理考慮內(nèi)存的使用和優(yōu)化。

在大學里,我們知道了優(yōu)化的兩個極端情況:

你可以犧牲空間來換取執(zhí)行速度的提升,
或者通過執(zhí)行重復操作來換取內(nèi)存消耗的優(yōu)化。

如今,沒有人會太在意內(nèi)存的使用(除了demoseners,嵌入式系統(tǒng)工程師,部分手游開發(fā)者),不僅是對于RAM空間,硬盤空間也是。 試想一下僅安裝看門狗就耗費硬盤近25Gb 空間。 此外,我在谷歌瀏覽器選項卡中寫這篇文章時,占用了130Mb的RAM空間。

實際上需要優(yōu)化的對象有很多:

隨著智能手機市場的增長,電量損耗的優(yōu)化備受關注;
優(yōu)化可讀性可以讓代碼易于閱讀和調(diào)試,從而縮短開發(fā)周期,降低開發(fā)成本;
還有很多優(yōu)化類型,此處不再贅述……

優(yōu)化可讀性——讓代碼更容易閱讀、跟蹤和理解。

你應該明白,你在優(yōu)化時難以兼顧各個方面。 例如,當致力于性能優(yōu)化時,你很可能讓應用程序內(nèi)存消耗增加,同時代碼可讀性也變差。
為何優(yōu)化可讀性

開發(fā)者大量工作時間并不是在編寫代碼,而是閱讀代碼,調(diào)試代碼,查閱他人提交的開發(fā)文檔,學習新的庫等。

當閱讀代碼時,開發(fā)者實際上是充當代碼解釋器的角色(雖比不上計算機)—— 在他們的頭腦中執(zhí)行代碼,并試圖記住當前執(zhí)行狀態(tài)。 這就是程序員在閱讀代碼過程中被打攪脾氣暴躁的原因。

時間== 金錢

你應該意識到一件很最重要的事,是你和你的同事浪費了大量時間。 即使是一個努力工作的開發(fā)者,在做下面的事時仍然浪費了大量時間:

實現(xiàn)一些現(xiàn)在不需要,以后也可能永遠用不到的功能。
做一些沒有實際價值的改進。 例如,花費一周時間優(yōu)化一個函數(shù)的執(zhí)行時間,而該函數(shù)在1小時內(nèi)僅被調(diào)用10ms的時間。
編寫的代碼難以調(diào)試,卻還要試圖從中找出錯誤。
編寫的代碼他人難以理解。 注意,“他人”也可能是短短一周后的你。

上述情況是假設遇到問題的開發(fā)者經(jīng)驗豐富并且熟知高效算法和簡潔代碼如何書寫,否則要列出的情況要更多。
優(yōu)化可讀性

唐納德·克努特說過一句名言。 我敢打賭你聽過很多次。

“在編程中,過早優(yōu)化是萬惡之源。 ” —— D.Knuth,1974

我遇到很多知道這句話的人,但真正理解這句話的卻很少。 最常見的錯誤理解像這樣:

—為何這么簡單的任務,代碼卻如此復雜?
—我優(yōu)化了X和Y,因為在將來……
—難道你沒聽說過早的優(yōu)化是萬惡之源嗎?
—當然,但這并不是過早優(yōu)化,我能肯定這樣做程序執(zhí)行效率會更高。

我想這是由于對過早優(yōu)化這個詞沒有明確界定的原因。 這就是這些人一點也不認為他們那么做屬于過早優(yōu)化的原因。 那么,我們該如何界定這個詞呢?

過早優(yōu)化——在工作系統(tǒng)中分析和運行測試前的任何優(yōu)化嘗試。

除可讀性之外任何修改都屬于過早優(yōu)化。 所以,與其說一個人不應該做什么,不如說應該做什么。 那么,這句引言可以這樣理解:

優(yōu)先提高可讀性。
什么阻礙了開發(fā)者閱讀代碼

好吧,我們一致認為,我們應該讓代碼更易于閱讀,這樣可以節(jié)約時間和金錢,對吧?但這究竟意味著什么?

有跡象表明,下面兩個基本方面極大地降低了開發(fā)者閱讀代碼的速度:

代碼晦澀難懂,
代碼難以跟蹤。

代碼艱澀難懂

遺憾的是,人們并不能像軟件解釋器那樣,可以不必理會將兩個數(shù)相加并調(diào)用一個函數(shù)這部分代碼的功能(機械式的編譯)。

為了查找代碼異常的原因,程序員必須理解源程序中編寫的代碼實現(xiàn)了何種功能,編寫的初衷是為了實現(xiàn)何種功能。
什么讓代碼晦澀難懂?

下面情況是對于經(jīng)驗豐富的開發(fā)者而言,這些開發(fā)者熟悉代碼開發(fā)使用的語言和程序中使用的算法(即他們有足夠的知識來理解這段代碼)。

代碼不良。 單個字母的奇怪變量和1000行代碼的冗長函數(shù)。
代碼的格式不正確或不一致。
代碼中包含冗余代碼。
代碼中包含未備注的低層次優(yōu)化。
代碼過于高明。

我將跳過前兩條,因為無論如何你不應該閱讀不良代碼。 如果你所在的公司有人編寫了不良代碼,你應該糾正它們或者將其廢棄。 當然,你必須為你的整個代碼庫執(zhí)行嚴格的編程規(guī)范。
3. 代碼中包含冗余代碼

亦或所謂的行數(shù)優(yōu)化。 嵌套函數(shù)調(diào)用和條件運算符的長行代碼難以剖析。 當然,你可能會說這種觀點是片面的。 但這些人覺得源程序代碼越短越好,不必考慮可讀性。
4. 未備注地層次優(yōu)化

最初,代碼的可讀性很好,工作也很穩(wěn)定,但有些人決定在某些方面對其進行優(yōu)化。 經(jīng)過認真剖析,這可能是一個很好的優(yōu)化,但此時的代碼看上去像是數(shù)組、位運算和幻數(shù)的結合體。 沒有人知道代碼在做什么,甚至代碼應該做什么,因為完成優(yōu)化的人沒有提交任何說明。

也許你聽說過優(yōu)秀的代碼不需要說明文檔。 但是經(jīng)過優(yōu)化的代碼(特別是優(yōu)化效果很理想的情況)必須要有說明文檔。

在你的代碼庫中,可能大部分的優(yōu)化只是像這樣的未備注行:
1

if (val != val) { ... }


5. 代碼過于高明

作為軟件開發(fā)者,我們掌握越來越多的學術技巧并將其運用到實際代碼開發(fā)中。 畢竟,我們是計算機科學家,而不只是碼農(nóng)!

有些語言甚至鼓勵開發(fā)者使用前沿技術,使代碼更具表現(xiàn)力和學術性。 當你用代碼建立了一個非常健壯的系統(tǒng),特別當你用數(shù)學方法證明了一個高深定理,而99.997%受過教育的人對這種方法都不理解,你就會有這種成就感。

即使代碼被良好地封裝成模塊/類/函數(shù)并且這些模塊包含完全可讀的命令式代碼,但其他人想要讀懂這段代碼,他們必須掌握整個代碼的框架以及所有使用的相關技術和模式。

再一次強調(diào),記住“其他人”可能就是一周后的你。

極可能這是我在工作中僅認識兩個使用Scala語言人的原因。就我個人而言,非常喜歡Scala語言。 對我來說,它就是一個學術操場,我可以在那里建造玻璃城堡。 一旦你越了解它,它的越多特性也就能為你所用,你也就越明白它本質(zhì)上只是一門編程語言(請不要在這里引用我!)。

雖不如Perl語言,但即使最漂亮的代碼庫也需要修改和更新。 現(xiàn)在,你需要尋找一個能夠理解這些優(yōu)美代碼的人……

簡潔高明的代碼難以閱讀似乎是有爭議的。

“軟件調(diào)試要比編寫代碼困難一倍,如果你發(fā)揮了***才智編寫代碼,那么你的智商便不足以調(diào)試這個代碼。 ” —— Brian Kernighan
代碼難以跟蹤

閱讀代碼時,通常需要頻繁的從一個函數(shù)或類跳轉到另一個函數(shù)或類。 掌握你使用的集成開發(fā)環(huán)境(IDE),可以節(jié)約很多閱讀時間。 通過使用集成開發(fā)環(huán)境(例如Visual Studio)的“跳轉至聲明”,“查找使用”,“導航至”,“檢查”等特性,你可以將整個代碼看作是一幅連通圖。

在Notepad中編寫代碼是不錯的選擇,但是如果你想有效的閱讀代碼,必須掌握一個集成開發(fā)環(huán)境。

那么,究竟什么是連通圖呢?

連通圖是在拓撲空間中連接的圖,即圖中任意兩點之間都有一條通路。

換句話來說,在“連通”代碼中,你可以方便的從一個方法中跟蹤到另一個方法中,并在你頭腦中建立這段代碼的功能框架。

如果代碼中某一部分鏈接被破壞(在這種情況下,集成開發(fā)環(huán)境不能幫助你實現(xiàn)函數(shù)間的跳轉),通常你必須花一些時間自己查找鏈接。代碼中被破壞的鏈部分越多,越難以跟蹤,代碼也就越難以閱讀。

那么,為什么代碼圖會被斷開?原因是多方面的,下面將列出一些常見情況:
1. 使用字符串引用方法和屬性

一些框架就喜歡這樣做,他們將”回調(diào)”作為字符串傳遞并在需要時使用反射。 此時你需要使用CMD+F查找。

最可惡的是動態(tài)語言中的動態(tài)字符串…… 對這個問題,向JavaScript或AS3致敬!
2. 代碼被分割成互不相連的部分

例如,你的代碼一半使用C#編寫,另一半是在可視化節(jié)點編輯器生成。 在這兩者之間跳轉非常不易。

依賴注入框架和其他XML配置工具也是。雖然沒有明確說明,但編寫XML配置文件也屬于編程。 這就是所謂的的聲明式編程(更不用說那些構建基于XML命令式語言的瘋狂的人)。
3. 巨大的圖節(jié)點

20個鏈接跳轉到這個包含1000行代碼的函數(shù)?。。哎喲。 你不需要包含這種節(jié)點的圖。
4. 一切都過于抽象

通過跳轉至聲明,你可到達一個接口或者一個抽象類,必須弄清楚有哪些實現(xiàn)。 依賴注入,抽象工廠和其他所有反對依賴的方法使得這一切變得更糟。 代碼圖中節(jié)點間的聯(lián)系過于抽象。

這樣說來,我討厭依賴注入(DI)和擴展標識語言(XML)。但DI是一個很棒的工具,它可以讓你避免書寫面條式代碼并讓程序的架構更加模塊化,更具可測試性。但像其他好的事物一樣,過度依賴必然產(chǎn)生負面效果。

我曾在審查一個應用程序時感到完全氣餒,因為我意識到自己弄不明白程序從何處開始。。。例如它的入口點在哪。 這一切都是在程序開始時從XML配置工具自動生成。

但我確實討厭XML配置工具。

***

所以,到這里你應該已經(jīng)學會:

掌握你的集成開發(fā)環(huán)境,
盡可能保持代碼圖連通,
首先編寫簡單代碼,
編寫不必要的代碼,就是在浪費金錢。

強迫自己編寫簡單的代碼,避免在早期階段優(yōu)化確實有一定難度,這需要花費時間。

在截止期前2小時已連續(xù)工作48小時,如果你在半睡半醒的狀態(tài)下能夠閱讀你所使用的代碼,你應該對過去的自己說聲“謝謝”。

責任編輯:chenqingxiang 來源: blog.jobbole
相關推薦

2014-07-29 09:55:33

程序員代碼可讀性

2022-08-29 00:37:53

Python技巧代碼

2022-08-23 14:57:43

Python技巧函數(shù)

2017-11-23 10:59:17

程序員代碼編程

2023-10-30 18:05:55

Python類型

2024-10-11 06:00:00

Python代碼編程

2021-10-09 10:24:53

Java 代碼可讀性

2021-04-01 16:43:05

代碼可讀性開發(fā)

2017-10-30 15:22:29

代碼可讀性技巧

2019-06-06 08:48:14

代碼函數(shù)編程語言

2023-07-07 07:43:37

AutoMapper映射庫

2015-08-27 13:11:18

JavaScript代碼

2025-05-12 10:00:00

JavaScript代碼編碼

2021-12-08 23:38:25

Python工具代碼

2024-04-23 08:01:20

面向?qū)ο?/a>C 語言代碼

2010-09-02 10:43:24

CSS文件

2020-11-08 14:36:27

pandas數(shù)據(jù)分析pipe()

2019-12-03 09:32:32

JavaScript代碼開發(fā)

2022-11-04 11:18:16

代碼優(yōu)化可讀性

2024-01-31 08:04:43

PygmentsPython
點贊
收藏

51CTO技術棧公眾號

日本中文字幕一区二区有码在线 | 国产精品电影一区| 精品欧美色视频网站在线观看| 中文字幕亚洲电影| 欧美又粗又长又爽做受| 日产欧产美韩系列久久99| 99视频在线| 欧美日韩一二三四| 日韩美女视频免费在线观看| **爰片久久毛片| 色综合男人天堂| 538任你躁精品视频网免费| 日韩一区视频在线| 成人做爰视频www| 中文字幕在线成人| 成人黄色毛片| 久久国产精品久久精品| 精品国产一区二区三区2021| 色av吧综合网| 高清一区二区| 国内精品久久久久久| 欧美调教视频| 国产精品美女网站| 婷婷综合伊人| 国内外成人免费视频| 国产亚洲精品v| 午夜精品亚洲一区二区三区嫩草 | 青椒成人免费视频| 综合网五月天| 99这里都是精品| 欧美精品aaaa| 一区二区三区日韩欧美精品 | 国产乱码精品一区二区三区日韩精品| 国产大片一区| 国产精品视频免费一区| 另类国产ts人妖高潮视频| 欧美日韩免费观看一区| 国产在线乱码一区二区三区| 免费无码毛片一区二三区| 国产精品狼人久久影院观看方式| 午夜大尺度福利视频| 婷婷丁香激情综合| 97在线观看免费观看高清 | 看国产成人h片视频| 免费极品av一视觉盛宴| 久久久国产精华| 日本特黄a级高清免费大片| 欧美羞羞免费网站| 日本不卡网站| 国外成人性视频| 欧美一区二区三区另类 | 黄色片av在线| 欧美视频精品在线观看| 午夜裸体女人视频网站在线观看| 久久精品国产99国产精品澳门| 午夜精品影视国产一区在线麻豆| 91精品国产综合久久香蕉| 久久国产欧美| 青青草成人免费在线视频| 亚洲精品视频自拍| 调教一区二区| 久久99久久亚洲国产| 亚洲男女av一区二区| 欧美精品一区二区性色a+v| 中文字幕一区二区日韩精品绯色| 粉嫩一区二区三区国产精品| 主播福利视频一区| 亚洲高清影视| 国产精品裸体瑜伽视频| 日韩欧美在线视频观看| 国产精品麻豆成人av电影艾秋| 国产精品一二三视频| 国产综合色在线视频区| h动漫在线视频| 中日韩美女免费视频网址在线观看 | 欧美最新精品| 国产精品主播视频| 国产99久久久精品| 国产在线一二| 97视频com| 久久国产视频网| 中日韩一区二区三区| 色一区av在线| 日韩亚洲国产精品| 中文字幕成人在线视频| 欧美精品一区二| 免费观看久久av| 中文字幕中文字幕一区三区| 亚洲一区二区av电影| 88xx成人永久免费观看| 国产精品久久久久免费| 中文字幕一区二区三区蜜月| 自拍偷拍亚洲视频| 蜜桃av色综合| 欧美日韩在线免费| 国产丝袜一区| 黄色一级片在线看| 在线不卡中文字幕| 91亚洲国产高清| 色一情一乱一伦一区二区三区日本 | 日韩午夜精品电影| 外国成人免费视频| wwwwww.色| 日韩经典一区二区三区| 欧美久久一区| 国产毛片视频| 久99久在线视频| 国产揄拍国内精品对白| 成人在线播放视频| 国产精品久久久久久五月尺| 久久婷婷久久一区二区三区| 韩国精品一区| aaa级精品久久久国产片| 亚洲欧美一区二区三区国产精品| 456成人影院在线观看| 免费看国产精品一二区视频| 欧美四级电影网| 亚洲午夜电影| 免费黄色在线视频网站| 国产精品99久久久久久久久久久久 | 中文字幕第一页久久| 涩涩涩在线视频| 欧美成人蜜桃| 这里是久久伊人| 国产亚洲福利| 国产视频中文字幕在线观看| 成人免费视频网站入口| 欧美日韩在线播放三区四区| 99riav国产精品| 日韩特级毛片| 欧美一级特黄aaaaaa在线看片| 日韩精品一二三四区| 国精品**一区二区三区在线蜜桃| 呦呦在线视频| 在线观看日韩羞羞视频| 国产视频综合在线| 不卡av在线免费观看| 欧美黄色一级| 国产免费网址| 成人国产精品日本在线| 在线亚洲免费视频| 毛片一区二区| 亚洲欧美小说色综合小说一区| 妺妺窝人体色www看人体| 精品国产一区av| 国产精品久久久久影院色老大| 色妞ww精品视频7777| 91蝌蚪视频在线观看| 日韩暖暖在线视频| 色94色欧美sute亚洲线路一ni| 亚洲久久一区二区| 国产欧洲在线| 日韩精品视频一区二区在线观看| 欧美激情性做爰免费视频| 亚洲色图视频免费播放| 国产精品激情| 天堂av在线网| 亚洲精品乱码久久久久久自慰| 欧美在线免费视频| 在线视频你懂得一区| 日本中文在线一区| 亚洲国产91视频| qvod激情图片| 久久久久久高清| 日韩在线中文视频| 一区二区三区在线视频观看58| 在线观看日韩av电影| 成人影院网站| 黄色仓库视频网站| 人禽交欧美网站免费| www.国产一区| 午夜成人在线视频| 麻豆国产一区二区| 国产毛片久久久| 麻豆网站在线| 无码人妻丰满熟妇区96| 日韩免费在线视频| 亚洲成年人在线播放| 国产欧美一区二区三区在线看蜜臀| 欧美第十八页| 亚洲自拍偷拍网址| 欧美一区二区三区人| 久久九九久久九九| 欧美aa国产视频| 99精品国产九九国产精品| 两个人看的免费完整在线观看| 天天综合色天天综合色hd| 久久久免费观看视频| 欧美一区二区三区婷婷月色| 久久免费偷拍视频| 国产精品嫩草99av在线| 超碰97久久| 欧美人动性xxxxz0oz| 黄网站免费观看| 久久久无码中文字幕久...| 国产精品免费一区| 深夜成人在线观看| 欧美一级精品大片| 一区二区欧美国产| 国产精品亚洲а∨天堂免在线|