0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个函数究竟能不能超过50行呢?

strongerHuang 来源:strongerHuang 作者:strongerHuang 2021-06-11 12:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

“一个函数的代码尽量不要超过50行”

有些读者可能看到过类似这样的描述,而自己做项目时,很多函数都比较多(超过50行),就会怀疑自己这样写是不是不对?

那么,一个函数究竟能不能超过50行呢?今天就来讨论下关于函数代码行数相关的内容。

1、关于代码行数多少的问题

一个函数多少行代码合适?超过1000行的代码有什么问题? 在编程的各种规范中,对函数代码行没有强制要求必须低于**行才行。 你一个项目所有函数都低于50行代码,是可以的。反过来,你一个函数超过一万行代码(只有main函数),如果代码没问题,也能编译通过,也是可以照常工作。 我们平时看到的“一个函数的代码尽量不要超过50行”,它其实是相对代码结构化、模块化而言的,有很多情况,代码也会超过50行,甚至上千行。

2、模块化代码行数少

代码为什么要模块化?

这个问题好比:图书馆的书籍,为什么要分类?

因为我们代码要实现各种各样的功能,代码模块化之后,会让我们更方便的管理、移植,以及后期的维护。

代码模块化是编程中的一个重要思想,有了模块化思维,开发项目会让你有事半功倍的效果。

这里可以参看之前分享的文章《嵌入式开发中的两点编程思想》。

说回来,为什么模块化代码行数少?

代码模块化,就是把要实现的细小功能模块,用一个函数封装起来,也就牵涉到本文说的函数代码行数少的问题。

你会发现很多底层驱动、中间层、应用层的代码,其实都会用到模块化编程。

比如底层驱动库函数:

poYBAGDC61eANFoEAACTnPPsANA612.jpg

还比如RTOS模块化代码:

pYYBAGDC64OAc0VkAADJbEYnZy0162.jpg

纵观这些实现模块化的代码,你会发现,每个函数的代码行数都不多,基本保持在50行一下。 甚至有的函数代码只有一行:

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

当然,并不是所有的模块化代码行数都低于50行,也有100行的,也有超过200行的,但整体来说,模块化代码的行数相对都不多。

3、多行代码的函数

模块化代码的函数,函数一般都会低于50行。但是实际编程中,其实也有很多函数是超过50行。 比如一些复杂算法通信协议、应用代码等,这些函数都有可能超过50行。 这么说吧,像用到一些条件判断if else,或者switch case,多几个条件(比如25个),基本上这个函数代码就超过50行了。 还有像有些函数代码中,会用到很多局部变量,多定义几个变量函数代码行也会超过50行:

pYYBAGDC66SAcYFBAAEubmfKaqk606.jpg

通常来说,超多行函数,一般在业务逻辑应用代码中比较常见。

有时候,我们写一个应用代码,可能不知不觉(复制粘贴)就上百行代码了。(main函数实现了所有功能,是不是似存相识?)

我之前也这么干过,特意找了一下几年前写的代码,上千行的一个触摸屏处理函数:

poYBAGDC672AZoWBAAESFgIjdIk790.jpg

这个函数使用if else 处理了很多触摸按键信息(上百个Touch),还包含一些指令、数据解析分类,这个函数代码行注定不会低于50行。 (当然,这个上千行的函数,肯定有优惠的空间,减少三分之一应该没问题)

4、最后

一个函数超过1000行代码,理论上是可以的。但实际开发中,要尽量避免“超长行函数”,尽量控制在50 ~ 80行代码。 “超长行函数”在实际开发中也常有,如果一个函数实在太多,代码要尽量规范法,比如:代码命名、对齐、注释等。 所以,一个函数代码函数有点多,不要怀疑自己,在“压缩”代码行的同时,规范法代码就OK。

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66863
  • 代码
    +关注

    关注

    30

    文章

    4942

    浏览量

    73170

原文标题:一个函数超过1000行,可以不?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    到底DDR走线能不能参考电源层啊?

    虽然我看到过DDR的走线参考电源平面也能调试成功的案例,但是依然不妨碍我还想问:到底DDR走线能不能参考电源层啊?
    的头像 发表于 11-11 17:44 525次阅读
    到底DDR走线<b class='flag-5'>能不能</b>参考电源层啊?

    工厂设备能不能工业数采?3招教你快速判断,省时又省钱!

    设备能不能采?记住这五招:看接口、问协议、查灯亮、找厂家、加传感器。大部分现代工厂设备(PLC/CNC/注塑机),甚至部分干燥机、模温机,都是能采的!别被“老设备”吓住。
    的头像 发表于 07-03 10:09 541次阅读
    工厂设备<b class='flag-5'>能不能</b>工业数采?3招教你快速判断,省时又省钱!

    STM32C031F4 FLASH存储器读写例程各位高能不能提供

    STM32C031F4FLASH存储器 读写例程 各位高能不能提供谢谢大家
    发表于 03-13 07:37

    能不能用多片DP83640与交换芯片连接完成透明的时钟功能

    想使用DP83640完成透明时钟的功能,不知道能不能用多片DP83640与交换芯片连接完成透明时钟的功能
    发表于 02-11 06:40

    DAC3162输出是电流型的,这个能不能转换成电压型的,复杂吗?

    DAC3162输出是电流型的,这个能不能转换成电压型的,复杂吗?或者帮我重新选型下,参数:工作速率300MHz,采样带宽大于30MHz,量化12bit,输出的频率15MHz+-5MHz,内部有放大器,输出功率0+-2dBm,即0.83mW至1.6mW,带外抑制大于
    发表于 02-11 06:36

    请问ADS1292R能不能同时采集ECG,EEG和呼吸?

    最近在做一个项目,要求同时采集ECG,EEG和呼吸信息,就想用ADS1292R 的通道采集导联的心电信号,
    发表于 01-17 07:57

    ADS8568能不能使用单电源供电?

    ADS8568能不能使用单电源供电,即HVSS接地,HVDD接+12V,能正常工作吗?我现在用的硬件模式,采不到数据。。
    发表于 01-17 06:14

    DSP能不能读取到AD的CH A1通道采样数据?

    如果我只用ADS7864的通道输入(CH A0),HOLAB和HOLDC固定为高电平,那么引脚A2、A1、A0是不是都要接低电平?这样CH A0通道会进行采样,那么CH A1会不会采样?DSP
    发表于 01-15 07:21

    ADCPro工具下发到MMB0板子上的TMS320固件的源码,能不能获取到

    1、想对AdcPro工具做些修改,以方便自己使用,不知道能不能获取到这个软件源码? 2、ADCPro工具下发到 MMB0板子上的TMS320(我的是ADS1259EVM-PDK)固件的源码,能不能
    发表于 01-15 06:52

    ADS1602与TM4C1294通信,最高数据率不能超过10Mbps,远远小于40Mbps,请问有何解决办法?

    ADS1602是16位2.5M采样率的ADC芯片,与TM4C1294采用SSI接口,就是SPI,ADC为主机,1294为从机,看了下,发现最高数据率不能超过10Mbps,远远小于40Mbps,请问有何解决办法?还有现在用的是40M晶振,
    发表于 01-06 06:24

    请问ads1271能不能测量负电压?

    1.请问ads1271能不能测量负电压,现在的电路ainn接的是地,ainp接的被测量模拟量,当ainp为正的时候数值正确,当ainp为负值时数值接近于0. 2.手册里的data rate
    发表于 01-01 08:09

    ADS1299eegfe能不能进行实时采集 ?

    的方式实时采集显示的? 现在想要采集到完整的脑电信号,所以特别想知道能不能进行实时采集 会不会两次刷新之间丢数据。还是说现在屏幕上显示的波形已经是实时的结果了
    发表于 12-27 08:33

    采集4通道,ADS131E08能不能达到24位64KSPS?

    64KSPS, 帖子说的我没有在芯片手册上找到,这是帖子的链接地址:www.deyisupport.com/.../12483.aspx 我有2疑问: 第,我采集4通道,不知道ADS131E08
    发表于 12-26 07:10

    输入信号是1VPP的单端信号,能不能直接接入ADS5294?

    最近项目要用到ADS5294,手册上说需要提供差分输入信号 而我现在的输入信号是1VPP的单端信号,能不能直接接入ADS5294。 还是需要通过差分运放转换下,如果定需要转换的话,能不
    发表于 12-26 06:17

    丝杆模组为什么行程不能超过两米?

    丝杆模组为什么行程不能超过两米
    的头像 发表于 12-24 17:56 872次阅读
    丝杆模组为什么行程<b class='flag-5'>不能超过</b>两米?