91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何編寫可讀性代碼

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

掃碼添加小助手

加入工程師交流群

編寫可讀性代碼


作者:極鏈科技 湯紅燕

什么叫可讀性代碼?

簡單來說,就是易于理解、耗腦時間少、可維護性較高的代碼。

編寫可讀性代碼

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

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

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

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

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

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

9442a3755ac247069a2879da26566215.png

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

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

對于一個變量包含十六進制字符串,命名為 let id,但是為何不命名成 let hex_id?

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

4. 名字應該有多長

在編寫代碼取名的時候總會有一些疑問,我的定義名稱該多長才合適?可以遵循以下幾點:

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

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

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

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

不會讓人誤解的名字

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

為了便于處理以上情況,有以下幾點建議:

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

l 使用 first 和 last 來表示包含的范圍

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

l 給布爾值命名

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

這時候可以用 need_password 或 user_is_authenticated 這樣的名字來代替;

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

審美

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

1. 使用一致的布局,讓讀者很快就習慣這種風格。

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

3. 把相關的代碼行分組,形成代碼塊。

該寫怎樣的注釋

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

2. 不要為了注釋而注釋

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

4. 加入“導演評論”,你可以在代碼中加入注釋來記錄你對代碼有價值的見解。

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

b2e97cee7cd1459086c5b06654154d9f.png

6. 給常量加注釋(有些常量不需要注釋,因為它們的名字已經(jīng)很清楚,但很多常量可以通過加注釋得以改進)

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

e847d704d9574e7b836ab5fa202b9ef9.png

寫出言簡意賅的注釋

1. 讓注釋保持緊湊

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

3. 潤色粗糙的句子

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

比如用輸入/輸出例子來說明特別的情況

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

248217c7228d4cb5b35e3bdaa7d95619.png

5. 聲明代碼的意圖

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

比如:

e7090c398a35419b852febc7a4436cbb.png

6. 采用信息含量高的詞

l 避免使用代詞

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

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

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

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

l 用含義豐富的詞語

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

1. 把控制流變得易讀

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

比較左側: “被詢問”的表達式,它的值傾向于不斷變化

比較右側: 用來做比較的表達式,它的值更傾向于常量

l if/else 語句塊的順序

首先處理正邏輯而不是負邏輯

再處理簡單的情況

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

l ?: 表達式, 只有在簡單的情況下使用

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

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

l 最小化嵌套

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

2. 拆分超長表達式

l 用做解釋的變量

c8c164cedcb64b88b4eb5d32dc4d902f.png

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

l 拆分巨大的語句

比如:

a29c9a62cd6e4ccca8a110e99b13a356.png

顯而易見,這段代碼邏輯很清晰,但是看著太復雜,下面改掉:

436ad7f8528741d681bbfce62de1bbad.png

這樣做有很多好處:

- 避免輸入的錯誤。

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

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

3. 變量與可讀性

l 減少變量,即那些妨礙的變量。通過離開處理結果來消除“中間結果”的變量。

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

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

4. 抽取不相關的子問題

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

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

- 對于每一行代碼,問下:它是為了目標而寫的么?

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

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

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

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

- 通用代碼很好,因為“完全地從項目的其他部分中解耦出來”。

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

l 簡化已有接口,按需重塑接口

5. 一次只做一件事

應該把代碼組織得一次只做一件事情。如何給代碼整理碎片,下圖演示了這個過程:

8bcf6a42bfdf444fb2d5be2e5c407d91.png

6. 把想法變成代碼

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

l 清楚地描述邏輯

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

l 把這個方法應用于更大的問題

l 用自然語言描述解決方案

l 遞歸地使用這種方法

7. 少寫代碼

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

總結

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


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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【「Altium Designer 25 電路設計精進實踐」閱讀體驗】總體感受

    Designer25的電路設計教材,內容豐富,具有很多的樣例。 陳之炎老師層編寫過AD22的教材,具有非常豐富的開發(fā)經(jīng)驗和編寫經(jīng)驗,似的本書具有較好的可讀性。 書籍是彩色印刷,圖片精美,關鍵的步驟和重點的地方都采用
    發(fā)表于 02-22 18:06

    Linux內核編碼風格權威總結:從縮進到底層設計,讓你的代碼更“內核味”

    作為全球最龐大的開源項目之一,Linux 內核的代碼量早已突破千萬行。要讓來自世界各地的開發(fā)者高效協(xié)作,一套統(tǒng)一、嚴謹?shù)木幋a風格必不可少 —— 這不僅是 “代碼顏值” 的要求,更是可讀性、可維護
    的頭像 發(fā)表于 02-09 16:29 ?123次閱讀
    Linux內核編碼風格權威總結:從縮進到底層設計,讓你的<b class='flag-5'>代碼</b>更“內核味”

    C語言中一些令人震驚的結構介紹

    = a++ + b; 因此, 這段代碼持行后a = 6, b = 7, c = 12。 如果你知道答案,或猜出正確答案,做得好。 如果你不知道答案,我也不把這個當作問題。我發(fā)現(xiàn)這個問題的最大好處是這是一個關于代碼編寫
    發(fā)表于 12-23 08:15

    C語言的編程技巧

    代碼的靈活性和可維護。 ?6、使用合適的條件語句?:選擇合適的條件語句(如if、else if、else、switch)可以提高程序的執(zhí)行效率和可讀性。? ?7、模塊化和分層開發(fā)?:采用模塊化
    發(fā)表于 11-27 06:46

    HarmonyOS應用代碼混淆技術方案

    代碼混淆技術可以增加代碼的復雜和模糊,從而提高攻擊者分析代碼的難度。
    的頭像 發(fā)表于 11-21 16:17 ?5604次閱讀
    HarmonyOS應用<b class='flag-5'>代碼</b>混淆技術方案

    匯編語言的起源

    (opcode),比如加法指令就是00000011。編譯器的作用,就是將高級語言寫好的程序,翻譯成一條條操作碼。 對于人類來說,二進制程序是不可讀的,根本看不出來機器干了什么。為了解決可讀性的問題,以及偶爾
    發(fā)表于 11-20 07:19

    HarmonyOSAI編程編輯區(qū)代碼生成

    CodeGenie提供Inline Edit能力,支持在編輯窗口中通過自然語言進行問答,基于上下文智能生成代碼片段,提升代碼可讀性。 當前有以下兩種方式喚醒Inline Edit對話框: 在
    發(fā)表于 08-20 15:24

    RTOS SDK的canmv_net_mgmt網(wǎng)絡模塊如何編寫連接代碼?

    從最近源碼更新了一次后,以前的可執(zhí)行文件使用出錯了,請問有沒有大哥知道新一版源碼怎么編寫代碼進行操作網(wǎng)絡模塊canmv_net_mgmt。 或者是操作canmv_net_mgmt的頭文件都是哪些,可以參考些什么
    發(fā)表于 07-25 08:14

    深入理解C語言:函數(shù)—編程中的“積木塊”藝術

    鍵問題:1.避免重復:將重復代碼封裝成函數(shù),實現(xiàn)“一處修改,全局生效”,讓維護更高效。2.邏輯清晰:每個函數(shù)專注一個特定任務(如計算、顯示等),代碼可讀性大幅提升。3.
    的頭像 發(fā)表于 06-30 17:26 ?1859次閱讀
    深入理解C語言:函數(shù)—編程中的“積木塊”藝術

    如何在恩智浦FRDM開發(fā)平臺上實現(xiàn)代碼的高效復用

    從零開始評估微控制器可能充滿挑戰(zhàn)。即使在編寫代碼之前,開發(fā)人員也需要深入了解想要使用的外設的特性。它們是否能夠在不同產(chǎn)品間以一致方式運行?這些所謂的可移植究竟有多可靠?面對這些不確定性,創(chuàng)建真正可移植的
    的頭像 發(fā)表于 05-27 14:35 ?1025次閱讀
    如何在恩智浦FRDM開發(fā)平臺上實現(xiàn)<b class='flag-5'>代碼</b>的高效復用

    陽光倒灌高準直太陽光模擬器在汽車HUD雜散光分析及光學性能驗證關鍵作用

    HUD需在復雜光照環(huán)境(如強日光)下清晰投射信息,但擋風玻璃、光學元件或屏幕的反射/散射會形成雜散光(如重影、光暈),嚴重降低對比度和可讀性,甚至干擾駕駛安全。
    的頭像 發(fā)表于 04-27 16:39 ?666次閱讀
    陽光倒灌高準直太陽光模擬器在汽車HUD雜散光分析及光學性能驗證關鍵作用

    GC9A01-TFT屏幕驅動(整理有stm32/51單片機/arduino等驅動代碼

    不久前我們收到用戶反饋問題中,多次反饋各種不同型號的屏幕驅動不起來,從0開始編寫代碼花費大量時間,也有不少初次學習驅動屏幕代碼編寫經(jīng)驗過少等問題,為此我們決定以文章的形式發(fā)布出來分享相
    的頭像 發(fā)表于 04-25 11:29 ?1745次閱讀
    GC9A01-TFT屏幕驅動(整理有stm32/51單片機/arduino等驅動<b class='flag-5'>代碼</b>)

    如何成為一名合格的KaihongOS北向應用開發(fā)工程師

    KaihongOS 的 UI 開發(fā)框架,了解如何構建用戶界面。 ArkTS: ArkTS 是基于 TypeScript 的超集,學習ArkTS在KaihongOS中的特性,使代碼更加簡潔,提高代碼可讀性和可維護
    發(fā)表于 04-23 06:46

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

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

    MCXN947使用ADC并編寫代碼,總是報警告是怎么回事?

    我使用 MCXN947,我想使用 ADC 并編寫代碼,但警告總是發(fā)生。然后我創(chuàng)建了一個新項目進行調試,它仍然發(fā)生了。 我試著打掃,但還是沒用。 警告:無法將 \'main\' 從主機編碼 (CP1252) 轉換為 UTF-32。 這通常不會發(fā)生,請?zhí)峤?bug 報告。
    發(fā)表于 03-20 08:17