本文转载自微信公众号「strongerHuang」,作者strongerHuang。转载本文请联系strongerHuang公众号。
“一个函数的代码尽量不要超过50行”
有些读者可能看到过类似这样的描述,而自己做项目时,很多函数都比较多(超过50行),就会怀疑自己这样写是不是不对?
那么,一个函数究竟能不能超过50行呢?今天就来讨论下关于函数代码行数相关的内容。
1关于代码行数多少的问题
一个函数多少行代码合适? 超过1000行的代码有什么问题?
在编程的各种规范中,对函数代码行没有强制要求必须低于**行才行。
你一个项目所有函数都低于50行代码,是可以的。反过来,你一个函数超过一万行代码(只有main函数),如果代码没问题,也能编译通过,也是可以照常工作。
我们平时看到的“一个函数的代码尽量不要超过50行”,它其实是相对代码结构化、模块化而言的,有很多情况,代码也会超过50行,甚至上千行。
2模块化代码行数少
代码为什么要模块化?
这个问题好比:图书馆的书籍,为什么要分类?
因为我们代码要实现各种各样的功能,代码模块化之后,会让我们更方便的管理、移植,以及后期的维护。
代码模块化是编程中的一个重要思想,有了模块化思维,开发项目会让你有事半功倍的效果。
这里可以参看之前分享的文章《嵌入式开发中的两点编程思想》。
说回来,为什么模块化代码行数少?
代码模块化,就是把要实现的细小功能模块,用一个函数封装起来,也就牵涉到本文说的函数代码行数少的问题。
你会发现很多底层驱动、中间层、应用层的代码,其实都会用到模块化编程。
比如底层驱动库函数:
还比如RTOS模块化代码:
纵观这些实现模块化的代码,你会发现,每个函数的代码行数都不多,基本保持在50行一下。
甚至有的函数代码只有一行:
- INT16U OSVersion (void)
- {
- return (OS_VERSION);
- }
当然,并不是所有的模块化代码行数都低于50行,也有100行的,也有超过200行的,但整体来说,模块化代码的行数相对都不多。
3多行代码的函数
模块化代码的函数,函数一般都会低于50行。但是实际编程中,其实也有很多函数是超过50行。
比如一些复杂算法、通信协议、应用代码等,这些函数都有可能超过50行。
这么说吧,像用到一些条件判断if else,或者switch case,多几个条件(比如25个),基本上这个函数代码就超过50行了。
还有像有些函数代码中,会用到很多局部变量,多定义几个变量函数代码行也会超过50行:
通常来说,超多行函数,一般在业务逻辑应用代码中比较常见。
有时候,我们写一个应用代码,可能不知不觉(复制粘贴)就上百行代码了。(main函数实现了所有功能,是不是似存相识?)
我之前也这么干过,特意找了一下几年前写的代码,上千行的一个触摸屏处理函数:
这个函数使用 if else 处理了很多触摸按键信息(上百个Touch),还包含一些指令、数据解析分类,这个函数代码行注定不会低于50行。
(当然,这个上千行的函数,肯定有优惠的空间,减少三分之一应该没问题)
4最后
一个函数超过1000行代码,理论上是可以的。但实际开发中,要尽量避免“超长行函数”,尽量控制在50 ~ 80行代码。
“超长行函数”在实际开发中也常有,如果一个函数实在太多,代码要尽量规范法,比如:代码命名、对齐、注释等。
所以,一个函数代码函数有点多,不要怀疑自己,在“压缩”代码行的同时,规范法代码就OK。