一个函数超过1000行,可以不?

开发 前端
们平时看到的“一个函数的代码尽量不要超过50行”,它其实是相对代码结构化、模块化而言的,有很多情况,代码也会超过50行,甚至上千行。

[[404329]]

本文转载自微信公众号「strongerHuang」,作者strongerHuang。转载本文请联系strongerHuang公众号。

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

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

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

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

一个函数多少行代码合适? 超过1000行的代码有什么问题?

在编程的各种规范中,对函数代码行没有强制要求必须低于**行才行。

你一个项目所有函数都低于50行代码,是可以的。反过来,你一个函数超过一万行代码(只有main函数),如果代码没问题,也能编译通过,也是可以照常工作。

我们平时看到的“一个函数的代码尽量不要超过50行”,它其实是相对代码结构化、模块化而言的,有很多情况,代码也会超过50行,甚至上千行。

2模块化代码行数少

代码为什么要模块化?

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

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

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

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

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

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

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

比如底层驱动库函数:

还比如RTOS模块化代码:

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

甚至有的函数代码只有一行:

  1. INT16U  OSVersion (void) 
  2.     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。

 

责任编辑:武晓燕 来源: strongerHuang
相关推荐

2022-07-14 10:54:15

Python代码Matplotlib

2022-08-10 10:51:40

数据SQL

2020-09-24 10:47:45

安全密码数据

2020-04-20 09:02:33

函数RPCCPU

2019-04-25 05:35:30

ping网络命令

2020-05-11 17:12:52

换脸Python图像

2021-02-14 13:35:51

程序员工具互联网

2012-08-23 14:23:33

函数式编程

2021-06-16 17:46:55

函数指针结构

2022-07-26 16:08:43

print函数

2021-12-07 06:55:17

节流函数Throttle

2023-09-04 08:08:59

2023-12-28 08:01:59

2022-01-26 16:30:47

代码虚拟机Linux

2017-03-28 21:03:35

代码React.js

2011-05-19 14:40:33

SQL Server

2013-03-04 10:22:30

Python

2022-06-29 09:02:31

go脚本解释器

2014-04-08 11:47:36

NASA软件开源

2011-12-26 16:39:43

局部函数
点赞
收藏

51CTO技术栈公众号