开源项目规范化指北
前言:
又是迟来的更新喵~
说实话咱自ruri开始开发以来就一直在想规范化问题了,虽然大概率不会有人帮咱写代码,(termux-container拆成三个项目结果都是咱自己维护可真寂寞),不过一个规范的项目自己看着也会心情愉悦嘛喵~
话不多说咱还是开始今天的正文。(虽然可能会很水)
项目使用方法规范化:
尤其对于只有命令行的项目,一个易懂的命令格式/调用方法十分重要。
曾有人问过,如果有人对Qemu说:“你不觉得自己的使用方法很难吗?”,Qemu会如何回答?
博主:“我又没让你用”。
可那只是因为它是Qemu,要是咱写的东西需要这么复杂的命令行,估计这辈子都没人用了喵呜~
所以,建议还是Keep it simple&stupid吧(可不是像archlinux一样直接拒绝萌新使用啊喵!!!)
文档规范化:
如果是在Gayhub这种国际社区发布,墙裂建议默认Readme为英文文档(机翻就算了,老外自己有谷歌翻译的说)。
当然国内社区的话随意。
但文档内容一定要说明重点,如项目介绍,使用方法,使用的外部项目等。
选择合适的许可证:
自己写的代码的话随意,如果有借用外部源码的话还请遵守许可内容。
几个常见许可证:
(通用前提:项目无担保,出事我不管)
MIT:使用代码的话记得说明这里面有我写的,剩下的我就不管了。
BSD:再次发布还请保留原许可,不许拿本人的名字来宣传喵!!!
Apache:再次发布还请保留原许可,并注明修改部分。
GPL:修改后必须开源,衍生代码必须开源,属于最正统的开源许可。
配置项目构建/安装过程:
Makefile不只可以用在C/C++程序上,它也可以方便的配置如代码调试,软件打包,代码静态检测/格式化等过程。
也可以使用自己熟悉的语言如shell,batch等,但记住,尽量让用户输入较少的内容,哪怕开发者为此要写更多的内容,这样才会受欢迎喵~
代码规范化:
配置格式化工具:
再严谨的编写过程也不如直接配置一个代码格式化工具,如clang-format, shfmt等。
可以直接集成到Makfile等地方中,比如咱的项目中经常配置的make format
命令。
至于.clang-format之类的文件,实在懒得自己修改的话那就偷一份吧喵~(当然咱是自己写的)
测试前尽量先静态检测代码:
最好配置一个如shellcheck,clang-tidy之类的代码检测工具,同时也会让代码更加规范。咱在ruri中就配置了一个make check
命令。
注释规范化:
尽量使用英语注释,重要/难懂的地方一定不能因为自己懂就不写注释了,哪天忘了的话只有上帝知道为啥能跑了。
魔数啥的一定要注释,当然咱也不觉得自己能写出来WTF那种大神级代码就是了。
命名规范化:
ijk啥的循环体/特别短的函数里暂时用一下也是可以的,但是一定要让人一眼就能看出来是什么意思。
命名一定要有含义,脸滚键盘打变量名的话,清理屎山时会后悔的吧喵~
变量类型匹配:
举个栗子,对于sizeof()的返回值,你是否还在让它与int去比较大小?是否习惯性的会去写for(int i=0; i<(sizeof(x)/sizeof(x[0])); i++)?
但事实上,sizeof()返回的是size_t(unsigned long on x64)!
你可能觉得这没什么问题,但强制类型转换毕竟不安全,而且别忘了拼xx与序列化与反序列化不匹配漏洞的故事。
细节优化:
少用全局变量,变量要正确初始化,语法格式要规范,指针使用前一定要判断是否为空,申请的内存要好好释放;哪怕不会影响最终执行也要考虑下变量/函数声明的位置顺序…(等下咱貌似比妈妈都罗嗦)
没用的代码说删就删:
如果确定某段代码已经没用了,那就直接把它删了吧。
要是留着的话至少别人见了会很困扰吧喵~
顺便说一句,return后的else是个坏文明哦喵~
后记:
说是指北,但愿没直接给各位带沟里。
那么,下期再见了喵~
EOF