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)不再提示

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

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2021-06-11 12:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

代碼為什么要模塊化?

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

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

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

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

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

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

你會(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)用代碼中比較常見。

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

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

poYBAGDC672AZoWBAAESFgIjdIk790.jpg

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

4、最后

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

責(zé)任編輯:lq6

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

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

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73960

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    智能顯示模塊通信時(shí)有CRC數(shù)據(jù)校驗(yàn)功能嗎?串口通信能不能加上數(shù)據(jù)檢驗(yàn)?

    智能顯示模塊通信時(shí)有CRC數(shù)據(jù)校驗(yàn)功能嗎?串口通信能不能加上數(shù)據(jù)檢驗(yàn)?
    發(fā)表于 02-28 16:13

    《當(dāng)個(gè) MCU 原廠的型號(hào)超過(guò) 100 個(gè),會(huì)發(fā)生什么?》

    原廠來(lái)說(shuō),是非常危險(xiǎn)的狀態(tài)。 超過(guò) 100 個(gè)型號(hào)之后, 問題已經(jīng)不再是“能不能支持”, 而是體系是否健康。
    發(fā)表于 02-27 10:04

    到底DDR走線能不能參考電源層???

    雖然我看到過(guò)DDR的走線參考電源平面也能調(diào)試成功的案例,但是依然不妨礙我還想問:到底DDR走線能不能參考電源層???
    的頭像 發(fā)表于 11-11 17:44 ?759次閱讀
    到底DDR走線<b class='flag-5'>能不能</b>參考電源層?。? />    </a>
</div>                              <div   id=

    請(qǐng)問CS32L010F8U6能不能做單電池供電的無(wú)感無(wú)刷電機(jī)驅(qū)動(dòng)

    如果可以,能不能提供個(gè)例程,以及開發(fā)板原理圖。 資料請(qǐng)發(fā)郵箱:1095558233@qq.com
    發(fā)表于 11-07 14:10

    使用MCU200T的板子能不能做RVSTAR上的實(shí)驗(yàn)例子?

    手里只有塊MCU200T的板子,看到老師做的RVSTAR上的例子,不知道能不能在MCU200T上面做
    發(fā)表于 11-05 12:55

    4g報(bào)警器能不能改成個(gè)反電魚報(bào)警器

    4G報(bào)警器通過(guò)震動(dòng)脫落磁鐵來(lái)感應(yīng)報(bào)警能不能改成感應(yīng)電流報(bào)警應(yīng)用場(chǎng)景-魚塘水庫(kù) 江河湖泊新能源監(jiān)控實(shí)時(shí)感應(yīng)報(bào)警對(duì)于電路完全小白求大佬指點(diǎn)下需要加什么配件實(shí)現(xiàn)
    發(fā)表于 10-31 23:35

    用STM32H750定時(shí)器抓最高30M信息源,定時(shí)器能不能配置成100M?

    你好,我們要用 STM32H750 定時(shí)器抓最高30M 信息源,定時(shí)器能不能配置成100M?超過(guò)1M用適波器無(wú)法看到波形,不知道是哪的問題
    發(fā)表于 08-08 06:23

    六類線永久鏈路的長(zhǎng)度不能超過(guò)多少米-科蘭

    六類線永久鏈路的長(zhǎng)度不能超過(guò)90米,這是根據(jù)國(guó)際標(biāo)準(zhǔn)TIA/EIA-568及ISO/IEC 11801明確規(guī)定的上限值。以下為具體說(shuō)明: 、標(biāo)準(zhǔn)依據(jù)與定義 永久鏈路(Permanent Link
    的頭像 發(fā)表于 07-14 10:09 ?1282次閱讀
    六類線永久鏈路的長(zhǎng)度<b class='flag-5'>不能超過(guò)</b>多少米-科蘭

    工廠設(shè)備能不能工業(yè)數(shù)采?3招教你快速判斷,省時(shí)又省錢!

    設(shè)備能不能采?記住這五招:看接口、問協(xié)議、查燈亮、找廠家、加傳感器。大部分現(xiàn)代工廠設(shè)備(PLC/CNC/注塑機(jī)),甚至部分干燥機(jī)、模溫機(jī),都是能采的!別被“老設(shè)備”嚇住。
    的頭像 發(fā)表于 07-03 10:09 ?736次閱讀
    工廠設(shè)備<b class='flag-5'>能不能</b>工業(yè)數(shù)采?3招教你快速判斷,省時(shí)又省錢!

    cyw20829能不能使用紅外線解碼嗎?

    cyw20829能不能使用紅外線解碼嗎
    發(fā)表于 07-03 06:49

    GUIguider1.9.0能不能增加,將背景圖也放入外部存儲(chǔ)類型中?

    GUIguider1.9.0 能不能增加,將背景圖也放入外部存儲(chǔ)類型中,目前只能在界面上創(chuàng)建個(gè)img,這個(gè)時(shí)候才有外部存儲(chǔ)的選項(xiàng),按鈕的背景圖也沒看到 有 外部存儲(chǔ)的選項(xiàng)
    發(fā)表于 03-26 06:56

    STM32C031F4 FLASH存儲(chǔ)器讀寫例程各位高能不能提供個(gè)?

    STM32C031F4FLASH存儲(chǔ)器 讀寫例程 各位高能不能提供個(gè)謝謝大家
    發(fā)表于 03-13 07:37

    請(qǐng)問SPC5_STUDIO能不能用stellarllink進(jìn)行連接?如何連接?

    SPC5_STUDIO能不能用stellarllink進(jìn)行連接?如何連接?
    發(fā)表于 03-10 08:18

    stm32f103cbu6底部焊盤能不能連接到VSS?

    stm32f103cbu6底部焊盤能不能連接到VSS
    發(fā)表于 03-10 07:51

    請(qǐng)問stellarlink能不能用在spc5studio?spc56和spc58系列都支持嗎?

    stellarlink能不能用在spc5studio?spc56和spc58系列都支持嗎?
    發(fā)表于 03-10 06:21