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

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

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

3天內不再提示

如何才能讓代碼更簡單?

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

掃碼添加小助手

加入工程師交流群

不知道大家有沒有這樣的經歷,當你來到一個新的公司或者是接手一個新的項目的時候,最怕的就是看前任的代碼(外加沒有文檔),最氣人的還是,連簡單的注釋都沒有多少,每當遇到這種情況都想把前任程序員拉出來斃了。

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

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

還有一點,我相信每個程序員都想要寫好代碼,或者認為短小精悍的代碼才算好。我們也會經常吹牛逼說:這個功能別人要寫100行,我不到一半行就搞定了。不是說不好,但是很多情況,利用語言里的一些特殊構造來縮減代碼可能會讓人難以理解。

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

下面我根據一些經驗,針對一些有問題的語言特性,規(guī)范一些代碼,為什么這樣能讓代碼更簡單。

切記不要省略花括號

這個相信大家都有體會,也是經常會這么用的,比如:

if (condition1) action1();

而不是

if (condition1){ action1(); }

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

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

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

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

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

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

我們總喜歡騷操作,在我之前寫過的一篇文章中 淺析C語言中一些“令人吃驚”的結構 ,表明C語言會同意一些“令人震驚”的結構,但實際上自增減操作表達式其實是歷史遺留的設計失誤。

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

這種表達式的結果可能取決于求值順序,在某種編譯器下能正確運行,換一個編譯器就可能出現(xiàn)離奇的錯誤了,當然這個我并沒有驗證,但這種看起來太騷了。

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

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

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

i += 1; function(i);

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

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

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

合理使用括號

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

當然對于簡單的加減乘除我們可以使用,比如1+4*9,而不需要寫成1+(4*9),然而在一些稍微復雜一點的表達式中我們可能不喜歡括號,比如1《《2+4*9。

當然,這也考研我們的基本功,但我相信移位操作《《的優(yōu)先級,大部分人第一眼可能是不大熟悉的,所以這導致了我們再一次廢了多一點腦子或者Google了一下。

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

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

總結

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

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

我們需要寫簡單的代碼,需要看簡單的代碼,需要沒有歧義與爭論的代碼,這才是我們的終極目標,希望本文所闡述的思想對大家有用處。

原文標題:如何寫簡單的代碼?

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    30

    文章

    4973

    瀏覽量

    74171

原文標題:如何寫簡單的代碼?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    SonarQube代碼質量管理平臺詳解

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

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

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

    TQKIT開發(fā)板工具讓系統(tǒng)功能調用簡單

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

    編寫簡單高效單片機匯編程序

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

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

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

    力芯微LCD驅動IC:高集成度“芯”優(yōu)勢讓顯示簡單

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

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

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

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

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

    告別代碼迷宮!exgnss擴展庫讓GNSS定位開發(fā)秒變簡單

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

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

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

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

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

    企業(yè)和個人基于業(yè)務知識和代碼庫增強的大模型生成代碼實踐

    :“這個功能之前做過類似的,你參考下歷史代碼?!笨僧斔蜷_代碼倉庫,卻發(fā)現(xiàn)注釋寥寥,變量名像密碼一樣難懂,找不到任何需求文檔。他硬著頭皮修改,結果上線后引發(fā)了線上故障——原來有個隱藏的業(yè)務規(guī)則,只有老員工才知道。 第二周:
    的頭像 發(fā)表于 07-08 15:31 ?486次閱讀
    企業(yè)和個人基于業(yè)務知識和<b class='flag-5'>代碼</b>庫增強的大模型生成<b class='flag-5'>代碼</b>實踐

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

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

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

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