IE盒子

搜索
查看: 115|回复: 0

C++的那些事——让人吐槽的那些代码风格

[复制链接]

3

主题

6

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2023-1-12 09:55:38 | 显示全部楼层 |阅读模式
C++的那些事——让人吐槽的那些代码风格
大家晚上好,今天不学习新内容,就是来吐槽一下平时让人很反感的代码风格。 以下内容全部都是自己亲身体会总结得到的。编程语言为C++, 一部分内容与语言相关,一部分适合于所有编程语言。
乱用auto

auto是C++11标准引入的, 可以让编译器来推断出对应的类型。 它的目的是有时候写代码时类型很复杂(例如迭代器)或者无法写出具体的类型(例如lambda表达式的类型)才会使用auto的。 但是吧,如果滥用auto, 非常的不好,让读代码的人很烦: -  特别影响代码的可读性, 如果想看一个变量的真实类型,你还得点到函数里去看一下它的返回值类型。 -  严重影响到代码的跳转功能以及写代码时IDE的联想提示功能。比如说,你使用auto代替了一个struct结构体类型, 当你输入变量名.时, 输入了.之后,都不弹出来该结构体包含的哪些成员变量, 它问题同样在指针成员访问运算符->中也会遇到。
所以, 没事少用auto,除非说你使用了auto之后,确实让代码更简洁了并且没有其它副作用时,可以使用它。
滥用lambda表达式

lambda表达式也是C++11标准引入的, 有了它确实让我们方便很多,同样你也别滥用啊。 我见过的代码,并且都是工程代码,动不动地在一个函数里面直接定义了一个lambda函数,关键是该lambda函数里还包含了很多逻辑处理。 定义之后, 接下来就直接手动调用它一下。 我就想说,你这么做图什么? 你定义一个有名的函数不可以吗?函数里面定义一个复杂的lambda函数,代码可读性很差的。  代码检视时,提检视意见问为什么要这么写代码? 给的答案是嫌麻烦,不想定义有名的函数。。。。。
lambda表达式, 如果说函数很短,逻辑很简单,10行以内,使用它没有问题的。 复杂的逻辑你就别使用它了。
动不动就函数重载

明明两个函数的逻辑只是大致相同,但是细节是不一样的, 你干嘛还非得取相同的函数名字呢,通过参数进行区分啊?读代码的人看到这样的代码会非常的困惑,必须读一下函数的代码实现,才明白,哦,原来区别是这样的。 对于这种情况,你直接取不同的函数名进行区别多好啊! 另外多个相同的函数名,也特别影响函数的跳转。当我们要跳转到函数的实现处时,通过会跳出来好几个相同的函数,我们还必须仔细看看参数来决定看哪个函数。至少vscode是这样的!
另外我发现哪些人通常会滥用函数重载呢? 那些从C语言转行到C++开发的同事,看到原来C++还可以这样子,函数名只可以相同,必须要使用使用它才行啊,然后就滥用了,不应该使用的时候也使用,也要硬取相同的函数名。
函数定义了返回值却使用不合理

这种情况, 通常见于这样的场景,我们定义了一个函数,返回值为uint32_t类型,用于表示返回是否执行成功。
但是哟,在实现该函数时,有的人写代码,永完返回的是OK, 不存在失败的场景,既然如此,干嘛不直接定义为void的返回值类型呢?
另外一个极端情况就是:函数内部处理了是否返回成功或者失败,但是在函数调用处,没有判断返回值的结果,却直接使用(void)把函数的返回值强转了,规避了工具的检查。 例如:(void)GetObj();
简单的代码复杂化

一种情况是这样的: 一个小小的功能,明明可以10行代码实现的,逻辑很简单, 有些开发同事非得给你写复杂,必须得整上一个设计模式才行,场景明明不匹配,也必须硬往上靠。  这种情况常见于那些刚学习了一点设计模式的新手,学习了,就要找地方使用上它,只要动手写代码,就得想想用什么设计模式。 还有一种情况是这样的,一个普通函数可以搞定的,非得整个模板函数或模板类出来,问他为什么?回答方便后续扩展,通用! 但是95%的可能后续都不会扩展了。 最后一种情况就是过设计,过设计!!!  过多设计不需要要的数据结构以及接口,白白让代码更复杂。 写代码时考虑扩展性和灵活性没有问题,但是需要有个度,在预期范围内可以超前设计,但是要把握一个度。
注释问题

....
接下来,剩余的内容去视频继续看。。 (兄弟们实在对不住了,我B站UP主视频播放量太少了,经常个位数,靠兄弟们涨点人气,让大家过去给点个赞,投个币啥的)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表