代码入门第一篇--变量

前言:新手上路,请多指教,欢迎交流,文中有些例子举例可能不太好,欢迎指正;本文暂时先丢弃顺序,后续有空再整理

本文在《代码大全2》中能找到完整的文字描述,本文只是简单记录一下自己的读书心得

本文的代码举例有可能有错误,毕竟是直接写的
重在表意 ,大概意思到了就好了

阅读规则、要求:待定、简单C#、lua语法知识,或者甚至不用

1. 变量的声明应该遵循某种命名规则

常用的命名方法有两种,一种是 Pascal 命名法(帕斯卡命名法),Pascal 命名法是指每个单词的首字母大写;
另一种是 Camel 命名法(驼峰命名法)。Camel 命名法是指第一个单词小写,从第二个单词开始每个单词的首字母大写。

Pascal 命名法:StudentName、StudentClass
Camel 命名法:studentName、 studentClass

**命名根据项目中怎么用来决定** 

2.在声明变量的时候,需要初始化它的值 , 在靠近变量第一次使用的位置初始化它

在靠近变量第一次使用的位置初始化它,能让你更直观的了解到这个变量是做什么的,涉及到了什么的

//**不规范举例**, sum变量
int sum = 0;
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
//中间省略N行没用到过sum的代码
sum = GetArrarySum(intArrary);
//**规范举例** sum 变量
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
//省略N行没用到过sum的代码
int sum = 0;
sum = GetArrarySum(intArrary);
//或者可以写成
int sum = GetArrarySum(intArrary);

好处:能直接看到它的值是什么,便于阅读(扩展起来甚至可以说是便于维护…)

3.注意变量的生命周期,尽可能的缩短变量的存活时间

举例如2

目的:短生命周期,说明你的变量所涉及到的其它代码、逻辑更少,也就是说你这个变量的目的性更强,和其它语句的耦合更少

4.每个变量只用于单一的用途

//**不规范举例** 
int sum = 0;
int tempSum = 0;
for(int i = 0; i < 10; i++){
	tempSum += i;
}
sum = tempSum;
//上面是tempSum的一个使用位置

//下面是tempSum的第二个使用位置
//交换两个值
int valueLeft= 5;
int valueRight = 10;
tempSum  = valueLeft;
valueLeft= valueRight;
valueRight = tempSum;

坏处:不符合 2、3规则

//**规范举例**
int sum = 0;
int tempSum = 0;
for(int i = 0; i < 10; i++){
	tempSum += i;
}
sum = tempSum;

//交换两个值
int valueLeft= 5;
int valueRight = 10;
int temp  = valueLeft;
valueLeft= valueRight;
valueRight = temp;

好处:变量涉及的区域少,可以快速知道变量的作用等…

5.使变量有自说明性

良好的变量应该有自说明性,甚至可以让你不用注释、或者让你读到这段代码的时候不需要进行过多的思考,我是谁我在哪为什么

//**不规范举例,包含函数的命名,可能过于夸张**
int a = daqlwijwd(hdstgsg);

//求解:a 是什么? ,daqlwijwd这个方法做了什么
//**规范举例**
int sum = GetArrarySum(arrary);

//求解:sum 是什么? ,GetArrarySum这个方法做了什么

6.较长的名字适用于很少用到的变量,或者全局变量,而较短的名字适用于局部变量或者循环变量

同样的,可读性直接上升,使其成为一个条件反射式的东西,当你读到这样命名规范的时候,你可以知道这是做什么的

比如项目中用到的命名:UPDATE_QUEST_RED_DOT
我一看到这个我就知道,这是一个全局的数据,是关于任务红点事件

7.变量的命名使用反义词 ----布尔类型

布尔类型只会有两种值,true 、 false
因此使用反义词可以使你的代码可读性大增

//试试能不能一眼知道值是做什么的
bool startDownload = true;
bool endDownload = false;

bool startWalk = true;
bool endWalk = false;
//这应该不难吧

8.给临时变量命名,使其可读性增加

--这个例子用 lua 代码
for i,v pairs(xxx) do
	print(v) -- 求问v是什么
end

--
for id,name pairs(xxx) do
	print(name) -- 求问name 是什么
end

9.使用肯定的布尔变量名

使用正向的布尔变量命名更符合人的习惯,虽然双重否定也是能读懂的,但是毕竟没有单重否定直接,而且更简单

--**不规范举例**
local notFound
if not notFound then 
	--todo something
end

--**规范举例**
local found
if not found then 
	--todo something
end

10.提取相同属性或者类似的变量,然后把他写为 枚举类型

//定义四季
const int spring = 0;
const int summer = 1;
const int autumn = 2;
const int winter = 3;

//改为season或许更合适
enum Season{spring, summer, autumn, winter};

11.避免使用神秘的数字,比如100或者123456

可读性!!!
易维护!!!

//有一个方法,传大于0的int参数 N 进去,作为天数,计算 N 天 有多少秒
int GetSecondsByDay(int day){
return day * 24 * 60 * 60}

这样写有什么弊端呢
1.可读性,24 是什么? 60是什么?,第二个60又是什么?
2.维护问题,万一后面一天变成25个小时呢,你是不是要单独进来这里改24改成25?或者23小时呢?

//在某个地方定义 时 分 秒
//所有地方共用这个时分秒,同步所有数据
//更改的时候只更改这里就好了
//(但是项目中肯定不是这样的,此处只是举个简单的例子)
const int Day = 24;
const int Hour = 60;
const int Minute = 60;
//有一个方法,传大于0的int参数 N 进去,作为天数,计算 N 天 有多少秒
int GetSecondsByDay(int day){
return day * Day * Hour * Minute ;
}

12.使用布尔变量来简化复杂的判断

适用于 if (条件){
//todo
}
条件 语句过长的情况

bool IsPlayerDie(生命值,是否直接死亡){
	if(生命值 <= 0 && 没有蛮王大招 && 没有复活甲 || 是否直接死亡)
		//死亡
	}

//改成
bool IsPlayerDie(生命值,是否直接死亡){
	bool 普通死亡判断 = 生命值 <= 0 && 没有蛮王大招 && 没有复活甲 
	if(普通死亡判断 || 是否直接死亡){
		//死亡
	}
}

13.可以使用结构体来简化参数列表

当传递的参数过多的时候,试试把参数优化一下,做成一个结构体?

//打印学生的资料
void PrintStudentInfo(int id, string name, int classNumber, 
					string address../*忽略n个属性*/)
{
	print(id);
	print(name);
	print(classNumber);
	print(address);
	...
}

//改写:
void PrintStudentInfo(Student student)
{
	print(student.id);
	print(student.name);
	print(student.classNumber);
	print(student.address);
	...
}

14不要把局部数据写成全局数据

明明是一个方法里面用到的变量,其他地方并没有用到,为什么我要把它写在方法外面?

15.使用全局数据的时候,应当用命名突出作用

举例如 6,我能一看看出这个变量做什么用的,是关于哪里的,不是因为我看代码厉害,而是别人的代码写的规范

也许未完…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值