代码规范
命名
1、长度
适量使用短命名
使用场景:
-
大家所熟知的,可以使用缩写,eg. sec --- second str --- string num --- number
-
作用域比较小的变量
2、利用上下文简化命名
使用场景:已知变量所代表的意思,比如结构体User,里面的结构体变量就无需再加前缀User了
3、可读性、可搜索
变量名可以体现变量所代表的东西
注释
关于具体的代码实现思路,我们可以写一些总结性的说明、特殊情况的说明。这样能够让阅读代码的人通过注释就能大概了解代码的实现思路,阅读起来就会更加容易。
对于逻辑比较复杂的代码或者比较长的函数,如果不好提炼、不好拆分成小的函数调用,那我们可以借助总结性的注释来让代码结构更清晰、更有条理。
代码风格
长度
不能太长,不利于阅读和查看;
不能太短,比如分割成函数,分割太多时,对阅读也造成麻烦,需要频繁在函数间跳转。
单元块
小模块之间用空白空格分割;
首行不空格。
缩进
不同语句之间缩进区分。
编程技巧
1、代码分割
将代码中的模块进行抽象,能够方便阅读。
代码逻辑比较复杂的时候,将大块的复杂逻辑提炼成小的方法或函数,屏蔽掉细节。
2、避免函数参数过多
大于等于5个的时候,我们就觉得参数有点过多了。
处理方法
-
考虑函数是否职责单一,是否能通过拆分成多个函数的方式来减少参数。
-
将函数的参数封装成对象。
3、移除过深的嵌套层次
-
去掉多余的if或else语句;
-
使用编程语言提供的continue、break、return关键字,提前退出嵌套;
-
调整执行顺序来减少嵌套;
-
将部分嵌套逻辑封装成函数调用,以此来减少嵌套。
4、使用解释性变量
-
常量取代魔法数字;PI
-
使用解释性变量来解释复杂表达式;
《数学之美》第一章读后感
这一章中讲述了文字、数字和语言的历史,我们可以感受到语言和数学天然的、内在的联系。
在第一部分“信息”中,作者通过对人类早期利用声音通信的实现过程,类比今天的通信原理,引出通信模型,让人印象深刻。
第二部分“文字和数字”中,通过不同文明交流的实现得益于翻译,而翻译之所以能达成,是因为不同的文字系统在记录信息上的能力是等价的,也就是说文字只是信息的载体,而非信息本身。它本身的载体是石头还是纸张并不重要,它所承载的信息才是最重要的。
对于罗塞塔石碑的破译,对于自然语言处理有两点指导意义:1、信息的冗余是信息安全的保障;2、语言的数据对翻译至关重要。
作者先从文字出现的原因——人们头脑装不下太多信息,引出数字出现的原因——人们的财产多到需要数一数才能搞清楚有多少。
后面介绍了不同文明的进位制,也就是相当于编码。
第三部分“文字和语言背后的数学”,从象形文字到拼音文字,意型文字,引出了最短编码原理。从书写文字的难易,导致古文简洁难懂,白话冗长易懂,与今天信息科学的一些基本原理联系起来:通信时,信道宽,信息可不必压缩,直接传递;信道窄,信息需要尽可能压缩,然后在接收端进行解压缩。
《圣经》的抄写校验,背后的原理也是跟今天的各种校验相同。
读完这一章,有一种豁然开朗的感觉,原来我们现在的各种技术原理都可以跟古人的生活联系起来,作者用这种方式让我们对各种难懂的原理有了更深的了解,我觉得这是这部作品的厉害之处。“今天自然语言处理学者们研究的问题,我们的祖先在设计语言之初其实已经遇到了,并且用类似今天的方法解决了,虽然他们的认识大多是自发的,而不是自觉的。他们过去遵循的法则和我们今天探求的研究方法背后有着共同的东西,这就是数学规律。”