算法设计与分析第一章作业

1. 代码规范

文件名

文件名须全部小写,下划线(_)和短横线(-)
源文件采用 UTF-8 编码

非空代码块:K&R 风格

  1. 左花括号不另起新行
  2. 左花括号后紧跟换行
  3. 右花括号前需要换行
  4. 如果右花括号结束了语句,或者它是函数、类、类中的方法的结束括号,则其后面需要换行。如果后面紧跟的是 else,catch 或 while,或逗号,分号以及右括号,则不需要跟一个换行

缩进:2个空格

新开代码块中代码需要加2个空格的缩进

空格

1.垂直方向上的空格

以下场景需要有一个空行:

  • 类或对象中的方法间
  • 方法体中,尽量少地使用空行来进行代码的分隔。函数体开始和结束都不要加空行
  • 类或对象中首个方法前及最后一个方法后的空行,既不提倡也不反对。

2.水平方向上的空格

水平方向的空格依位置为定,有三种大的分类:行首(一行的开始),行尾(一行的结束)以及行间(一行中除去行首及行尾的部分)。行首的空格(i.e. 缩进)无处不在。行尾的空格是禁止的。

注释

块状注释与被注释代码保持相同缩进。/* ... / 和 // 都是。对于多行的 / ... */ 注释,后续注释行以 * 开头且与上一行缩进保持一致。参数的注释紧随参数之后,用于在函数名或参数名无法完全表达其意思的情况。

本地变量的声明

1.使用const和let

所有本地变量使用 const 或 let 来声明。默认使用 const,除非该变量需要重新赋值。杜绝使用 var。

2.一次声明一个变量

一次只声明一个本地变量,let a = 1, b = 2; 这样的做法是禁止的。

3.需要时才声明,声明后尽快初始化

本地变量不要全部一次性声明在代码块的开头。声明在该变量每一次需要被使用的地方,以减少其影响范围。

4.尽量标明类型

JSDoc 类型注释可以添加在声明语句上面,或者内联到变量名前面。

文件头部注释

一个文件可以在头部有个总览。包括版权信息,作者以及默认可选的可见信息/visibility level等。文件中包含多个类时,头部这个总览显得很有必要。它可以帮助别人快速了解该文件的内容。如果写了,则应该有一个描述字段简单介绍文件中的内容以及一些依赖,或者其他信息。换行后不缩进。

类的注释

类,接口以及 records 需要有描述,参数,实现的接口以及可见性或其他适当的 tags 注释。类的描述需要告诉读者类的作用及何时使用该类,以及其他一些可以帮助别人正确使用该类的有用信息。构造器上的文本描述可省略。@constructor 和 @extends 不与 class 一起使用,除非该类是用来声明接口 @interface 或者扩展一个泛型类。

枚举和typedef注释

枚举和 typedef 需要写文档。仅有的枚举和 typedef 其文档的描述不能为空。枚举中单个元素的文档可直接写在元素的前面一行。
Typedefs 可方便地用于定义 records 类型,或 unions 的别名,复杂函数,或者 泛型类型。Typedefs 不适合用来定义字段很多的 records,因为其不支持对每个字段进行文档书写,也不适合用于模板或递归引用中。对于大型 records 使用 @record。

方法与函数

参数和返回类型需要写文档。必要时 this 也需要在文档中说明。方法,参数及返回的描述在方法的其他 JSDoc 中或方法签名中有表述,那么也是可以省略的。方法的描述应使用第三人称。如果方法重载父类中的方法,需要使用 @override 标识。重载方法需要包含所有的参数 @param 以及 @return 如果类型有变的话,如果没变也可省略。

已有代码的重新格式化

更新已有代码时,遵循以下原则:

  1. 没必要更新所有老代码以满足本规范。需要在成本与代码一致性之间找个平衡点。规范不断在演变,花大成本更新老代码需要折衷。然而,如果老文件大部分都被修改了的话,那可以顺便将其全部改为符合现在的规范。

  2. 注意控制改动范围。如果你发现需要投入大量精力去更新代码而影响了当前需求的进展,考虑将这些老代码的更新另起一个分支。

新增代码:遵循本规范

  1. 全新创建的文件应该全部遵循本规范,某些包中其他类型文件有其他规范的另说。

  2. 向一个不是遵循本规范而写的文件添加新代码时,推荐先重新格式化当前文件

  3. 如果重新格式化完不成,那么新加的代码应该与老代码尽量保持一致,但不要滥用规范。


2.数学之美第一章的读后感

本章结合始人类的历史渐渐引出语言文字的发展,并且与数字信息进行对比,并结合 “信息传输过程”、“罗萨塔石碑”、“文言文与口语”、“圣经抄写”、“莎士比亚戏剧原文”讲述了数字和语言文字有着共同的作用——传递信息。
作者告诉我们为什么会产生语言文字:人们的生活经验,作为那个时代最宝贵的资源,随着社会发展越来越多,初期人们能依靠记忆,但后来,没有人能记住所有内容,于是高效、准确记录信息的方法必须产生——即是语言文字。可以想象,对于没有衍生出语言文字的物种,只能依靠基因一点点进化来增加记忆容量。我认为这是非常缓慢的,也许这也就是为什么其他物种都被人类所支配吧,毕竟他们都不具语言文字,进化是非常缓慢的。
介绍到信息传输过程同样非常有趣,尽管经过几千年的发展,本质的原理是没有变化的。下面还要提到几个例子,比如文言文和口语。书中讲到,当时时代背景决定了每一个用物理方式记录下来的文字成本都是非常高的,所以人们惜墨如金,尽可能压缩原信息,而口语却没什么晦涩难懂。回顾历史,清代的小说像《红楼梦》很容易读懂,至于为什么会慢慢演变喃?我想也就是因为造纸术的进一步发展,降低了写字成本的原因吧。我以前总是疑惑,为什么文言文会逐步演化成白话文,今天动脑一想就明白了,并不是演化成白话文,而是本来就是白话文,演化的只是记录的文字罢了。
还有一个例子是生僻字与常用字笔画复杂度的不同。对于现在学过哈夫曼编码的我们可以轻易理解,但那时候人肯本不懂信息论的概念,源自身的需求自然而然就演变成了同样的方式。
文中还提到了许多有趣的知识和典故,也许以我的水平无法完全理解,但是也给了我一些启发。

posted on 2021-09-10 18:01  AIpoem  阅读(88)  评论(0编辑  收藏  举报