程序设计实践(一)
程序设计实践(一):
风格、设计和实现
王新宇
2004.10.16
Outline
风格
原则
示例
设计和实践
马尔可夫链(Markov Chain)
C, JAVA, C++实现
风格
风格的主要作用就是使代码容易读,无
论是对程序员本人,还是对其他人。
好的风格对于好的程序设计具有关键性
作用。
风格
好程序
符合语法规则
修正错误
运行得足够快
实际应该做的远比这多
原则
根源于实际经验
不是随意的规则或者处方
应该
直截了当的逻辑
自然的表达式
通行的语言使用方式
有意义的名字
有帮助作用的注释
一致性
不应该
小聪明的花招
非正规的结构
名字
名字应该是非形式的、简练的、容易记
忆的,最好是能够拼读的
一个变量的作用域越大,名字所携带的
信息就应该越多
全局变量使用具有说明性的名字
名字
局部变量用短名字
按常规方式使用则可以采用极短的名字
i,j循环变量 p,q指针s,t字符串
for(theElementIndex=0;theElementIndex<
numberOfElements;theElementIndex++)
elementArray[theElementIndex]=
theElementIndex;//不好
for(i=0;i
elem[i]=i;
名字
匈牙利命名法
Char chGrade
BOOL bEnable
Int nLength
WORD wPos
LONG lOffset
DWORD dwRange
指针 pDoc
远指针 lpszName
32位字符串指针 lpszName
32位常量字符串指针 lpszName
Windows对象句柄 hWnd
名字
保持一致性
Class UserQueue{
int noOfItemsInQ, frontOfTheQueue,
queueCapacity;
public int noOfUsersInQueue(){…}
}//不一致
Class userQueue{
int nitems,front,capacity;
public int nusers(){…}
}
名字
函数采用动作性的名字(一般来说)
getTime()
名字
名字要准确
Public bool inTable(Object obj){
int j =this.getIndex(obj);
return (j==nTable);
}//返回结果与名字不符
名字
法雷序列实习中不好的名字
分子fenzi,分母fenmu
函数不采用动作形式
panduan(), judge(), huzhi(), yuefen(),
dividecheck(), gongyue()
表达式和语句
写最清晰的代码
通过给运算符两边加空格的方式说明分
组情况
通过格式化的方式来帮助阅读
表达式和语句
用缩行显示程序的结构
for(n=0;n<100;field[n++]=‘\0’);
*i=‘\0’;return(‘\n’);//不要在一行写多个语句
for(n=0;n<100;field[n++]=‘\0’)
;
*i=‘\0’;
return(‘\n’);
for(n=0;n<100; n++)
field[n]=‘\0’;
*i=‘\0’;
re