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

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

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

一個(gè)函數(shù)究竟能不能超過(guò)50行呢?

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2021-06-11 12:46 ? 次閱讀

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

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

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

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

一個(gè)函數(shù)多少行代碼合適?超過(guò)1000行的代碼有什么問(wèn)題? 在編程的各種規(guī)范中,對(duì)函數(shù)代碼行沒(méi)有強(qiáng)制要求必須低于**行才行。 你一個(gè)項(xiàng)目所有函數(shù)都低于50行代碼,是可以的。反過(guò)來(lái),你一個(gè)函數(shù)超過(guò)一萬(wàn)行代碼(只有main函數(shù)),如果代碼沒(méi)問(wèn)題,也能編譯通過(guò),也是可以照常工作。 我們平時(shí)看到的“一個(gè)函數(shù)的代碼盡量不要超過(guò)50行”,它其實(shí)是相對(duì)代碼結(jié)構(gòu)化、模塊化而言的,有很多情況,代碼也會(huì)超過(guò)50行,甚至上千行。

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

代碼為什么要模塊化?

這個(gè)問(wèn)題好比:圖書(shū)館的書(shū)籍,為什么要分類(lèi)?

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

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

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

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

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

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

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

poYBAGDC61eANFoEAACTnPPsANA612.jpg

還比如RTOS模塊化代碼:

pYYBAGDC64OAc0VkAADJbEYnZy0162.jpg

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

INT16U OSVersion (void){ return (OS_VERSION);}

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

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

模塊化代碼的函數(shù),函數(shù)一般都會(huì)低于50行。但是實(shí)際編程中,其實(shí)也有很多函數(shù)是超過(guò)50行。 比如一些復(fù)雜算法通信協(xié)議、應(yīng)用代碼等,這些函數(shù)都有可能超過(guò)50行。 這么說(shuō)吧,像用到一些條件判斷if else,或者switch case,多幾個(gè)條件(比如25個(gè)),基本上這個(gè)函數(shù)代碼就超過(guò)50行了。 還有像有些函數(shù)代碼中,會(huì)用到很多局部變量,多定義幾個(gè)變量函數(shù)代碼行也會(huì)超過(guò)50行:

pYYBAGDC66SAcYFBAAEubmfKaqk606.jpg

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

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

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

poYBAGDC672AZoWBAAESFgIjdIk790.jpg

這個(gè)函數(shù)使用if else 處理了很多觸摸按鍵信息(上百個(gè)Touch),還包含一些指令、數(shù)據(jù)解析分類(lèi),這個(gè)函數(shù)代碼行注定不會(huì)低于50行。 (當(dāng)然,這個(gè)上千行的函數(shù),肯定有優(yōu)惠的空間,減少三分之一應(yīng)該沒(méi)問(wèn)題)

4、最后

一個(gè)函數(shù)超過(guò)1000行代碼,理論上是可以的。但實(shí)際開(kāi)發(fā)中,要盡量避免“超長(zhǎng)行函數(shù)”,盡量控制在50 ~ 80行代碼。 “超長(zhǎng)行函數(shù)”在實(shí)際開(kāi)發(fā)中也常有,如果一個(gè)函數(shù)實(shí)在太多,代碼要盡量規(guī)范法,比如:代碼命名、對(duì)齊、注釋等。 所以,一個(gè)函數(shù)代碼函數(shù)有點(diǎn)多,不要懷疑自己,在“壓縮”代碼行的同時(shí),規(guī)范法代碼就OK。

責(zé)任編輯:lq6

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61969
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67770

原文標(biāo)題:一個(gè)函數(shù)超過(guò)1000行,可以不?

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    UTB定位技術(shù)能不能精準(zhǔn)定位

    在當(dāng)今科技日新月異的時(shí)代,定位技術(shù)以其廣泛的應(yīng)用場(chǎng)景和不斷提升的精度,成為了多個(gè)領(lǐng)域的核心支撐。其中,UTB定位技術(shù)以其高精度、低延遲和高抗干擾性等特點(diǎn),在眾多定位技術(shù)中脫穎而出,成為精準(zhǔn)定位領(lǐng)域的佼佼者。那么,UTB定位技術(shù)到底能不能精準(zhǔn)定位?下面就給大家具體介紹
    的頭像 發(fā)表于 09-03 10:07 ?137次閱讀

    定時(shí)器回調(diào)函數(shù)能不能用ICACHE_FLASH_ATTR定義?

    非 OS SDK 在中斷處理函數(shù)中,請(qǐng)勿使用任何 ICACHE_FLASH_ATTR 定義的函數(shù)。 請(qǐng)問(wèn): 1、定時(shí)器和hw定時(shí)器的回調(diào)函數(shù)是否在中斷處理函數(shù)里面被調(diào)用。定時(shí)器回調(diào)
    發(fā)表于 07-22 06:33

    能不能增大LWIP sockets數(shù)超過(guò)16個(gè)?

    “sys/types.h”限制FD_SETSIZE為64。公司的項(xiàng)目用ESP32方案,用到了很多組播,還有個(gè)服務(wù)端,配置文件限制了LWIP能使用sockets數(shù)最大為16,則分配socket號(hào)從48開(kāi)始,超過(guò)63就會(huì)導(dǎo)致se
    發(fā)表于 06-13 07:47

    STVD中斷中不能設(shè)置超過(guò)32767的數(shù)嗎?

    也就是說(shuō)在中斷里面,jiffies不能超過(guò)32767. 而在中斷外面,比如放在主函數(shù)或者任意其他非中斷,我實(shí)測(cè)是可以通過(guò)的。 此外,我也測(cè)試過(guò)使用long類(lèi)型,然后把判斷清零值寫(xiě)的很低,同樣的錯(cuò)誤
    發(fā)表于 05-16 06:26

    個(gè)電機(jī)用個(gè)MCU控制,F(xiàn)OC的調(diào)制比能不能調(diào)到最大?

    個(gè)電機(jī)用個(gè)MCU控制,F(xiàn)OC的調(diào)制比能不能調(diào)到最大
    發(fā)表于 04-22 07:59

    光纖彎曲究竟能不能影響光纖傳輸

    光纖的傳輸性能受到多種因素的影響,其中彎曲是個(gè)重要的因素。當(dāng)光纖受到過(guò)度彎曲時(shí),會(huì)導(dǎo)致光信號(hào)的傳輸受到干擾,從而影響光纖的傳輸性能。
    的頭像 發(fā)表于 03-16 14:48 ?1289次閱讀

    同VLAN不同的網(wǎng)段能不能互通?

    同VLAN不同的網(wǎng)段能不能互通? 同一個(gè)VLAN中的設(shè)備擁有相同的網(wǎng)絡(luò)地址范圍,因此它們可以通過(guò)該VLAN進(jìn)行通信。而不同VLAN中的設(shè)備擁有不同的網(wǎng)絡(luò)地址范圍,它們通常不能直接互通。然而,在某些
    的頭像 發(fā)表于 02-04 11:21 ?2490次閱讀

    請(qǐng)問(wèn)個(gè)7.5變頻器能不能接兩個(gè)1.5電機(jī)?

    個(gè)7.5變頻器能不能接兩個(gè)1.5電機(jī)??
    發(fā)表于 01-09 07:47

    pcb壓合緩沖墊,究竟能不能讓你的電路板更安全?

    pcb壓合緩沖墊,究竟能不能讓你的電路板更安全?
    的頭像 發(fā)表于 12-27 10:13 ?635次閱讀

    C語(yǔ)言中結(jié)構(gòu)體能不能相加

    C語(yǔ)言中,結(jié)構(gòu)體能不能相加?
    的頭像 發(fā)表于 12-19 17:04 ?1075次閱讀
    C語(yǔ)言中結(jié)構(gòu)體<b class='flag-5'>能不能</b>相加

    AD7760的并行IO接口和控制IO接口能不能與MCU的IO直接連接?

    請(qǐng)問(wèn)下AD7760的并行IO接口和控制IO接口能不能與MCU的IO直接連接?MCU的IO電平是3.3V。AD7760看了是差分信號(hào)輸入,有沒(méi)有大神做過(guò)單端輸入?誤差這方面怎樣
    發(fā)表于 12-08 07:06

    幾個(gè)LED并聯(lián),能不能用恒壓電源?

    幾個(gè)LED并聯(lián),能不能用恒壓電源? LED(Light Emitting Diode)是種非常常見(jiàn)的光電元件,它具有低功耗、高亮度、長(zhǎng)壽命等優(yōu)點(diǎn),因此廣泛應(yīng)用于照明、顯示和指示等領(lǐng)域。而在實(shí)際
    的頭像 發(fā)表于 11-30 11:43 ?915次閱讀

    什么是電磁波?電磁波到底能不能穿透金屬?

    今天我們起來(lái)討論個(gè)問(wèn)題:電磁波到底能不能穿透金屬?這個(gè)問(wèn)題來(lái)源于射頻學(xué)堂微信群的個(gè)討論。對(duì)
    的頭像 發(fā)表于 11-21 09:26 ?2473次閱讀
    什么是電磁波?電磁波到底<b class='flag-5'>能不能</b>穿透金屬?

    直流電源到底能不能驅(qū)動(dòng)交流燈泡發(fā)光?

    我在網(wǎng)上經(jīng)??吹接芯W(wǎng)友在問(wèn)直流電源到底能不能驅(qū)動(dòng)交流燈泡發(fā)光?事實(shí)勝于雄辯,這次專(zhuān)門(mén)準(zhǔn)備了盒干電池,來(lái)實(shí)際演示下,看看能不能發(fā)光。
    的頭像 發(fā)表于 11-13 15:07 ?2527次閱讀
    直流電源到底<b class='flag-5'>能不能</b>驅(qū)動(dòng)交流燈泡發(fā)光?

    個(gè)函數(shù)返回的類(lèi)型是枚舉,能不能將此狀態(tài)賦值給個(gè)char?

    個(gè)函數(shù)返回的類(lèi)型是枚舉類(lèi)型,現(xiàn)在我在另外的個(gè)子程序中調(diào)用了這個(gè)函數(shù),
    發(fā)表于 11-10 06:11