女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

如何才能讓代碼更簡單?

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

切記不要省略花括號

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

if (condition1) action1();

而不是

if (condition1){ action1(); }

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

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

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

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

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

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

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

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

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

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

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

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

i += 1; function(i);

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

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

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

合理使用括號

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

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

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

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

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

總結

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

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

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

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

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

責任編輯:haq

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

    關注

    30

    文章

    4900

    瀏覽量

    70669

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    光伏電站智能分析管理系統讓電站管理簡單

    光伏電站智能分析管理系統讓電站管理簡單 光伏電站建好后,管理才是真正的考研。過去靠人工巡檢,設備壞了要等好幾天才能發現,發電損失讓人心疼。現在,光伏電站智能分析管理系統就能讓電站自己
    的頭像 發表于 03-14 15:20 ?380次閱讀
    光伏電站智能分析管理系統讓電站管理<b class='flag-5'>更</b><b class='flag-5'>簡單</b>

    DevEco Studio 聯合小藝接入 DeepSeek,步驟簡單開發鴻蒙專業

    所有的代碼,并且希望快點看到效果 按照提供的代碼,將整個工程進行代碼和資源的填充和簡單修改,馬上一個富有設計元素,擁有點擊動效的個人IP首頁就可以馬上運行了,整個過程不到半個小時,是不
    發表于 03-13 15:11

    愛立信如何讓網絡運維簡單

    在愛立信“可編程網絡”這一創新概念里,差異化連接、AI賦能和意圖驅動、網絡能力開放作為三大基石,各司其職,讓網絡智能、更靈活、開放。本期《信觀察》,愛立信專家將從AI賦能和意圖驅動的概念和功能入手,與您分享愛立信如何“讓網絡運維
    的頭像 發表于 03-03 09:27 ?9808次閱讀

    如何給ADS1247發送指令,才能讓它開始轉換溫度?

    最新在使用ADS1247測量PT100,MCU51模擬SPI訪問ADS1247,可以讀寫所有的寄存器。但是無法測量溫度,DOUT交永遠是低電平,而且差分電壓也總是0.000V。想請問,應當如何給ADS1247發送指令,才能讓它開始轉換溫度。
    發表于 01-22 06:25

    告別繁瑣!盾華物聯網智慧控制中心,讓中小型控制中心建設簡單

    告別繁瑣!盾華物聯網智慧控制中心,讓中小型控制中心建設簡單
    的頭像 發表于 11-29 09:41 ?537次閱讀
    告別繁瑣!盾華物聯網智慧控制中心,讓中小型控制中心建設<b class='flag-5'>更</b><b class='flag-5'>簡單</b>!

    讓單片機代碼性能起飛的七大技巧

    大廠工程師,也會有讓人笑掉大牙的代碼。 ? ? ? ? ? 高效的背后,有很多學問,需要有一定的數學功底,對編譯器有較深的了解,懂匯編。 ? ? ? ? ? 具備這些能力,寫出來的代碼才能讓cpu執行這段
    的頭像 發表于 11-16 10:21 ?1142次閱讀
    讓單片機<b class='flag-5'>代碼</b>性能起飛的七大技巧

    PCM1794 IV轉換如何鏈接才能讓基輸出一個聲道的單端信號?

    17,18 ,25,26腳分別得到一個聲道的+-信號(因為這時分別有兩組+-信號后面運放不知怎樣接了),但我后面IV轉換如何鏈接才能讓基輸出一個聲道的單端信號,望給出原理圖片,謝謝
    發表于 11-05 07:03

    tas5711怎么設置才能讓8k的音頻有聲音呢?

    tas5711 播放44.1k和48k音頻正常,播放8k,22.05k沒有聲音?怎么設置才能讓8k的音頻有聲音呢? 現在僅僅做了基本的配置: 寫0x1B寄存器為0x00 寫0x07寄存器為0x30 寫0x05寄存器為0x00 謝謝!
    發表于 10-31 07:16

    通過簡單的電阻電容組合怎樣才能把25K方波變成正弦?

    通過簡單的電阻電容組合怎樣才能把25K方波變成正弦呢。加了濾波電路后方波的上升沿變緩了,可是下降沿基本沒有變化。怎樣才能把下降沿也變緩呢
    發表于 10-22 06:02

    用兩片AS808M做兩個MONO輸出,怎么配置才能讓兩個5805m分別輸出左右的聲音?

    我們現在用兩片AS808M做兩個MONO輸出,一個TAS5805m做左聲道,一個做右聲道,現在的問題是只有左邊加信號的時候兩個都有輸出,右邊加信號的時候都沒有輸出,請問要怎么配置才能讓兩個5805m分別輸出左右的聲音
    發表于 10-10 06:30

    TPA6304芯片沒聲音輸出 軟件怎么配置才能有音頻輸出?

    下面是TPA6304的原理圖,目前芯片沒有聲音輸出,軟件也沒有做任何的配置。請問軟件需要怎樣配置才能讓芯片輸出聲音?需要配置哪些寄存器?這些寄存器的值是多少?
    發表于 10-09 06:33

    什么樣的激光雷達才能讓AEB安全

    所謂“道路萬千條,安全第一條”,汽車安全一直是消費者在選車時的關鍵考慮因素之一。為了滿足用戶對安全的需求,汽車的主動安全功能也在不斷地進化。
    的頭像 發表于 09-27 11:31 ?924次閱讀
    什么樣的激光雷達<b class='flag-5'>才能讓</b>AEB<b class='flag-5'>更</b>安全

    多級運放級聯如何安排運放放大倍數才能讓信號質量最優噪聲小?

    如題,多級運放級聯如何安排運放放大倍數才能讓信號質量最優噪聲小,關于集成運放的級聯有沒有相關的理論支持?
    發表于 08-27 08:14

    安森美GaN功率器件iGaN NCP5892x系列簡單容易

    系列,集成eGaN與驅動電路一體化,讓電源工程師在GaN的應用簡單容易, 現成的集成GaN驅動器 GaN器件是最高性能的開關,提供極低的靜態和動態損耗。當與驅動器共同封裝時,它們在高性能電源轉換器設計中簡單應用,可滿足嚴格的能
    的頭像 發表于 07-23 10:21 ?977次閱讀
    安森美GaN功率器件iGaN NCP5892x系列<b class='flag-5'>更</b><b class='flag-5'>簡單</b>容易