日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

寫在前面

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

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

整潔代碼

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

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

二、混亂代碼的代價(jià)?

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

三、什么是整潔的代碼?

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

更全面的概括是:減少重復(fù)代碼、提高表達(dá)力、提早構(gòu)建簡(jiǎn)單抽象。

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

更好的變量命名

一、見(jiàn)名知意

二、抽象工廠:接口不要命名為IShapeFactory,前導(dǎo)字母對(duì)于用戶來(lái)說(shuō)其實(shí)是干擾,用戶只需要知道那是個(gè)抽象工廠,建議使用CShapeFactory或許體驗(yàn)更好

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

四、別害怕長(zhǎng)名字:使用描述性的名稱,哪怕比較長(zhǎng)也比短而令人費(fèi)解的名稱好

更好的函數(shù)

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

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

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

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

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

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

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

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

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

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

八、錯(cuò)誤處理單獨(dú)抽出:這一條我認(rèn)為可以視情況而定,畢竟抽出僅僅是為了美觀

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

注釋&格式

每個(gè)人有每個(gè)人的習(xí)慣,采取一些通用準(zhǔn)則即可,畢竟如何太過(guò)離譜在公司是會(huì)挨打的~

錯(cuò)誤處理

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

邊界

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

單元測(cè)試

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

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

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

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

二、單一權(quán)責(zé)原則(SPR):類或模塊應(yīng)有且只有一條加以修改的理由,實(shí)現(xiàn)了這個(gè)原則的類更易得到復(fù)用

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

四、開(kāi)放封閉原則(OCP):類應(yīng)當(dāng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改封閉,通過(guò)子類化手段可以實(shí)現(xiàn)新功能的添加的同時(shí)不觸及其他類

五、依賴倒置原則(DIP):類應(yīng)當(dāng)依賴于抽象而不是依賴于具體細(xì)節(jié)

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

系統(tǒng)

一、構(gòu)造和使用分開(kāi):構(gòu)造的細(xì)節(jié)應(yīng)隔離與應(yīng)用程序代碼之外,使用者只能獲取構(gòu)造者想讓使用者獲得的東西

二、設(shè)計(jì)時(shí)要能滿足從簡(jiǎn)單到復(fù)雜的更新迭代

迭進(jìn)

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

運(yùn)行所有測(cè)試

不可重復(fù)

表達(dá)了程序員的意圖

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

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

并發(fā)編程

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

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

如果說(shuō)對(duì)象是過(guò)程的抽象,那么線程是調(diào)度的抽象

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

當(dāng)前還沒(méi)學(xué)習(xí)到并發(fā)編程的語(yǔ)言,以后碰到再補(bǔ)充學(xué)習(xí)

重構(gòu)

這個(gè)模塊我認(rèn)為是最重要的模塊,甚至比怎么去編寫新的程序更重要,因?yàn)橐粋€(gè)公司的沉積項(xiàng)目的數(shù)量是巨大的,很可能會(huì)對(duì)其中幾個(gè)甚至更多進(jìn)行重構(gòu)(還是因?yàn)橹按a寫的太爛無(wú)法維護(hù)),所以重構(gòu)中需要注意的點(diǎn)也要有一個(gè)清晰的認(rèn)知。

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

寫在最后

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






審核編輯:劉清

聲明:本文內(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)投訴
  • SPR
    SPR
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    11766
  • DIP
    DIP
    +關(guān)注

    關(guān)注

    0

    文章

    256

    瀏覽量

    32094
  • OCP
    OCP
    +關(guān)注

    關(guān)注

    0

    文章

    85

    瀏覽量

    17135
  • DOM
    DOM
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    9880

原文標(biāo)題:常說(shuō)的代碼整潔到底是什么?

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    STM32N6 在 PSRAM 上運(yùn)行代碼的調(diào)試

    1. 引言STM32N6 項(xiàng)目中,用戶代碼可能會(huì)比較大,此時(shí)僅用內(nèi)部 SRAM 并不能滿足用代碼運(yùn)行需求。那么,將代碼放置到 PSRAM 上運(yùn)行也是個(gè)不錯(cuò)的選擇。2. 問(wèn)題2.1. 問(wèn)題詳情客戶在
    發(fā)表于 04-15 16:02 ?0次下載

    安川伺服驅(qū)動(dòng)器警報(bào)代碼說(shuō)明

    安川伺服驅(qū)動(dòng)器的警報(bào)代碼通常以 A 開(kāi)頭(表示警報(bào))或 CPF 開(kāi)頭(表示操作器通訊錯(cuò)誤),后面跟隨三位數(shù)字或字母組合。每個(gè)代碼都對(duì)應(yīng)特定的故障原因,幫助您快速定位問(wèn)題。 為了方便您查閱,我將常見(jiàn)
    的頭像 發(fā)表于 03-13 07:35 ?1963次閱讀
    安川伺服驅(qū)動(dòng)器警報(bào)<b class='flag-5'>代碼</b>說(shuō)明

    SonarQube代碼質(zhì)量管理平臺(tái)詳解

    代碼質(zhì)量問(wèn)題是技術(shù)債務(wù)的主要來(lái)源。一個(gè)未被發(fā)現(xiàn)的空指針異??赡茉谏a(chǎn)環(huán)境導(dǎo)致服務(wù)崩潰,一段存在SQL注入漏洞的代碼可能讓整個(gè)數(shù)據(jù)庫(kù)暴露在攻擊者面前。傳統(tǒng)的Code Review依賴人工審查,效率低下且容易遺漏。
    的頭像 發(fā)表于 03-11 09:40 ?435次閱讀

    AI代碼之爭(zhēng)忽略了什么

    人工智能的興起讓 COBOL 重新成為話題焦點(diǎn),市場(chǎng)上也涌現(xiàn)出不少號(hào)稱能轉(zhuǎn)換遺留代碼、破解現(xiàn)代化難題的工具。但關(guān)鍵在于厘清這究竟意味著什么,以及它不包含什么。代碼轉(zhuǎn)換是一回事,平臺(tái)現(xiàn)代化則完全是另一碼事。這兩者并非同一概念,而橫亙其間的鴻溝,恰恰是大多數(shù)企業(yè)遇到麻煩的地方
    的頭像 發(fā)表于 03-02 15:20 ?731次閱讀

    分析嵌入式軟件代碼的漏洞-代碼注入

    隨著互聯(lián)網(wǎng)的發(fā)展,嵌入式設(shè)備正分布在一個(gè)充滿可以被攻擊者利用的源代碼級(jí)安全漏洞的環(huán)境中。 因此,嵌入式軟件開(kāi)發(fā)人員應(yīng)該了解不同類型的安全漏洞——特別是代碼注入。 術(shù)語(yǔ)“代碼注入”意味著對(duì)程序的常規(guī)
    發(fā)表于 12-22 12:53

    電力調(diào)整器常見(jiàn)故障代碼

    電力調(diào)整器(又稱晶閘管調(diào)功器)的故障代碼因品牌和型號(hào)而異,沒(méi)有一個(gè)完全統(tǒng)一的標(biāo)準(zhǔn),但核心的保護(hù)功能是相似的。下表為你整理了合泉TM三相系列不同編碼系統(tǒng)中常見(jiàn)的故障代碼及其含義。
    的頭像 發(fā)表于 12-16 09:41 ?726次閱讀
    電力調(diào)整器常見(jiàn)故障<b class='flag-5'>代碼</b>

    HarmonyOS應(yīng)用代碼混淆技術(shù)方案

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

    一段ESP32S2代碼

    代碼
    的頭像 發(fā)表于 11-11 07:25 ?497次閱讀

    代碼開(kāi)發(fā)平臺(tái)推薦:2025國(guó)內(nèi)低代碼開(kāi)發(fā)平臺(tái)排名TOP10

    代碼開(kāi)發(fā)平臺(tái)排行榜 在企業(yè)數(shù)字化轉(zhuǎn)型的浪潮中,低代碼開(kāi)發(fā)平臺(tái)正逐漸成為企業(yè)實(shí)現(xiàn)高效開(kāi)發(fā)和快速迭代的重要工具。隨著技術(shù)的不斷進(jìn)步和市場(chǎng)需求的持續(xù)增長(zhǎng),低代碼開(kāi)發(fā)平臺(tái)的市場(chǎng)競(jìng)爭(zhēng)也日益激烈。以下
    的頭像 發(fā)表于 10-28 10:22 ?988次閱讀

    2025主流低代碼平臺(tái)有哪些:低代碼開(kāi)發(fā)平臺(tái)選型指南指南

    在企業(yè)數(shù)字化轉(zhuǎn)型進(jìn)入深水區(qū)的當(dāng)下,低代碼開(kāi)發(fā)平臺(tái)已從早期的“效率工具”升級(jí)為“核心基建”。其工程化能力、流程適配深度、技術(shù)延展性與行業(yè)積淀,直接決定了企業(yè)轉(zhuǎn)型的成效。據(jù)Gartner預(yù)測(cè),到2026
    的頭像 發(fā)表于 10-22 11:49 ?549次閱讀

    外殼防護(hù)等級(jí)(IP代碼)全解讀

    什么是外殼防護(hù)等級(jí)(IP代碼)IP代碼,全稱為“國(guó)際防護(hù)等級(jí)”,是由國(guó)際電工委員會(huì)制定的全球通用標(biāo)準(zhǔn)。這一標(biāo)準(zhǔn)旨在為電子設(shè)備外殼的防護(hù)能力提供一個(gè)清晰、統(tǒng)一的評(píng)判體系。簡(jiǎn)單來(lái)說(shuō),IP代碼就是電子設(shè)備
    的頭像 發(fā)表于 10-14 12:13 ?1503次閱讀
    外殼防護(hù)等級(jí)(IP<b class='flag-5'>代碼</b>)全解讀

    代碼開(kāi)發(fā)云平臺(tái)是什么?零編程零成本搭建

    代碼物聯(lián)網(wǎng)云平臺(tái)是種融合了低代碼開(kāi)發(fā)能力與物聯(lián)網(wǎng)(IoT)技術(shù)的云端服務(wù)平臺(tái),其核心目標(biāo)是大幅降低物聯(lián)網(wǎng)應(yīng)用的開(kāi)發(fā)門檻和成本,讓用戶無(wú)需專業(yè)編程經(jīng)驗(yàn),也能快速構(gòu)建、部署和管理物聯(lián)網(wǎng)系統(tǒng)。 低代碼
    的頭像 發(fā)表于 07-31 15:25 ?905次閱讀

    Ansible代碼上線項(xiàng)目實(shí)戰(zhàn)案例

    在DevOps浪潮中,自動(dòng)化部署已經(jīng)成為每個(gè)運(yùn)維工程師的必備技能。今天我將分享一個(gè)完整的Ansible代碼上線項(xiàng)目實(shí)戰(zhàn)案例,讓你的部署效率提升10倍!
    的頭像 發(fā)表于 07-24 14:03 ?779次閱讀

    單模光纜型號(hào)字母代碼及其含義

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

    代碼革命的先鋒:aiXcoder-7B模型介紹

    ? ? 國(guó)內(nèi)開(kāi)源代碼大模型 4月9日aiXcoder宣布正式開(kāi)源其7B模型Base版,僅僅過(guò)去一個(gè)禮拜,aiXcoder-7B在軟件源代碼托管服務(wù)平臺(tái)GitHub上的Star數(shù)已超過(guò)2k。同時(shí)躋身
    的頭像 發(fā)表于 05-20 14:41 ?964次閱讀
    <b class='flag-5'>代碼</b>革命的先鋒:aiXcoder-7B模型介紹
    宁德市| 兰西县| 谷城县| 扬中市| 嵊泗县| 云霄县| 丹阳市| 皋兰县| 新建县| 临江市| 石家庄市| 武川县| 三河市| 巴楚县| 都兰县| 台安县| 伊川县| 兴安盟| 湛江市| 建昌县| 泰来县| 松原市| 绥化市| 沛县| 蕲春县| 进贤县| 准格尔旗| 会同县| 余庆县| 开江县| 万山特区| 金乡县| 滦南县| 湘阴县| 钦州市| 措勤县| 琼中| 霸州市| 江城| 周口市| 淮滨县|