用户:SenseiMaxBai查看:0 回复:1 评论:0 创建时间:2024-03-02T21:27:37
本文的起源仍然是来自一位训练师的提问,他说:“这里的列表里面怎么用了一个中文逗号还没报错呢?”我非常诧异,看向了他指向的代码:
我解释道这个符号是英文逗号,但是在逗号右边多了一个空格。诶,还别说,这么一看确实容易看错:
这么一说他就纳闷了,本来中英文逗号就不好区分,编程的时候还需要在逗号右边加一个空格,这不是跟自己的眼睛过不去嘛?但实际上,这么做还真是有说法的。首先,当然不是因为编程是外国人发明的,没有考虑到中英文符号的差别(bushi)。这么做的真实目的是为了让代码更加美观。
有人会感到诧异:啊?加不加空格,程序不是一样运行吗?没有结果的变化吧?那要什么美观呀?纯粹多此一举嘛!这个考虑是对的,但不完全对。要知道,机器确实不会因为加不加空格就会改变运行结果(极端情况除外,下文会提到),但程序是人写的呀!如果人不小心看错、写错代码了,程序不就错了吗?所以下面我们就来谈谈,加空格到底为什么会让代码更加美观。省流版在最下方~
如果是下列的情况,加不加空格确实不怎么会影响代码的“美观”:
但是,之所以看上去差不多,是因为有两个重要原因:
1. 变量的命名非常简单,都是a、b这样的单字母;
2. 运算和函数的参数形式简单,没有复杂的、多个变量的混合运算。
在刚开始写代码时,涉及到的变量、运算确实不会很复杂;然而,当代码复杂程度升高、逻辑更加多样时,代码就会又多又杂。我们举一个例子,这个函数是用来计算伤害比例的(编程语言是C++语言,IDE是Jetbrains Rider 2023):
尽管你也许看不懂整段代码,也能看出来里面有大量的变量和函数,而等号两边、逗号右边都是加了空格的,我们把这一小段截出来:
我们还是可以很清晰地看到:
1. UPropertyLibrary::GetTargetDamageDealRatio函数有四个参数,分别都是[......];
2. 变量DamageRatio的值是6个变量相乘得到的结果;
3. LoseHp函数有两个参数,分别是BaseDamage和EModificationType::Damage。
现在我们把所有“多余”的空格都去掉(float和变量名之间的空格不可删去),再看一眼:
这时的视觉效果上是不是一下子就不清晰起来了?我自己用的这个IDE叫Rider,尚且会给不同的代码不同的高亮,但如果是一些不会给高亮的IDE,识别这一小段代码将会变得异常困难......
在这里再介绍两种打空格问题的极端情况,但不会细讲原因,大家了解即可(编程语言是C++):
说了这么多,我们可以发现,我们一直追求的“美观”,并不是针对执行代码的机器,而是针对人的,因为代码是人写出来、并且要长期由人阅读的。如果你写出了不美观的代码,当时的影响也许只是看起来不舒服,但时间过久了(例如一个星期、一个月甚至更久),你会发现你完全读不懂这些代码了,甚至看着会有点反胃。在一些网游产品或大型软件(如海龟编辑器),他们的程序需要长期维护、更新,此时写出一串美观易于阅读的代码就更为重要了,否则这个软件的更新、维护工作将让编程人员付出惨痛的代价。在学习代码的前期,养成这样的好习惯是对于大家后续长期学习编程打下的一个非常坚实的基础。
省流:等号两边、逗号右边这样的地方不加空格在非极端情况下不会导致程序报错,但是会严重降低代码的可读性,这是一个非常不好的习惯,一定要逐渐纠正,在合适、需要的地方打上合适的空格。