<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一個函數(shù)超過1000行,可以不?

          共 1668字,需瀏覽 4分鐘

           ·

          2021-06-23 21:51

          關(guān)注、星標(biāo)公眾號,直達(dá)精彩內(nèi)容

          作者 | strongerHuang

          微信公眾號 | 嵌入式專欄



          “一個函數(shù)的代碼盡量不要超過50行”


          有些讀者可能看到過類似這樣的描述,而自己做項(xiàng)目,很多函數(shù)都比較多(超過50行),就會懷疑自己這樣寫是不是不對?


          那么,一個函數(shù)究竟能不能超過50行呢?今天就來討論下關(guān)于函數(shù)代碼行數(shù)相關(guān)的內(nèi)容。


          1關(guān)于代碼行數(shù)多少的問題

          一個函數(shù)多少行代碼合適? 超過1000行的代碼有什么問題?

          在編程的各種規(guī)范中,對函數(shù)代碼行沒有強(qiáng)制要求必須低于**行才行。

          你一個項(xiàng)目所有函數(shù)都低于50行代碼,是可以的。反過來,你一個函數(shù)超過一萬行代碼(只有main函數(shù)),如果代碼沒問題,也能編譯通過,也是可以照常工作。

          我們平時看到的“一個函數(shù)的代碼盡量不要超過50行”,它其實(shí)是相對代碼結(jié)構(gòu)化、模塊化而言的,有很多情況,代碼也會超過50行,甚至上千行。


          2模塊化代碼行數(shù)少

          代碼為什么要模塊化?

          這個問題好比:圖書館的書籍,為什么要分類?


          因?yàn)槲覀兇a要實(shí)現(xiàn)各種各樣的功能,代碼模塊化之后,會讓我們更方便的管理、移植,以及后期的維護(hù)。


          代碼模塊化是編程中的一個重要思想,有了模塊化思維,開發(fā)項(xiàng)目會讓你有事半功倍的效果。


          這里可以參看之前分享的文章《嵌入式開發(fā)中的兩點(diǎn)編程思想》。


          說回來,為什么模塊化代碼行數(shù)少?

          代碼模塊化,就是把要實(shí)現(xiàn)的細(xì)小功能模塊,用一個函數(shù)封裝起來,也就牽涉到本文說的函數(shù)代碼行數(shù)少的問題。


          你會發(fā)現(xiàn)很多底層驅(qū)動、中間層、應(yīng)用層的代碼,其實(shí)都會用到模塊化編程。


          比如底層驅(qū)動庫函數(shù):


          還比如RTOS模塊化代碼:


          縱觀這些實(shí)現(xiàn)模塊化的代碼,你會發(fā)現(xiàn),每個函數(shù)的代碼行數(shù)都不多,基本保持在50行一下。

          甚至有的函數(shù)代碼只有一行:
          INT16U  OSVersion (void){    return (OS_VERSION);}


          當(dāng)然,并不是所有的模塊化代碼行數(shù)都低于50行,也有100行的,也有超過200行的,整體來說,模塊化代碼的行數(shù)相對都不多。



          3多行代碼的函數(shù)

          模塊化代碼的函數(shù),函數(shù)一般都會低于50行。但是實(shí)際編程中,其實(shí)也有很多函數(shù)是超過50行。

          比如一些復(fù)雜算法、通信協(xié)議、應(yīng)用代碼等,這些函數(shù)都有可能超過50行。

          這么說吧,像用到一些條件判斷if else,或者switch case,多幾個條件(比如25個),基本上這個函數(shù)代碼就超過50行了。

          還有像有些函數(shù)代碼中,會用到很多局部變量,多定義幾個變量函數(shù)代碼行也會超過50行:


          通常來說,超多行函數(shù),一般在業(yè)務(wù)邏輯應(yīng)用代碼中比較常見。


          有時候,我們寫一個應(yīng)用代碼,可能不知不覺(復(fù)制粘貼)就上百行代碼了。(main函數(shù)實(shí)現(xiàn)了所有功能,是不是似存相識?)


          我之前也這么干過,特意找了一下幾年前寫的代碼,上千行的一個觸摸屏處理函數(shù):


          這個函數(shù)使用 if else 處理了很多觸摸按鍵信息(上百個Touch),還包含一些指令、數(shù)據(jù)解析分類,這個函數(shù)代碼行注定不會低于50行。

          (當(dāng)然,這個上千行的函數(shù),肯定有優(yōu)惠的空間,減少三分之一應(yīng)該沒問題)


          4最后

          一個函數(shù)超過1000行代碼,理論上是可以的。但實(shí)際開發(fā)中,要盡量避免“超長行函數(shù)”,盡量控制在50 ~ 80行代碼。

          “超長行函數(shù)”在實(shí)際開發(fā)中也常有,如果一個函數(shù)實(shí)在太多,代碼要盡量規(guī)范法,比如:代碼命名、對齊、注釋等。

          所以,一個函數(shù)代碼函數(shù)有點(diǎn)多,不要懷疑自己,在“壓縮”代碼行的同時,規(guī)范法代碼就OK。
          ????????????????  END  ????????????????

          推薦閱讀:


          嵌入式編程專輯
          Linux 學(xué)習(xí)專輯
          C/C++編程專輯
          Qt進(jìn)階學(xué)習(xí)專輯

          關(guān)注我的微信公眾號,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


          點(diǎn)擊“閱讀原文”查看更多分享。

          瀏覽 89
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久五月天婷婷 | 久久精品蜜桃 | www.91在线 | 色小伙操逼网 | 五月综合激情网 |