1.语句是顺序从上往下阅读的
那么代码的执行也有先后顺序,所以对于执行顺序重要的代码,使其的顺序明朗是一件重要的事情
尽量让程序名能显示你的依赖关系,组织代码时依赖关系变得非常明朗
//此处使用书中的例子
Data data = GetDataById(id);
Result result = GetResultByData(data);
print(result);
此处顺序为 1.获取数据,2.根据拿到的数据获取结果,3.打印结果
依次执行,顺序不能变,尽量让你的代码看起来有明确的顺序要求
避免其他人修改代码的时候更改顺序(虽然说一般不会乱改代码,但是万一呢)
把相关的代码组织在一起
此处和第一篇的类似
“2.在声明变量的时候,需要初始化它的值 , 在靠近变量第一次使用的位置初始化它”
2. if 语句
首先写正常的、常见的代码路径
正常的顺序、常见的判断写在前面更适合阅读、理解,看起来更为系统
if 后面跟随一个有意义的语句
有时候会有这样的情况:
你在某些情况不会做什么事情,但是相反你就会做事情
有人可能会写成这样(是我了):
if ( 不对 ){
//不做什么事
}else{
//做某些事情
}
//那你可以写成(我是伞兵,这不废话吗)
if ( 对 ) {
//做某些事情
}
利用布尔函数处理复杂的判断
//需求:传入一个int 类型的月份,判断是大月还是小月,是什么就输出什么(“大月”、“小月”)
//简单版
//1、3、5、7、8、10、12大
//2、4、6、9、11 小(2是平,不管了,简单举例吧
void PrintMonthType(int month){
if(month == 1 || month == 3 || month == 5||month == 7||
month == 8 || month == 10|| month == 12){
print("大月")
}else {
print{"小月"}
}
}
---------------------------------------------------------------------
//改进版:
void PrintMonthType(int month){
if(IsBigMonth(month)){
print("大月")
}else {
print{"小月"}
}
}
//判断某个月是否是大月
bool IsBigMonth(int month){
if(month == 1 || month == 3 || month == 5||month == 7||
month == 8 || month == 10|| month == 12){
return true;
}else {
return false;
}
}
---------------------------------------------------------------------------------
还应该注意代码安全性,上面的例子中就没判断月份是否合理,没考虑到所有的情况
增加简单考虑month值问题
bool IsBigMonth(int month){
if(month == 1 || month == 3 || month == 5||month == 7||
month == 8 || month == 10|| month == 12){
return true;
}else if(month == 2 || month == 4 || month == 6 || month == 9 || month == 11) {
return false;
}else{
print(error);
return false;
}
}
还有问题,自己考虑吧
把初始化的代码紧放在循环前面,需要确保你的循环,能够正确的终止,并且让你的循环终止条件,看起来明显,不要为了终止循环而胡乱改动循环的下标
在你找到需要的纸的时候,提前退出循环,避免多余的计算
如果我要在0 到100000000中找到值为9527的数,简单遍历
int target = 0;
for(int i = 0; i <= 100000000; i++){
if( i = 9527){
target = i;
// 不break
}
}
那我要在这里进行 100000000次的判断,而且后续的判断都是无效的了,代码的冗余计算非常多
因此我们在确定找到正确的值的时候,需要提前结束循环,避免多余计算
表驱动
表驱动可以简化代码,但可能会增加内存的消耗
//需求:获取12月份中某一月的天数,2月取28
void PrintDaysAtMonth(month)
{
if(month == 1 || month == 3 || month == 5||month == 7||
month == 8 || month == 10|| month == 12){
print("31");
}else if(month == 4 || month == 6 || month == 9 || month == 11) {
print("30");
}else if(month = 2){
print("28");
}else{
print("0");
}
}
//使用表,不注意语法正确了,表意!表意!表意!
DaysOnMonth = {31,28,31,30,31,30,31,31,30,31,30,31}
void PrintDaysAtMonth(month)
{
//此处未判断month的合法性,略
print(DaysOnMonth [month].ToString())
}
甚至可以用来做方法的调用,具体可以查查资料
也许未完…勿待续