chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

為什么要寫糟糕的代碼?什么是整潔的代碼?

汽車ECU開發(fā) ? 來源:稀土掘金 ? 作者:unebrise ? 2022-11-21 10:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

寫在前面

這個文章本來沒打算寫,直到經(jīng)歷了幾次代碼評審會議之后,我意識到自己編碼方式還不成系統(tǒng),仍然需要進行系統(tǒng)化的學習,掌握前輩們總結(jié)出的最適用的規(guī)律無疑是一種好的方式。恰好很早之前就收藏了這本代碼整潔之道,便決定趁著閑暇之際閱讀總結(jié)一下,如果想系統(tǒng)學習的話建議還是讀書,本文檔只是作為自己的記錄用。

一個人的職業(yè)素養(yǎng)體現(xiàn)在解決問題的方式、步驟以及反思的程度,而不在于這個問題本身的難度。思考一個問題:一個技術人員要具備哪些素質(zhì)可以被認為是專業(yè)人員呢?如果還不具備需要如何改變才能被視為專業(yè)人士呢?

整潔代碼

一、為什么要寫糟糕的代碼?

每個人都有自己的原因,相信很多人都會想著等有時間的話再進行代碼優(yōu)化,但是要記住一句話:稍后等于永不。

二、混亂代碼的代價?

后續(xù)難以維護和修改,生產(chǎn)力和時間呈現(xiàn)負相關。

三、什么是整潔的代碼?

整潔的代碼只做好一件事:每個類、每個函數(shù)、每個模塊都專注于一事,完全不受四周細節(jié)的干擾和污染。

更全面的概括是:減少重復代碼、提高表達力、提早構建簡單抽象。

更具體的實現(xiàn):請接著往下看吧!

更好的變量命名

一、見名知意

二、抽象工廠:接口不要命名為IShapeFactory,前導字母對于用戶來說其實是干擾,用戶只需要知道那是個抽象工廠,建議使用CShapeFactory或許體驗更好

三、類名要用名詞,方法要用動詞,詞性相近的get、fetch這種詞不應出現(xiàn)在一起,可以添加后綴getNumber、fetchData實現(xiàn)相同的效果

四、別害怕長名字:使用描述性的名稱,哪怕比較長也比短而令人費解的名稱好

更好的函數(shù)

一、函數(shù)的結(jié)構本質(zhì)上要短小、再短小,以不容納if/else if/else嵌套結(jié)構為目標

二、只做一件事:正如前面所說,函數(shù)只做好一件事就足夠了,標志就是“看是否還能拆出一個函數(shù),該函數(shù)不僅只是單純地重新詮釋其實現(xiàn)”

三、每個函數(shù)一個抽象層級:代碼一般是“自頂向下”的閱讀順序,每個函數(shù)后面跟著的應該是下一抽象層級的函數(shù)

[抽象層級:getHtml函數(shù)位于較高抽象層,pagePathName = pathParser.render(pagePath)位于中間抽象層,.append(" ")則位于較低抽象層]

四、switch語句:天生就需要做N件事,但是可以將其放置在較低抽象層級,但是當出現(xiàn)新的類型時會違反“單一權責原則、開放閉合原則”,此時最好創(chuàng)建多態(tài)對象

//原文中:對于每個case分支進行單獨處理,添加新類型不必修改原來的代碼增加新的處理類即可
functiongetName(name){
switch(name){
case'ming':
returnnewClassMing(name);
case'hu':
returnnewClassHu(name);
case'uzi':
returnnewClassUzi(name);
default:
thrownewClassCommon(name);
}
}

//我更喜歡用另一種方法:修改只需要在對象里修改即可,且提高了函數(shù)的簡潔性
constnameCollectionUtils={
 ming:newClassMing('ming');
hu:newClassHu('hu');
uzi:newClassUzi('uzi');
}
functiongetName(name){
returnnameCollectionUtils.hasOwn(name)?nameCollectionUtils[name]:newClassCommon(name)
}

五、函數(shù)參數(shù)最多不多于兩個:包括輸入?yún)?shù)和輸出參數(shù)

六、無副作用:函數(shù)內(nèi)部不要做出未能預期的改動,不要對外部產(chǎn)生影響

七、使用異常替代返回錯誤碼:使用try...catch替代多層級的if嵌套,永遠走在主路上,不要過多考慮邊界,這樣可以讓你一直保持思維連貫

八、錯誤處理單獨抽出:這一條我認為可以視情況而定,畢竟抽出僅僅是為了美觀

九、別重復:多個函數(shù)使用的相同邏輯的代碼一定要抽出,可以參考面向?qū)ο蟮幕悾岸碎_發(fā)中的面向組件編程、面向模塊編程也是這種思想

注釋&格式

每個人有每個人的習慣,采取一些通用準則即可,畢竟如何太過離譜在公司是會挨打的~

錯誤處理

也沒有什么固定的章程,最好采取try...catch優(yōu)先的原則

邊界

總結(jié)而言,使用自己可以控制的代碼

單元測試

現(xiàn)在的互聯(lián)網(wǎng)企業(yè)絕大多數(shù)都是敏捷式開發(fā),很少有能遵守測試驅(qū)動原則的公司,而且為了保證進度很少會有技術團隊會去要求單元測試,所以這一條仁者見仁吧,個人認為這一項的實際實現(xiàn)只能是一個比較美好的愿景。

一、類的組織:按照下面的順序,不要暴露出內(nèi)部屬性,利用方法達到同樣的目的

classDemoOrganization{
staticsname='sname'
privatepname='pname'
private_pname='_pname'
protectedtname='tname'

publicgetPublicName(){
returnthis.pname
}
private_getPrivateName(){
returnthis._pname
}
}

二、單一權責原則(SPR):類或模塊應有且只有一條加以修改的理由,實現(xiàn)了這個原則的類更易得到復用

三、保持內(nèi)聚性:類中定義的變量應被盡可能多的方法使用到,如果不能滿足的話就把使用到變量的函數(shù)拆分成小類

四、開放封閉原則(OCP):類應當對擴展開放,對修改封閉,通過子類化手段可以實現(xiàn)新功能的添加的同時不觸及其他類

五、依賴倒置原則(DIP):類應當依賴于抽象而不是依賴于具體細節(jié)

六、解耦:不同方法和模塊間不要互相產(chǎn)生影響,即“分而治之”、“化整為零”

系統(tǒng)

一、構造和使用分開:構造的細節(jié)應隔離與應用程序代碼之外,使用者只能獲取構造者想讓使用者獲得的東西

二、設計時要能滿足從簡單到復雜的更新迭代

迭進

總結(jié)上述,只要遵守以下原則,就可以得到一個具有良好設計的可迭進的程序:

運行所有測試

不可重復

表達了程序員的意圖

盡可能減少類和方法的數(shù)量

以上規(guī)則按重要程度排列

并發(fā)編程

首先要了解“線程”這個概念:CPU調(diào)度的最小單位,區(qū)別于“進程”是資源分配的最小單位。區(qū)別見下方表格:

分類 數(shù)據(jù)共享 消耗資源 是否影響兄弟程序 最大可擴展維度 是否有鎖
進程 多機
線程 簡單 可能影響所在進程 多核

如果說對象是過程的抽象,那么線程是調(diào)度的抽象

前端使用的js語言是瀏覽器腳本語言,最主要的用途是和用戶互動和操作DOM,這決定了js只能是單線程否則會產(chǎn)生復雜的同步問題,但是js仍然可以模擬并發(fā)執(zhí)行,具體實現(xiàn)自行查詢相關資料

當前還沒學習到并發(fā)編程的語言,以后碰到再補充學習

重構

這個模塊我認為是最重要的模塊,甚至比怎么去編寫新的程序更重要,因為一個公司的沉積項目的數(shù)量是巨大的,很可能會對其中幾個甚至更多進行重構(還是因為之前代碼寫的太爛無法維護),所以重構中需要注意的點也要有一個清晰的認知。

只需要遵守一條原則:簽入的代碼比簽出的更整潔。

寫在最后

以上是我從前端角度總結(jié)的從這本書中得到的一些收獲,但是每個人都會有每個人自己的理解,所以還是推薦自己去讀一遍這本書,不需要多精細只要熟悉一下這些概念提出來的場景,相信會有更大的收獲。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SPR
    SPR
    +關注

    關注

    0

    文章

    20

    瀏覽量

    11700
  • DIP
    DIP
    +關注

    關注

    0

    文章

    253

    瀏覽量

    31509
  • OCP
    OCP
    +關注

    關注

    0

    文章

    81

    瀏覽量

    16961
  • DOM
    DOM
    +關注

    關注

    0

    文章

    18

    瀏覽量

    9796

原文標題:常說的代碼整潔到底是什么?

文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發(fā)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    外殼防護等級(IP代碼)全解讀

    什么是外殼防護等級(IP代碼)IP代碼,全稱為“國際防護等級”,是由國際電工委員會制定的全球通用標準。這一標準旨在為電子設備外殼的防護能力提供一個清晰、統(tǒng)一的評判體系。簡單來說,IP代碼就是電子設備
    的頭像 發(fā)表于 10-14 12:13 ?48次閱讀
    外殼防護等級(IP<b class='flag-5'>代碼</b>)全解讀

    單模光纜型號字母代碼及其含義

    單模光纜的型號字母代碼主要用于標識光纜的分類、結(jié)構、護層及光纖類型等關鍵信息,以下是一些常見的單模光纜型號字母代碼及其含義: 一、光纜分類代碼 GY:通信用室外光纜,這是最常見的室外光纜分類
    的頭像 發(fā)表于 07-17 10:27 ?1526次閱讀

    OLED代碼分享

    OLED代碼
    發(fā)表于 04-29 17:04 ?1次下載

    分析C語言代碼結(jié)構的設計問題

    來分析一個C語言代碼結(jié)構的設計問題。 這段代碼,使用了兩次malloc,分別給 p1 和 p2 申請了內(nèi)存。用完后,內(nèi)存釋放,防止內(nèi)存泄漏。 大家覺得,這樣的代碼設計有沒有問題。 代碼
    的頭像 發(fā)表于 02-11 09:31 ?544次閱讀

    基于Django89的web框架代碼

    基于Django89的web框架代碼,超詳細
    發(fā)表于 02-10 15:38 ?0次下載

    代碼與傳統(tǒng)開發(fā)的區(qū)別 低代碼與無代碼開發(fā)的區(qū)別

    在軟件開發(fā)領域,傳統(tǒng)開發(fā)、低代碼開發(fā)以及無代碼開發(fā)是三種不同的開發(fā)方式,每種方式都有其獨特的優(yōu)勢和適用場景。 一、低代碼開發(fā)與傳統(tǒng)開發(fā)的區(qū)別 低代碼開發(fā)是一種新興的應用程序開發(fā)方法,旨
    的頭像 發(fā)表于 01-31 10:48 ?881次閱讀

    村田電容標簽材質(zhì)代碼如何看?

    村田電容的標簽上通常包含一系列代碼,用以表示電容的具體參數(shù)和特性。以下是如何解讀村田電容標簽上的材質(zhì)代碼的步驟: ?一、識別基本型號 村田電容的型號通常以字母開頭,如GRM、GR3、GRJ等,這些
    的頭像 發(fā)表于 01-13 14:14 ?1211次閱讀

    超級大全貼片元件代碼查詢

    如題:超級大全貼片元件代碼查詢
    發(fā)表于 01-08 13:49 ?37次下載

    代碼在敏捷開發(fā)中的應用

    代碼平臺的定義 低代碼平臺提供了一個可視化的、拖放式的用戶界面,允許開發(fā)者通過圖形化的方式快速構建應用程序,而無需編寫大量的代碼。這些平臺通常包括預構建的模板、組件和邏輯模塊,使得開發(fā)人員可以專注
    的頭像 發(fā)表于 01-07 09:58 ?655次閱讀

    三星貼片電容識別容值代碼方法

    三星貼片電容的容值代碼識別方法主要基于其型號編碼中的特定部分。以下是一個詳細的識別步驟和說明: ? ?一、識別容值代碼的基本步驟 ? ?查看型號編碼: ? ?三星貼片電容的型號編碼通常包含多個部分
    的頭像 發(fā)表于 12-13 16:17 ?1132次閱讀
    三星貼片電容識別容值<b class='flag-5'>代碼</b>方法

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

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

    SQL錯誤代碼及解決方案

    在SQL數(shù)據(jù)庫開發(fā)和管理中,常見的錯誤代碼及其解決方案可以歸納如下: 一、語法錯誤(Syntax Errors) 錯誤代碼 :無特定代碼,但通常會在錯誤消息中明確指出是語法錯誤。 原因 :SQL語句
    的頭像 發(fā)表于 11-19 10:21 ?9647次閱讀

    Gmapping源代碼

    Gmapping源代碼.docx
    發(fā)表于 11-16 13:42 ?0次下載

    如何自動生成verilog代碼

    介紹幾種自動生成verilog代碼的方法。
    的頭像 發(fā)表于 11-05 11:45 ?1330次閱讀
    如何自動生成verilog<b class='flag-5'>代碼</b>

    昂洋科技談國巨貼片電阻的尺寸代碼和選購

    國巨貼片電阻是一種廣泛應用于電子電路中的小型電阻,其尺寸代碼和選購要點對于確保電路性能和可靠性至關重要。以下是對國巨貼片電阻尺寸代碼和選購的詳細解答: 一、國巨貼片電阻的尺寸代碼 國巨貼片電阻的尺寸
    的頭像 發(fā)表于 11-01 15:21 ?841次閱讀
    昂洋科技談國巨貼片電阻的尺寸<b class='flag-5'>代碼</b>和選購