在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何編寫可讀性代碼

張康康 ? 2019-08-16 18:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編寫可讀性代碼


作者:極鏈科技 湯紅燕

什么叫可讀性代碼?

簡(jiǎn)單來(lái)說(shuō),就是易于理解、耗腦時(shí)間少、可維護(hù)性較高的代碼。

編寫可讀性代碼

把信息裝到名字里(一個(gè)好的名字可以承載很多信息)

1. 選擇專業(yè)的詞(避免“空洞”)

比如函數(shù) getUserInfo( ) 是用來(lái)獲取用戶信息,但是,是從接口中獲取的信息呢?還是在頁(yè)面已經(jīng)暴露的信息?看到的時(shí)候就會(huì)有疑問(wèn)。

命名的時(shí)候,如果是從互聯(lián)網(wǎng)中獲得,可以使用fetchUserInfo( )來(lái)表示。

2. 找到更有表現(xiàn)力的詞(更清晰、精確)

比如:search 和 find 區(qū)別 ,再可以類似于表格數(shù)據(jù)的篩選, 可以考慮用更準(zhǔn)確的詞匯去表示。

9442a3755ac247069a2879da26566215.png

避免使用像 tmp 和 retval 這樣泛泛的名字。

3. 使用具體的名字更細(xì)致地描述事物

對(duì)于一個(gè)變量包含十六進(jìn)制字符串,命名為 let id,但是為何不命名成 let hex_id?

如果你的變量時(shí)一個(gè)度量值的話,最好讓名字帶上它的單位。

4. 名字應(yīng)該有多長(zhǎng)

在編寫代碼取名的時(shí)候總會(huì)有一些疑問(wèn),我的定義名稱該多長(zhǎng)才合適?可以遵循以下幾點(diǎn):

l 小作用域里可以使用短的名字;

l 首字母縮略詞和縮寫(當(dāng)然是在成員能看懂的情況下 TBColor -> TextBackgroundColor);

l 丟掉沒(méi)用的詞(no-padding-all -> no-padding);

l 利用名字的格式來(lái)傳遞含義(比如所有的class 是class-name, id 是 id_id);

不會(huì)讓人誤解的名字

常用的 filter() 命名,如果新同學(xué)看到,可能會(huì)產(chǎn)生疑問(wèn),這是過(guò)濾掉滿足要求的值呢還是不滿足要求的?

為了便于處理以上情況,有以下幾點(diǎn)建議:

l 使用 min 和 max 來(lái)表示(包含)極限

l 使用 first 和 last 來(lái)表示包含的范圍

l 使用 begin 和 end 來(lái)表示包含/排除范圍

l 給布爾值命名

對(duì)于語(yǔ)句 bool read_password = true 是我們已經(jīng)讀取密碼,還是我們需要讀取密碼?

這時(shí)候可以用 need_password 或 user_is_authenticated 這樣的名字來(lái)代替;

像 is 、has 、can或should這樣的詞,就可以把布爾值變得更明確。

審美

代碼的審美,確切地說(shuō),有三條原則:

1. 使用一致的布局,讓讀者很快就習(xí)慣這種風(fēng)格。

2. 讓相似的代碼看上去相似。

3. 把相關(guān)的代碼行分組,形成代碼塊。

該寫怎樣的注釋

1. 從代碼本身快速推斷出事實(shí)的不需要注釋

2. 不要為了注釋而注釋

3. 不要給不好的名字加注釋(不如改名字)

4. 加入“導(dǎo)演評(píng)論”,你可以在代碼中加入注釋來(lái)記錄你對(duì)代碼有價(jià)值的見(jiàn)解。

5. 為代碼中的瑕疵寫注釋

b2e97cee7cd1459086c5b06654154d9f.png

6. 給常量加注釋(有些常量不需要注釋,因?yàn)樗鼈兊拿忠呀?jīng)很清楚,但很多常量可以通過(guò)加注釋得以改進(jìn))

7. 站在讀者的角度,“全局觀”注釋

e847d704d9574e7b836ab5fa202b9ef9.png

寫出言簡(jiǎn)意賅的注釋

1. 讓注釋保持緊湊

2. 避免使用不明確的代詞(如it,this等)

3. 潤(rùn)色粗糙的句子

4. 精確地描述函數(shù)的行為

比如用輸入/輸出例子來(lái)說(shuō)明特別的情況

下面是一個(gè)用來(lái)移除部分字符串的通用函數(shù):

248217c7228d4cb5b35e3bdaa7d95619.png

5. 聲明代碼的意圖

對(duì)于“具名函數(shù)參數(shù)”的注釋,就是像 C# Python 這類語(yǔ)言的命名函數(shù)參數(shù),讓每個(gè)參數(shù)的意義更加明確。

比如:

e7090c398a35419b852febc7a4436cbb.png

6. 采用信息含量高的詞

l 避免使用代詞

l 盡量精確描述函數(shù)的行為

l 精心挑選輸入/輸出的例子

l 聲明代碼的高層次意圖,而非明顯的細(xì)節(jié)

l 用嵌入注釋解釋難以理解的函數(shù)參數(shù)

l 用含義豐富的詞語(yǔ)

簡(jiǎn)化循環(huán)和邏輯

1. 把控制流變得易讀

l 條件語(yǔ)句中參數(shù)的順序

比較左側(cè): “被詢問(wèn)”的表達(dá)式,它的值傾向于不斷變化

比較右側(cè): 用來(lái)做比較的表達(dá)式,它的值更傾向于常量

l if/else 語(yǔ)句塊的順序

首先處理正邏輯而不是負(fù)邏輯

再處理簡(jiǎn)單的情況

最后處理有趣的或者是可疑的情況

l ?: 表達(dá)式, 只有在簡(jiǎn)單的情況下使用

l 避免 do/while 循環(huán)

l 從函數(shù)中提前返回

l 最小化嵌套

l 減少循環(huán)內(nèi)嵌套

2. 拆分超長(zhǎng)表達(dá)式

l 用做解釋的變量

c8c164cedcb64b88b4eb5d32dc4d902f.png

l 總結(jié)變量(用一個(gè)短很多的名字來(lái)代替一大塊代碼,這就是總結(jié)變量)

l 拆分巨大的語(yǔ)句

比如:

a29c9a62cd6e4ccca8a110e99b13a356.png

顯而易見(jiàn),這段代碼邏輯很清晰,但是看著太復(fù)雜,下面改掉:

436ad7f8528741d681bbfce62de1bbad.png

這樣做有很多好處:

- 避免輸入的錯(cuò)誤。

- 縮短了行的寬度,更容易快速閱讀。

- 如果類名字改變了,只需要改變一個(gè)地方就行了。

3. 變量與可讀性

l 減少變量,即那些妨礙的變量。通過(guò)離開處理結(jié)果來(lái)消除“中間結(jié)果”的變量。

l 減少每個(gè)變量的作用域,越小越好。

l 只寫一次的變量更好,那些只設(shè)置一次值的變量(或者 const 、final 、常量)使得代碼更容易理解。

4. 抽取不相關(guān)的子問(wèn)題

l 積極地發(fā)現(xiàn)并抽取不相關(guān)的子邏輯:

- 看看某個(gè)函數(shù)或代碼塊,問(wèn)問(wèn)自己:這段代碼的高層次的目標(biāo)是什么?

- 對(duì)于每一行代碼,問(wèn)下:它是為了目標(biāo)而寫的么?

- 如果足夠的行數(shù)在解決不相關(guān)的子問(wèn)題,試圖抽取代碼到獨(dú)立函數(shù)中。

l 純工具代碼(封裝共用的函數(shù))

l 其他多用途代碼(比如頁(yè)面上數(shù)據(jù)邏輯代碼)

l 創(chuàng)建大量通用代碼(組件)

- 通用代碼很好,因?yàn)椤巴耆貜捻?xiàng)目的其他部分中解耦出來(lái)”。

l 項(xiàng)目專有的功能(私有組件)

l 簡(jiǎn)化已有接口,按需重塑接口

5. 一次只做一件事

應(yīng)該把代碼組織得一次只做一件事情。如何給代碼整理碎片,下圖演示了這個(gè)過(guò)程:

8bcf6a42bfdf444fb2d5be2e5c407d91.png

6. 把想法變成代碼

如果有好的想法,則可以實(shí)現(xiàn)為代碼,但需要注意以下幾點(diǎn):

l 清楚地描述邏輯

l 可了解相關(guān)函數(shù)庫(kù),以便減少代碼量

l 把這個(gè)方法應(yīng)用于更大的問(wèn)題

l 用自然語(yǔ)言描述解決方案

l 遞歸地使用這種方法

7. 少寫代碼

“最好讀的代碼就是沒(méi)有代碼”,在收到一個(gè)需求的時(shí)候,要質(zhì)疑和拆分你的需求,用小的代碼庫(kù),去替代大的代碼庫(kù);刪除沒(méi)有用的代碼,簡(jiǎn)化實(shí)現(xiàn)過(guò)程;熟悉你周邊的庫(kù),了解最優(yōu)庫(kù);對(duì)于一些庫(kù)的重用,可以極大的節(jié)省時(shí)間。

總結(jié)

以上就是關(guān)于可讀性代碼的建議和實(shí)現(xiàn)方式,好的代碼不僅閱讀輕松,維護(hù)起來(lái)也是事半功倍。養(yǎng)成好的書寫處理習(xí)慣,會(huì)為我們的工作和學(xué)習(xí)帶來(lái)極大的便利。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RAKsmart企業(yè)服務(wù)器上部署DeepSeek編寫運(yùn)行代碼

    在RAKsmart企業(yè)服務(wù)器上部署并運(yùn)行DeepSeek模型的代碼示例和詳細(xì)步驟。假設(shè)使用 Python + Transformers庫(kù) + FastAPI實(shí)現(xiàn)一個(gè)基礎(chǔ)的AI服務(wù)。主機(jī)推薦小編為您整理發(fā)布RAKsmart企業(yè)服務(wù)器上部署DeepSeek編寫運(yùn)行
    的頭像 發(fā)表于 03-25 10:39 ?291次閱讀

    BEM+Sass結(jié)合使用的最佳實(shí)踐

    BEM(Block Element Modifier)與Sass的結(jié)合使用是前端開發(fā)中一種高效且規(guī)范的樣式編寫方式。以下是一些最佳實(shí)踐,旨在幫助開發(fā)者更好地利用這兩種工具來(lái)提高代碼可讀性、可維護(hù)
    的頭像 發(fā)表于 02-12 16:50 ?562次閱讀

    如何提高嵌入式代碼質(zhì)量?

    的錯(cuò)誤和改進(jìn)點(diǎn),提高代碼可讀性和健壯。 4. 版本控制:使用版本控制系統(tǒng)如Git,可以追蹤代碼變更并輕松進(jìn)行團(tuán)隊(duì)協(xié)作,確保每個(gè)版本都是可控和可重現(xiàn)的。 優(yōu)化性能和資源利用率
    發(fā)表于 01-15 10:48

    EE-134:為SHARC系列編寫C兼容匯編代碼中斷處理程序

    電子發(fā)燒友網(wǎng)站提供《EE-134:為SHARC系列編寫C兼容匯編代碼中斷處理程序.pdf》資料免費(fèi)下載
    發(fā)表于 01-07 13:58 ?0次下載
    EE-134:為SHARC系列<b class='flag-5'>編寫</b>C兼容匯編<b class='flag-5'>代碼</b>中斷處理程序

    gitee 支持的編程語(yǔ)言有哪些

    Gitee 支持的常見(jiàn)編程語(yǔ)言: Python :一種廣泛使用的高級(jí)編程語(yǔ)言,以其清晰的語(yǔ)法和代碼可讀性而聞名。 Java :一種面向?qū)ο蟮木幊陶Z(yǔ)言,被廣泛用于企業(yè)級(jí)應(yīng)用開發(fā)。 C++ :一種通用的、靜態(tài)類型的、大小寫敏感的、自由格式的編程語(yǔ)言,支持過(guò)程化編程、面向?qū)ο?/div>
    的頭像 發(fā)表于 01-06 09:50 ?658次閱讀

    西門子流量累計(jì)FB塊介紹

    成一個(gè)易于使用的模塊,從而簡(jiǎn)化了編程工作,提高了代碼可讀性和維護(hù)。 ?? 一、意義 ?? 簡(jiǎn)化編程 :通過(guò)使用預(yù)先編寫好的FB塊,工程師可以快速地實(shí)現(xiàn)流量累計(jì)功能,而無(wú)需從頭
    的頭像 發(fā)表于 12-19 10:28 ?1459次閱讀
    西門子流量累計(jì)FB塊介紹

    Verilog與VHDL的比較 Verilog HDL編程技巧

    理解。 VHDL :VHDL 的語(yǔ)法更接近于 Ada 語(yǔ)言,它是一種更正式的語(yǔ)言,具有豐富的數(shù)據(jù)類型和結(jié)構(gòu)。VHDL 支持?jǐn)?shù)據(jù)流、行為和結(jié)構(gòu)化三種描述方式。 2. 可讀性和可維護(hù) Verilog
    的頭像 發(fā)表于 12-17 09:44 ?1658次閱讀

    Java代碼之美,從遵循樣式規(guī)范開始

    作者:京東零售 劉仲偉 在軟件開發(fā)的世界里,代碼不僅是程序的基石,更是程序員交流的通用語(yǔ)言。而Java,作為一門廣泛應(yīng)用于企業(yè)級(jí)應(yīng)用的編程語(yǔ)言,其代碼可讀性和一致對(duì)于項(xiàng)目的長(zhǎng)期維護(hù)
    的頭像 發(fā)表于 11-27 11:42 ?558次閱讀
    Java<b class='flag-5'>代碼</b>之美,從遵循樣式規(guī)范開始

    對(duì)比Python與Java編程語(yǔ)言

    使得編寫代碼更加靈活,但也可能導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。 Java 語(yǔ)法相對(duì)冗長(zhǎng),需要顯式聲明變量類型,增加了代碼可讀性和安全。 靜態(tài)類型系統(tǒng)在編
    的頭像 發(fā)表于 11-15 09:31 ?1014次閱讀

    AIC3254的miniDSP編寫代碼編寫C5502代碼有什么區(qū)別?

    問(wèn)題:AIC3254的miniDSP編寫代碼編寫C5502代碼有什么區(qū)別,執(zhí)行速度和代碼量來(lái)進(jìn)行分析吧,謝謝回復(fù)
    發(fā)表于 11-06 07:22

    怎么樣提高verilog代碼編寫水平?

    ,共同進(jìn)步。 歡迎加入FPGA技術(shù)微信交流群14群! 交流問(wèn)題(一) Q:怎么樣提高verilog代碼編寫水平?Cpu 從事DFT工作。目前僅限于寫一些簡(jiǎn)單模塊。自學(xué)的話如何提高verilog編寫水平
    發(fā)表于 09-25 20:05

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回源代碼的過(guò)程。反編譯后的代碼可以進(jìn)行修改,但是需要注意,反編譯代碼的質(zhì)量和可讀性可能會(huì)受到原始編譯
    的頭像 發(fā)表于 09-02 11:00 ?1248次閱讀

    hex可以轉(zhuǎn)成源代碼

    ,可以通過(guò)以下幾種方法嘗試獲取源代碼的近似形式: 反匯編 : 使用反匯編工具可以將Hex文件中的機(jī)器碼轉(zhuǎn)換回匯編語(yǔ)言。匯編語(yǔ)言是一種低級(jí)語(yǔ)言,它更接近于機(jī)器碼,但仍然具有一定的可讀性。 通過(guò)反匯編得到的匯編代碼可以提供程序
    的頭像 發(fā)表于 09-02 10:41 ?2223次閱讀

    深入淺出系列之代碼可讀性

    ”,這是對(duì)我最大的鼓勵(lì)。 一、老生常談,到底啥是可讀性 一句話:見(jiàn)名知其義。有人說(shuō)好的代碼必然有清晰完整的注釋,我不否認(rèn);也有人說(shuō)代碼即注釋,是代碼簡(jiǎn)潔之道的最高境界,我也不否認(rèn)。但我
    的頭像 發(fā)表于 08-09 16:00 ?515次閱讀

    軟件設(shè)計(jì)哲學(xué):新“代碼整潔之道”

    工作三年以來(lái)一直對(duì)寫出設(shè)計(jì)優(yōu)雅且可讀性較好的代碼抱有執(zhí)念,最初接觸到的關(guān)于代碼整潔和軟件設(shè)計(jì)的書是《代碼整潔之道》,這本書大概在我入職半年時(shí)讀完,并在很長(zhǎng)的一段時(shí)間內(nèi)將其中談到的“每個(gè)
    的頭像 發(fā)表于 07-22 12:18 ?484次閱讀
    軟件設(shè)計(jì)哲學(xué):新“<b class='flag-5'>代碼</b>整潔之道”
    主站蜘蛛池模板: 你懂得在线网站 | 亚洲欧美高清 | 国产美女久久久久 | 日韩毛片免费视频一级特黄 | 日本色免费 | 欧美破处视频在线 | 色九| 午夜视频久久 | 久久久福利 | 激情婷婷综合久久久久 | 奇米影视四色首页手机在线 | 欧美色图888 | 亚洲一级毛片免费观看 | 特级毛片aaaaaa蜜桃 | 99pao在线视频精品免费 | 天堂网视频 | 性殴美高清视频 | 欧美黄色三级视频 | 国内一国产农村妇女一级毛片 | 国产精品成人aaaaa网站 | 亚洲第一视频在线播放 | 男人j进女人j的一进一出视频 | 婷婷激情亚洲 | 欧美色图首页 | 国产真实偷乱视频在线观看 | 免费高清一级欧美片在线观看 | 一级特黄aaa免费 | 国产午夜毛片v一区二区三区 | 中国一级特黄真人毛片 | 婷婷月| 在线天堂中文在线资源网 | 一级特黄aa大片 | www.av免费| www.色多多 | 久久天天综合 | 精品国产第一页 | 欧美色穴 | 777精品视频| 色综合日韩 | 三级日韩| 天堂网www中文天堂在线 |