编写可读代码艺术笔记
来源:互联网 发布:软件如何设计接口 编辑:程序博客网 时间:2024/05/21 22:58
变量如何命名
- 变量名要具体,如匈牙利表示法,将变量含义与类型结合
- 有单位的变量可在名字中添加变量。如:start_ms
- 空泛名字的生命周期应较短,如tmp。
- 循环迭代器中变量可与要索引的数组名结合,如:
for (int ci = 0; ci < clubs.size(); ci++) for (int mi = 0; mi < clubs[ci].memebers.size(); mi++) for (int ui = 0; ui < users.size(); ui++) if(clubs[ci].memebers[mi] == users[ui]) count<<"user"<<ui<<"is in club"<<endl;
- 小的作用域使用短的名字
- 命名极限用max min 避免limit,范围用first last
- 布尔值变量:用is has can should 等词更明确。
- 方法命名可表现出方法的计算代价,如getMean()更倾向于表示直接得到均值,computeMean()则说明调用该方面会有一定计算代价。
代码的审美
- 基本三原则:1. 使用一致布局 2.相似代码看上去相似 3.相关代码行分组,形成代码块。
- 重新安排换行保持一致和紧凑,方法来整理不规则的东西
- 不要将所有方法归为一个代码块,应按照逻辑分组
该写什么样的注释
- 注释不应用于解释不好的命名。
- 几种标记:TODO(待完成) FIXME(已知无法运行的) HACK(对一个问题不得不的粗糙解决方案) XXX(存在重大问题)
- 对代码可能产生的问题做解释
- 常量务必加注释说明为什么为该值总结性注释用于长函数
控制流的易读
- if else 语句先易后难
- 嵌套变线性更好。
拆分超长表达式
- 正向逻辑太复杂可考虑反向
- 德摩根定理应用如:
if(!(a && !b)) <=> if(!a || b)
变量与可读性
- 减少无价值的临时变量
- 缩小变量作用域如:javascript中变量总是用var关键字来定义。利用闭包创建私有变量eg:
某个长期存在的变量只在某个函数中使用
submitted = false; var submit_form = function (form_name) { if (submitted) { return; } ... submitted = true; }; >>> var submit_form = (function (){ var submitted = false; return function(form_name) { if (submitted) { return; } ... submitted = true; }; })();
抽取不相关问题
- 将可作为工具,辅助的代码块抽取为函数,便于测试及阅读
一次只做一件事
- 函数功能 和数据格式处理之类分开。
- 记一个小tip:javascript中||可以依次找到第一个‘真’值。避免冗余的if语句判定。如下代码段 1优于2
var first_half, second_half; if(country === "USA") { first_half = town || city || "Middle-of-Nowhere"; second_half =state || "USA"; } else { first_half = town || city || state || "Middle-of-Nowhere"; second_half = country || "Planey Earth"; } return first_half + "," + second_half;
var second_half = "Planet Earth"; if(country) { second_half = country; } if (state && country === "USA") { second_half = state; } var first_half = "Middle-of-Nowhere"; if (state && country !=="USA") { first_half = state; } if (city) { first_half = state; } if (town) { first_half = town; } return first_half + "," +second_half;
把想法变成代码
- 用自然语言可描述代码要做什么
例如:
$is_admin = is_admin_request(); if($document){ if (!$is_admin && ($document['username'] != $_SESSION['username'])) { return not_authorized(); } }else { if (!$is_admin) { return not_authorized(); } }
实际是进行授权有两种方式1.admin 2.拥有当前文档 否则无法授权。代码的更优写法为
if(is_admin_request()) { // } elseif ($document &&($document['username'] == $_SESSION['username'])) { // } else { return not_authorized(); }
少写代码
阅读全文
0 0
- 编写可读代码艺术笔记
- 编写可读代码的艺术笔记
- 编写可读代码的艺术
- 编写可读代码的艺术
- 编写可读代码的艺术
- 编写可读代码的艺术
- 编写可读代码的艺术
- 编写可读代码的艺术
- 编写可读代码的艺术
- 编写可读代码的艺术 读后感
- 读<<编写可读代码的艺术>>总结
- 读书笔记-编写可读代码的艺术[上]
- 读书笔记-编写可读代码的艺术[中]
- 读书笔记-编写可读代码的艺术[下]
- 编写可读代码的艺术 读后感(一)
- 编写可读代码的艺术 读后感(二)
- 编写可读代码的艺术 读后感(三)
- 编写可读代码的艺术 读后感
- Python:多线程、消息队列编程
- SpringBoot配置属性之DataSource
- Android测试-unitTest
- oracle-日常小计——oracle cmd 命令行形式导入 sql文件
- c语言下如果动态获取指针型数组存放数量大小
- 编写可读代码艺术笔记
- Android ContentResolver 获取手机联系人
- Tomcat应用服务器被黑客 肉鸡攻击 记录
- 机器学习中的bias和variance、欠拟合和过拟合
- TensorFlow运作方式入门
- Linux拷贝
- 控制器的生命周期
- (78)Collection类:reverseOrder
- 软件项目需求分析:非功能性六大点