一、变量的要求
变量名
1.简短有意义:
合适: student_count,student_ids,student_enable_list, water_price
不合适: numberOfItemsInTheCart, totalPriceOfTheOrderInTheShoppingCart,temp, data,list
2.变量名之间不要太像:
合适: totalAmount, discountRate
不合适: totalAmount, totalAmt
3.别缩写
合适: maximumValue, transactionDate
不合适: maxVal, transDate
使用变量
1.常量先定义后使用
合适:int dayOfWeek = 7 var result = sum / dayOfWeek
不合适:var result = sum / 7
2.类优先于字典
因为类提供了类型检查、支持继承、易开发(IDE提示)、易维护、可读性强
二、函数的要求
1. 命名简短且有意义,使用动+名组合
// 不推荐的命名
void DoStuff() { ... }
// 推荐的命名
void CalculateTotalAmount() { ... }
2. 单一职责
每个函数应当只做一件事。这有助于提高代码的可维护性和重用性。函数的职责应当清晰,避免承担多个任务。
反例(违反了单一职责,一个函数三件事):
1.难复用,有时候只想调用其中一个逻辑,而不是三个。
2.难维护,修改其中一个逻辑可能引发蝴蝶效应。
3. 无副作用(和单一职责差不多)
函数除了其明确的功能外,不应有其他副作用。副作用是指函数在完成主要任务外,还改变了程序的状态或依赖于外部状态。
4. 入参少(不超五个)
函数的入参应尽量少。过多的参数会降低函数的可读性和可维护性。如果函数需要很多参数,可以考虑使用类/元组来封装参数。
5. 函数之间不重复
避免函数之间的功能重复。函数应尽量抽取出并复用已有功能,避免重复代码。
6. 循环复杂度小
优化循环中的复杂度,使用提前返回(return)、跳出循环(break)、继续循环(continue)来简化逻辑,提升代码的可读性。
三、注释的要求
简洁+明确
正例如下
反例如下
1.太简单:// 获取分组列表
2.太罗嗦:// 这个函数会根据输入的学生列表,处理所有学生数据,然后返回一个包含按组分类的学生数据的列表
3.胡言乱语:// 处理学生数据
4.浪费口舌:// 调用函数
四、类的要求
1.类名简洁清晰
2.方法短少
长方法拆分
3.高内聚 低耦合
1.高内聚:一个类中所有方法和属性都应该紧密相关(例如学生管理类,方法可以是学生注册,学生退学等,它们都和学生字段有密切关联,不要加一些毫无相关的方法,例如图书馆账号注册等,应该放在图书管理类)
2.低耦合:一个类的改变不应该对其他类造成太大的影响
反例1:winform界面逻辑和业务逻辑写在一起,相互依赖;
反例2:学生管理类中直接new一个对象,调用它的方法,这个对象的方法被修改及其可能影响到学生管理类;
调整方法:依赖注入、调用接口(而不是直接调用实现)
4.SOLID 原则
【包含内容】单一职责、开闭原则、里氏替换、接口隔离、依赖倒置
- 单一职责:一个类一个功能(例如学生管理类,就管理学生信息就行了,不要又配置连接字符串,又算法分析)
- 开闭原则:增加需求时,应该扩展类而不是修改类(特别是不应该修改高层代码)
- 里氏替换:子类继承父类方法和属性时,子类必须遵循父类的接口和行为,确保不会破坏已有功能
- 接口隔离:接口应专注于单一功能,避免将多种功能耦合在一个接口中(例如分析学生近期成绩涨幅,不要耦合成分析学生近期成绩涨幅+不合格数量+优秀数量+年级排名,这样复用性就降低了)
- 依赖倒置:调用接口而不是调用实现(高层模块不应该依赖低层模块,两者都应该依赖抽象)。
(未完待续。。)