1.前言
红警1开源代码重现江湖。这个20年前甚至25年前的代码,让我们所有后来者都惊叹不已。这是一门艺术的普遍存在,其优秀的代码是一款RTS游戏风靡全球的最根本保证。
它的开源链接是:https://github.com/electronicarts/CnC_Remastered_Collection
如果你想重温这段童年记忆,可以在Steam上体验这款游戏,140元。
然而,我们关注的主要是它的代码,所以我们没有发布它的游戏截图,而是关注代码。以下是我随机点击的一个文件的内容。你可以享受令人愉悦的代码。
2. 我们惊叹它的什么?
从上图我们能看到什么?我们惊讶于什么?
先来看看朋友们的评论(只选了一部分):
在我看来,我们惊人的部分至少包含三点:
清晰的代码标注语义编码规范小而精的逻辑实现
2.1 清晰的代码注释
我们可以看到非常工整的文档头标注(图1),详细的方法标注(图2),以及代码行之间的逻辑标注(图3)。这些注释不仅仅是简单的重复代码,还详细展示了代码背后的业务逻辑,这样我们就不用猜测这样做的目的,只需要阅读代码就可以知道应该在哪里使用。最夸张的是第三个。在具体的实现中,注释甚至比代码还要大。
2.2 语义化的编码规范
,我们可以看到它明显的语义编码,也就是在逻辑实现部分,我们可以尽可能少的考虑具体的实现,比如在if判断条件中,我们用一个函数来实现具体的判断,而不是直接暴露判断细节。这样有利于我们思维的连续性,从而从更高的层面对代码有一个整体的把握。
00-1010一般来说,一个功能尽量少实现,这样一个屏幕可以放下,一个功能真正能做的只有一件事,可以避免逻辑混乱,容易维护。对于复杂逻辑的详细实现,可以放入另一个函数中,从而避免一个函数包含几个层次的逻辑。
00-1010那么,在我们感叹的同时,能不能做点什么来跟上老大哥们呢?在我的Bl里。
ink发出以后,收到了上百个点赞评论,一致认为都想像20多年前的前辈一样优雅的编程。那么,我们就从最简单的、最明显改观的代码注释开始。
在Python中,代码注释其实就两种,单行代码注释(#)和多行代码注释("""""")。但是我们需要用到的地方则有4个部分:文档级、类级、方法级和行级别。下面我们分别讲解一下这些部分的组成。
3.1 添加文档级注释
我们可以看到红警文件开头的那个非常醒目的注释,它展示了整个文件的简要信息,如属于什么项目,谁在什么时候创建的,什么时候更新的,而且以一种非常规范的格式呈现在我们面前。我们能不能拥有这样酷炫的文档开头呢?答案是Yes!
首先看一下我复现的效果:
尽管看起来可能没有红警原版霸气,但是只要学会了这个技术,我们都可以创建属于自己的风格的文件头。我们只需要利用pycharm中的文件模板设置即可。它总共分为3个步骤:
首先,点击File->Settings进入设置界面,选择Editor下的File and Code Templates选项。
然后,点击Python Script(你也可以为其他类型文件设置文件头),就可以看到最右侧显式的文件模板了。
最后,只需要将我们喜欢的文件头复制粘贴进去即可,点击OK即可。
下面是我仿照红警风格自己设计的文件头,大家可以随意取用(CV一下):
当然,更多其他的这种内置变量或者自定义变量的使用方法可以参见《详解pycharm新建文件时头部的模板_oukohou-CSDN博客》。
3.2 添加类级注释
当添加完文件注释以后,我们就需要添加更加细致的注释,首先来看对于类的注释。下面的例子给出了类注释的两个部分,一个部分是直接处于类下的简要介绍,另一个则是在__init__下的注释。两个部分都是使用"""进行标记的。图上风格为pycharm自带的编码风格,也有google和Numpy风格的注释,详情可以看《Python类和方法注释规范_XerCis的博客-CSDN博客_python 方法注释》。
3.3 添加方法级注释
更加细致的注释是在方法级的注释,如下面代码所示,它注释在方法上,一个好处是可以直接指导这个函数的功能,另一个好处就是当你在查看方法时,不需要点击方法里面查看源代码,也知道它的用途、参数和返回值,这个操作我们下面会介绍。
3.4 添加行级注释
最细致的是行级注释,只注释在每一个行上,例如刚才出现过的例子。它可以用来解释一些不是很容易知道操作的目的的代码。
file="<File>"+file+"</File>" # Special operation to avoid there is no root.
3.5 其他小技巧
经过以上4级的注释,我们让代码更加的丰满了,从而能够达到红警里注释的效果。但是我们这东西可不是绣花枕头,中看不中用,它是可以实实在在帮助我们提高编程效率的。下面我们介绍一些小技巧来帮助我们更好的利用我们/其他人的注释。
3.5.1 查看方法注释
当我们费了千辛万苦注释完毕后,该怎么查看呢?一个方法就是将鼠标放置在我们想要查看的方法上,按住ctrl,就可以查看到其注释了。
另一个方法则是ctrl+Q,它用来查看说明文档呈现的注释,两者的不同大家可以通过下面的图和上面的图对比可得。
3.5.2 生成说明文档
就像刚才讲的,这些都是在代码里查看的,如果我们想生成一个工业级的软件说明文档该如何呢?这么多注释不能白写了呀。这时候我们就可以使用Sphinx来帮助我们实现自动化的说明文档生成,详情可以看《Sphinx入门——快速生成Python文档》。
3.5.3 打包项目所需依赖包
当我们代码也准备好了,说明文档也准备好了,距离交付别人就只差一个依赖包了。我们的项目可能会依赖很多第三方的包,如果不给别人一个依赖清单,那么别人也没有办法非常容易地复现你的程序,因为总会报各种各样的错误。这时候,我们又需要另一个神器了pipreqs。
首先使用命令行执行pip install pipreqs。
然后进入项目的文件夹里,执行下面的命令:
pipreqs ./ # 报错就执行下面这条pipreqs ./ --encoding=utf-8
这样就会生成一个requirement.txt文件,里面就是我们的依赖包了,等到再复现的时候,只需要执行pip install -r requirement.txt即可重装这些依赖了。
4 小结
至此,我们基本上讲述了如何实现教科书级的红警开源代码需要注意的事项,为以后我们更好地编码打下了基础。在将来,我们将会磨砺自己的编程技巧,终有一天做出一流的艺术品,为整个虚拟世界真真正正地贡献自己的一份力量!
本人技术博客同步更新,欢迎关注:刘炫320的博客_CSDN博客-算法编程习题解答(java版),机器学习习题集,leetcode领域博主
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/40315.html