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

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

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

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

如何才能讓代碼更簡(jiǎn)單?

Q4MP_gh_c472c21 ? 來(lái)源:技術(shù)讓夢(mèng)想更偉大 ? 作者:李肖遙 ? 2021-03-17 09:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

不知道大家有沒(méi)有這樣的經(jīng)歷,當(dāng)你來(lái)到一個(gè)新的公司或者是接手一個(gè)新的項(xiàng)目的時(shí)候,最怕的就是看前任的代碼(外加沒(méi)有文檔),最氣人的還是,連簡(jiǎn)單的注釋都沒(méi)有多少,每當(dāng)遇到這種情況都想把前任程序員拉出來(lái)斃了。

吐槽歸吐槽,誰(shuí)的新歡不是誰(shuí)的舊愛(ài)呢?自己寫完的項(xiàng)目可能也要交給后來(lái)人,那我們可能是想被斃掉的那一位了。我仔細(xì)想了想,可能一切的鍋都得歸于我們寫代碼時(shí)候的炫技。

程序語(yǔ)言都會(huì)提供這樣的或者那樣的特性,這些特性在某些時(shí)候可以幫助我們省些代碼或者在特定情況幫助我們減少失誤帶來(lái)的影響。我相信存在即合理,然而語(yǔ)言的有些特性并不是什么好東西,很多特性都經(jīng)不起時(shí)間的考驗(yàn)(代碼的不斷迭代),最后帶來(lái)的bug可能很難找到。

還有一點(diǎn),我相信每個(gè)程序員都想要寫好代碼,或者認(rèn)為短小精悍的代碼才算好。我們也會(huì)經(jīng)常吹牛逼說(shuō):這個(gè)功能別人要寫100行,我不到一半行就搞定了。不是說(shuō)不好,但是很多情況,利用語(yǔ)言里的一些特殊構(gòu)造來(lái)縮減代碼可能會(huì)讓人難以理解。

也就是說(shuō):并不是語(yǔ)言提供什么特性,我們就一定要使用起來(lái)。實(shí)際上我們只需要其中很小的一部分功能,就能寫出優(yōu)秀的代碼,實(shí)現(xiàn)特定的功能。

下面我根據(jù)一些經(jīng)驗(yàn),針對(duì)一些有問(wèn)題的語(yǔ)言特性,規(guī)范一些代碼,為什么這樣能讓代碼更簡(jiǎn)單。

切記不要省略花括號(hào)

這個(gè)相信大家都有體會(huì),也是經(jīng)常會(huì)這么用的,比如:

if (condition1) action1();

而不是

if (condition1){ action1(); }

這種情況最起碼可以省了一兩行代碼了,而且也還算是很好看。但是這樣也會(huì)經(jīng)常引起一些意想不到的問(wèn)題,比如,在后面想要多加一句話action2()到這個(gè)if里面,有可能會(huì)把代碼改成:

if (condition1) action1(); action2();

這可不是python,當(dāng)我們都有縮進(jìn)的時(shí)候,潛意識(shí)里肯定是以為它們是在一起的,以為它們只會(huì)在if的條件為真的時(shí)候執(zhí)行,然而action2()卻其實(shí)在if外面,它會(huì)被無(wú)條件的執(zhí)行。

看似很簡(jiǎn)單的問(wèn)題,可能都很容易發(fā)現(xiàn)這個(gè)錯(cuò)誤,但實(shí)際上卻容易被忽視。只要是if-else語(yǔ)句,把花括號(hào)全都打上,就可以不用擔(dān)心漏掉了,相當(dāng)于沒(méi)這個(gè)特性,這樣就可以保持完全的一致性,減少不必要的思考。

if (condition1){ action1(); action2(); }

避免使用自增減表達(dá)式(i++,++i,i–,–i)

我們總喜歡騷操作,在我之前寫過(guò)的一篇文章中 淺析C語(yǔ)言中一些“令人吃驚”的結(jié)構(gòu) ,表明C語(yǔ)言會(huì)同意一些“令人震驚”的結(jié)構(gòu),但實(shí)際上自增減操作表達(dá)式其實(shí)是歷史遺留的設(shè)計(jì)失誤。

像是c = a+++++b;這種類型的表達(dá)式含義比較蹊蹺,非常容易弄錯(cuò),混淆纏繞在一起,把語(yǔ)義搞得烏七八糟。

這種表達(dá)式的結(jié)果可能取決于求值順序,在某種編譯器下能正確運(yùn)行,換一個(gè)編譯器就可能出現(xiàn)離奇的錯(cuò)誤了,當(dāng)然這個(gè)我并沒(méi)有驗(yàn)證,但這種看起來(lái)太騷了。

如果你想寫function(i++),你完全可以把它拆成

int t = i; i += 1; function(t);

這兩個(gè)表達(dá)式分解成兩步,如果想寫function(++i),可以拆成

i += 1; function(i);

拆開(kāi)之后的代碼,含義完全一致,卻清晰很多。到底更新是在取值之前還是之后,一目了然。

當(dāng)然我們也會(huì)有更細(xì)致的爭(zhēng)論,例如:i++或者++i的效率比拆開(kāi)之后要高,當(dāng)看到這種究根源的結(jié)論我其實(shí)是很感興趣的,但實(shí)際上這些代碼經(jīng)過(guò)基本的編譯器優(yōu)化之后,生成的機(jī)器代碼是完全沒(méi)有區(qū)別的。

而且自增減表達(dá)式只有在for循環(huán)的update部分、寫成單獨(dú)的一行這兩種情況下才可以安全的使用,這兩種情況是完全沒(méi)有歧義的。其余情況需要避免使用,比如用在復(fù)雜的表達(dá)式里面,比如function(i++),function(++i)等等。

合理使用括號(hào)

使用括號(hào)可以確保表達(dá)式的優(yōu)先級(jí),而我們總是不大喜歡在表達(dá)式中添加括號(hào),但是盲目依賴操作符優(yōu)先級(jí)往往得不償失。

當(dāng)然對(duì)于簡(jiǎn)單的加減乘除我們可以使用,比如1+4*9,而不需要寫成1+(4*9),然而在一些稍微復(fù)雜一點(diǎn)的表達(dá)式中我們可能不喜歡括號(hào),比如1《《2+4*9。

當(dāng)然,這也考研我們的基本功,但我相信移位操作《《的優(yōu)先級(jí),大部分人第一眼可能是不大熟悉的,所以這導(dǎo)致了我們?cè)僖淮螐U了多一點(diǎn)腦子或者Google了一下。

由于x 《《 1相當(dāng)于把x乘以2,那么這個(gè)表達(dá)式可能會(huì)被誤以為(1《《2)+(4*9),然而實(shí)際上《《的優(yōu)先級(jí)比加法+還要低,所以這表達(dá)式其實(shí)相當(dāng)于1《《(2+4*9)

解決這個(gè)問(wèn)題的辦法,不是要求每個(gè)人都去把操作符優(yōu)先級(jí)表給硬背下來(lái),而是合理的加入括號(hào)。雖然沒(méi)有括號(hào)也表示同樣的意思,但是加上括號(hào)就更加清晰了,是不是呢?

總結(jié)

再次聲明,這里只是舉了幾個(gè)簡(jiǎn)單的例子,所謂存在即合理,特性既然存在肯定是在某種特定情況下有用武之地的,這一點(diǎn)我們毋庸置疑。

但實(shí)際到我們自己敲的代碼,或者在工程應(yīng)用中,為了避免花過(guò)多的時(shí)間與精力放在這種費(fèi)眼睛、費(fèi)腦子的事情上,是適得其反的。

我們需要寫簡(jiǎn)單的代碼,需要看簡(jiǎn)單的代碼,需要沒(méi)有歧義與爭(zhēng)論的代碼,這才是我們的終極目標(biāo),希望本文所闡述的思想對(duì)大家有用處。

原文標(biāo)題:如何寫簡(jiǎn)單的代碼?

文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    30

    文章

    4973

    瀏覽量

    74182

原文標(biāo)題:如何寫簡(jiǎn)單的代碼?

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Debian 69未檢測(cè)到Intenso NVME,怎樣才能讓它工作?

    嘿。我剛剛設(shè)法更新到 2.5.0 并啟動(dòng)了 Debian 版本 69。 但未檢測(cè)到我的新 NVME SSD它在閃爍,但也許我必須做其他事情然后將其內(nèi)置? 我怎樣才能讓它工作? 謝謝
    發(fā)表于 03-25 06:38

    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 ?326次閱讀

    其利天下FOC方案:為什么能讓直流無(wú)刷水泵靜音、節(jié)能、更可靠?

    傳統(tǒng)水泵正面臨向高效、靜音、智能化升級(jí)的行業(yè)拐點(diǎn) 。其利天下推出的直流無(wú)刷水泵專用 FOC 方案,并非簡(jiǎn)單的部件更換,而是通過(guò)算法、硬件與設(shè)計(jì)的深度協(xié)同,從根源上重構(gòu)水泵的驅(qū)動(dòng)內(nèi)核。 一、靜音:從
    的頭像 發(fā)表于 01-23 19:08 ?1572次閱讀
    其利天下FOC方案:為什么<b class='flag-5'>能讓</b>直流無(wú)刷水泵<b class='flag-5'>更</b>靜音、<b class='flag-5'>更</b>節(jié)能、更可靠?

    TQKIT開(kāi)發(fā)板工具讓系統(tǒng)功能調(diào)用簡(jiǎn)單

    TQKIT開(kāi)發(fā)板工具,將復(fù)雜的系統(tǒng)控制能力以接口形式開(kāi)放給開(kāi)發(fā)者,讓系統(tǒng)功能調(diào)用簡(jiǎn)單。
    的頭像 發(fā)表于 12-08 09:27 ?448次閱讀
    TQKIT開(kāi)發(fā)板工具讓系統(tǒng)功能調(diào)用<b class='flag-5'>更</b><b class='flag-5'>簡(jiǎn)單</b>

    編寫簡(jiǎn)單高效單片機(jī)匯編程序

    ,避免重復(fù)編寫。 宏指令:編寫重復(fù)代碼塊時(shí),把它封裝為宏指令,并用傳參簡(jiǎn)化,比如顯示數(shù)字(數(shù)碼管號(hào), 數(shù)值)。這樣能讓代碼簡(jiǎn)潔。 子程序調(diào)用:像時(shí)鐘顯示刷新這種邏輯,可以寫成子程序
    發(fā)表于 11-24 07:00

    怎么能讓riscv32-unknown-elf-gcc支持e203?

    https://github.com/ilg-archived/riscv-none-gcc 自己在這個(gè)地方下載的riscv32-unknown-elf-編譯器代碼 ./configure
    發(fā)表于 11-10 07:06

    力芯微LCD驅(qū)動(dòng)IC:高集成度“芯”優(yōu)勢(shì)讓顯示簡(jiǎn)單

    在當(dāng)今數(shù)字化時(shí)代,顯示屏無(wú)處不在。然而,隨著設(shè)備小型化、高性能化的需求不斷增加,如何在有限的空間內(nèi)實(shí)現(xiàn)更強(qiáng)大的顯示功能,成為了一個(gè)亟待解決的問(wèn)題。力芯微LCD驅(qū)動(dòng)IC:高集成度“芯”優(yōu)勢(shì)讓顯示簡(jiǎn)單
    的頭像 發(fā)表于 10-15 16:08 ?786次閱讀
    力芯微LCD驅(qū)動(dòng)IC:高集成度“芯”優(yōu)勢(shì)讓顯示<b class='flag-5'>更</b><b class='flag-5'>簡(jiǎn)單</b>

    代碼格式化工具Clang-Format提升你的CW32工程質(zhì)量

    它能自動(dòng)統(tǒng)一團(tuán)隊(duì)代碼風(fēng)格,讓不同開(kāi)發(fā)者寫出的代碼如出一轍。就像 CW32 官方庫(kù)函數(shù)遵循統(tǒng)一規(guī)范一樣,Clang-Format 能讓團(tuán)隊(duì)所有成員的代碼瞬間保持一致,徹底消除 "tabs
    的頭像 發(fā)表于 10-09 17:43 ?1224次閱讀
    <b class='flag-5'>代碼</b>格式化工具Clang-Format提升你的CW32工程質(zhì)量

    嵌入式達(dá)到什么水平才能就業(yè)?

    很多想入行嵌入式的朋友,都在糾結(jié):自己得學(xué)到啥水平,才能找到工作?要是現(xiàn)在還沒(méi)達(dá)到這種水平/剛想入行嵌入式,現(xiàn)在開(kāi)始學(xué)還來(lái)得及嘛?別慌,今天就來(lái)好好聊聊~ 嵌入式就業(yè),需要達(dá)到這些水平: (一
    發(fā)表于 09-15 10:20

    告別代碼迷宮!exgnss擴(kuò)展庫(kù)讓GNSS定位開(kāi)發(fā)秒變簡(jiǎn)單

    還在為GNSS定位的復(fù)雜代碼頭疼?exgnss擴(kuò)展庫(kù)為你掃清障礙!它提供簡(jiǎn)潔的接口和高效的工具鏈,從信號(hào)捕獲到坐標(biāo)解析一氣呵成,開(kāi)發(fā)效率直線飆升。 一、exgnss庫(kù)的三種應(yīng)用模式 exgnss庫(kù)
    的頭像 發(fā)表于 09-10 17:23 ?854次閱讀
    告別<b class='flag-5'>代碼</b>迷宮!exgnss擴(kuò)展庫(kù)讓GNSS定位開(kāi)發(fā)秒變<b class='flag-5'>簡(jiǎn)單</b>

    嵌入式系統(tǒng)中,F(xiàn)LASH 中的程序代碼必須搬到 RAM 中運(yùn)行嗎?

    Flash,通常都是讓代碼直接在 Flash 里運(yùn)行。這類芯片的設(shè)計(jì)側(cè)重成本,面對(duì)的任務(wù)也多是簡(jiǎn)單的控制邏輯,比如玩具里的動(dòng)作控制、傳感器的數(shù)據(jù)采集等,F(xiàn)lash 雖
    的頭像 發(fā)表于 08-06 10:19 ?1434次閱讀
    嵌入式系統(tǒng)中,F(xiàn)LASH 中的程序<b class='flag-5'>代碼</b>必須搬到 RAM 中運(yùn)行嗎?

    千視產(chǎn)品全面升級(jí)|用技術(shù)賦能效率,讓專業(yè)簡(jiǎn)單

    為持續(xù)提升用戶體驗(yàn),千視電子近期對(duì)全系核心產(chǎn)品進(jìn)行重大功能升級(jí)。本次更新聚焦于提升協(xié)同效率、增強(qiáng)錄制靈活性、簡(jiǎn)化系統(tǒng)操作,助力客戶在各類IP化制作場(chǎng)景中實(shí)現(xiàn)更高效、更穩(wěn)定、智能的操作體驗(yàn)。1N60
    的頭像 發(fā)表于 07-15 16:45 ?980次閱讀
    千視產(chǎn)品全面升級(jí)|用技術(shù)賦能效率,讓專業(yè)<b class='flag-5'>更</b><b class='flag-5'>簡(jiǎn)單</b>

    使用stm32u575rg通過(guò)spi讀取外置adc的數(shù)據(jù),如何設(shè)置才能讓spi不需要中斷重啟持續(xù)讀取數(shù)據(jù)?

    DBL_1=3,DINC=1, BNDT=64. 測(cè)試時(shí)候發(fā)現(xiàn)SPI只能讀取2組數(shù)據(jù),共8個(gè)字節(jié),EOT=1. 需要開(kāi)啟EOT中斷然后再中斷函數(shù)中重新關(guān)閉再開(kāi)啟SPI才能繼續(xù)讀數(shù)據(jù)。如何設(shè)置才能讓spi不需要中斷重啟持續(xù)讀取數(shù)據(jù)
    發(fā)表于 07-10 08:22

    怎樣才能安全地按住ctrc +c日志閱讀器然后才能停止并重新啟動(dòng)日志?

    你好,我正在使用 FX3 使用以下代碼打印調(diào)試信息:`cyu3pdebugPrint(4,循環(huán)\"中 %d,i);`。\" 此外,我還實(shí)現(xiàn)了兩個(gè)供應(yīng)商命令:用于調(diào)用
    發(fā)表于 05-27 07:11

    大語(yǔ)言模型火爆的今天,我們?yōu)槭裁催€要擁抱世界模型?

    多點(diǎn)發(fā)力,協(xié)同并進(jìn),才能讓AI的成長(zhǎng)有更多道路可走
    的頭像 發(fā)表于 04-11 14:57 ?1934次閱讀
    大語(yǔ)言模型火爆的今天,我們?yōu)槭裁催€要擁抱世界模型?