千家信息网

编程开发中如何写代码

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章给大家分享的是有关编程开发中如何写代码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 标识符(命名规则)标识符应当直观且可以拼读,可望文知意,***采用英文单词
千家信息网最后更新 2024年11月24日编程开发中如何写代码

这篇文章给大家分享的是有关编程开发中如何写代码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1. 标识符(命名规则)

标识符应当直观且可以拼读,可望文知意,***采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名。长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪,例如:

好的命名 int student_age,teacher_age;  坏的命名 int age1,age2;

但名字是否越长越好呢?不是的,请看下面的例子:

struct student       {            int student_age;    /* 坏的命名 */           char *student_name;       }  struct student       {            int age;               /* 好的命名 */           char *name;       }

为什么前者不好呢,因为很多余,结构体的名student已经表达了student_age前面的student的意思。再比如字符串拷贝函数:void StringCopy(char *str1, char *str2);我们很难搞清楚究竟是把str1拷贝到str2中,还是刚好倒过来。可以把参数名字起得更有意义,如叫strSource和trDestination。这样从名字上就可以看出应该把strSource拷贝到strDestination。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。

2. 运算符的优先级

如果代码行中的运算符比较多,应该用括号确定表达式的操作顺序,避免使用默认的优先级。因为熟记各运算符的优先级是比较困难的,就算你熟记并正确使用了,写出来的代码也容易产生歧义而使其可读性较差。

好的风格 if ((a | b) && (a & c))  坏的风格 if (a | b && a & c) 

虽然后者和前者功能一样,但后者是很恐怖的,难以阅读。

3. 不要编写太复杂的复合表达式。

复合表达式使用在适当的场合可以使代码更加简洁,但不能因为这个简洁而带来理解的复杂。

例如:

max = a > b ?(a > c ? a : c) : (b > c ? b : c) // 复合表达式过于复杂

应该修改为:

max = a;  if(max < b)  {  max = b;  }  if(max < c)  {  max = c;  }

上面的if的执行语句只有一行也加了{},是因为遵循了"不论if、for、while的执行语句有多少都要加{}"的规则,这样可以防止书写失误,当这样的语句层层嵌套的时候你就会知道这样做的好处。

4. 各种数据类型与零值比较

在JAVA中,对于布尔变量flag,与零值(注意:不是0)比较的方式自然是if (flag== TRUE)或者if (flag == FALSE),但是在C/C++中这却不是正确的选择。正确的选择应该是if (flag)或者if (!flag),这是因为TRUE的值究竟是什么并没有统一的标准,例如Visual C++ 将TRUE定义为1,而Visual Basic则将TRUE定义为-1。if (flag == TRUE)、if (flag == 1 )、if(flag == FALSE)、if (flag == 0)都属于不良风格。

应当将整型变量用"=="或"!="直接与0比较。

if (value == 0)  if (value != 0)

不可以写成

if (value) // 会让人误解 value是布尔变量  if (!value) 

指针变量的零值是NULL。尽管NULL的值与0相同,但是两者意义不同。对于指针变量p ,它与零值比较的if语句如下:

if (p == NULL)  if (p != NULL)

不要写成

if (p == 0) // 容易让人误解p是整型变量  if (p != 0) 

5. 多层if语句

不要出现这样的结构:

if (condition1)   {      …       if (condition2)       …         if (condition3)         …           …   }

而应该代之以if-else-if结构:

if (condition1)   {   …   }   else if (condition2)   {   …   }   else if (condition3)   {   …   } …

这样的结构条理清楚,前者则容易导致写到后来自己都不知道写了些什么的事实。可以用switch语句替换嵌套的if语句来实现多分支选择。

6. 改善循环的效率

对于字符串name,看下面的循环:

for (i = 0; i < strlen(name); i++)效率明显差于下面的循环:  n = strlen(name);  for (i = 0; i < n; i++)

后者只要计算name的长度一次。

7. 少用、慎用goto语句,并不禁用

goto语句能从多重循环体或者代码堆里一下子跳到外面, 例如:

{ …  { …  { …  on error goto errorhandler;  }  }  }  errorhandler:  …

在Visual Basic中这一招是常用的。

8. 消除魔鬼数

魔鬼数者,没名字的常数也,你若看英文资料,它们的说法是magic data,我们的一些作品将其翻译为"魔术数",我更愿意将其翻译为"魔鬼数",因为它是一个导致代码的可读性极差的"魔鬼"。

假使你在程序里写下下面的一段代码:

for (i=0; i < 100; i++);for (i=0; i < 99; i++);

谁都不知道100、99是个什么玩意,你可能意味着100是范围的边界(***值),就应该给出定义,代码的读者才能明白你的意思:

#define MAX 100 /* C语言的宏常量 */  const int MAX = 100; // C++ 语言的const常量  for (i=0; i < MAX; i++);for (i=0; i < MAX-1; i++)的意思就很清楚了。

并且如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。

例如:

const float RADIUS = 100;  const float DIAMETER = RADIUS * 2;

9. 函数返回值

函数名字与返回值类型在语义上不可冲突,C标准库函数getchar违反了这一规则。

例如:

char c;  c = getchar();  if (c == EOF) 

按照getchar名字的意思,将变量c声明为char类型是很自然的事情。但不幸的是getchar的确不是char类型,而是int类型,其原型如下:

int getchar(void);

10. 乱指一气的指针

"野指针"者,乱指一气的指针也,它不是NULL指针,是指向"垃圾"内存的指针。野指针是很危险的,是经常导致bug的原因,它的成因主有两种:

一是指针变量没有被初始化。在C/C++中任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如:

char *p = NULL;  char *str = (char *) malloc(100);

二是指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。

感谢各位的阅读!关于"编程开发中如何写代码"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

指针 变量 代码 语句 名字 函数 类型 面的 常量 意思 结构 表达式 魔鬼 循环 复杂 清楚 优先级 字符 拷贝 规则 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 黑龙江pdu服务器电源价钱多少 全球最大最快的服务器 互联网数据库2013年4月自考 数据库安全与维护总结 gmod13服务器 宁波奉化附近戴尔机架式服务器 我要观看网络安全知识宣传手抄报 数据库服务渗透测试环境 实验七 数据库的安全及管理 正规软件开发要求 山东金腾网络技术服务有限公司 数据库8001 xml 结构 到数据库 苏州应用软件开发公司如何选择 西电出版社 网络安全 数据库的3个文件扩展名是 服务器内存可以用什么代替 网络安全宣传团课新闻稿大学生 金泽网络技术有限公司 金砖会议网络安全 湖南服务器光模块虚拟主机 电视keep显示与服务器断开 驻马店捷丰网络技术有限公司 软件开发一般需要什么技能 数据库delect用法 网络技术与移动互联 小学学校网络安全情况记录表 秒开iptv服务器占用网络资源 网络安全法个人信息保护 四川大学Entrez数据库包括
0