您的位置:首页 > 编程语言

编写可读代码艺术笔记

2017-07-19 18:33 246 查看

变量如何命名

变量名要具体,如匈牙利表示法,将变量含义与类型结合

有单位的变量可在名字中添加变量。如: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();
}


少写代码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: