编程语言风格概述(中)



四、对齐

代码的合理对齐能够使得代码更加清晰易读,在调试时能够更容易发现错误。

  1. C语言的风格是程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。
  2. Java的风格是程序的分界符左右大括号‘{’‘}’不必左对齐,而是

    public static void main(String[] args){

    …….

    …….

    }

  3. {}之内的代码块在‘{’右边一Tab缩进处左对齐。应注意,代码的缩进都应作用Tab键缩进,而不能使用空格键缩进。

    示例2-4(a)C语言风格的对齐,示例2-4(b)Java风格的对齐。


void Function(int x)

{

… // program code

}


void Function(int x){

… // program code

}


if (condition)

{

… // program code

}

else

{

… // program code

}


if (condition){

… // program code

}

else {

… // program code

}


for (initialization; condition; update)

{

… // program code

}


for (initialization; condition; update){

… // program code

}


While (condition)

{

… // program code

}


while (condition){

… // program code

}


如果出现嵌套的{},则使用缩进对齐,如:

{

{

}

}

示例2-4(a) C语言风格的对齐          示例2-4(b) Java风格的对齐

3.长行拆分

1.代码行最大长度宜控制在70至80个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。

2.长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例2-5长行的拆分


if ((very_longer_variable1 >= very_longer_variable12)

&& (very_longer_variable3 <= very_longer_variable14)

&& (very_longer_variable5 <= very_longer_variable16))

{

dosomething();

}


virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix,

CMatrix rightMatrix);


for (very_longer_initialization;

very_longer_condition;

very_longer_update)

{

dosomething();

}

3.修饰符*和&的位置

1.修饰符*和&的位置比较有争议,如果位置恰当,可能会引起误解。*及&运算符应该紧靠变量,因为这两个运算符的优先级比较高。

2.而在定义变量时,如:int * p;

此处推荐大家在*运算符前后各加一空格,就不会引起误解。

如在定义int * p, q;此处的p为指类型变量,而q是整型变量。

五、括号的使用及自增运算符

自增运算符包括前后自增运算符、前后自减运算符。

1、编程时应该尽量屏蔽掉前自增(减)和后自增(减)的区别;

2、i++和 ++i
应该单独成一个语句,不要把它作为一个完整复合语句的一部分来使用。

如:int m = i++ + ++i + i + i++; //这样写不但是不规范的代码,而且是不可移植的代码

或 printf("%d %d %d", i++, ++i,i); //这样写不但是不规范的代码,而且是不可移植的代码

即在 int m = i++ + ++i + i + i++;中,i的值是否增加,在i++与++i中是否已经改变是不清楚的。

在涉及到表达式优先级问题时,应用括号使运算顺序清楚,而不要只使用其运算符自身的优先级,毕竟运算符优先级不是有很多人去记很清楚的,即使能记清楚这样的代码看起来也比较费力。

六、命名规则

变量及函数的命名有多种方式,不同的系统其命名方式也不尽相同。

变量及函数的命名应尽量简洁,能够表达其意思即可。

  1. 匈牙利命名法:在变量和函数名中加入前缀以增进人们对程序的理解。

    如char类型变量前要加前缀ch,int类型变量前加i等。

    int ii, ij,ik; //
    前缀 i表示int类型

    float fx, fy,fz; //
    前缀 f表示float类型

    这样的繁琐命名方式会让绝大多数程序员无法忍受。

    2、驼峰命名法:大小写混排方式,每个字母首字母大写Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。命名规则尽量与所采用的操作系统或开发工具的风格保持一致。不要把这两类风格混在一起用。

    此处推荐驼峰命名法,类名首字母大写;函数名应采用动宾结构形式,如addChild,动词首字母应小写;变量名应统一采用小写;常量、宏定义名及自定义名(如typedef定义)为与变量区别,应统一采用大写。

    注意:

  1. 程序中不要出现仅靠大小写区分的相似的标识符。

    例如:

    int 
    x, X;  // 变量x与 X
    容易混淆

  2. 程序中不要出现变量名完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 14:42:15

编程语言风格概述(中)的相关文章

编程语言风格概述(上)

刚开始学习编程时,查找了很多资料,希望自己能够规范编程,养成一个良好的习惯,而事实证明这也是很有必要的.这篇文章是我大一的时候写的,比较粗浅,难免会有不足之处,还望批评指正. 编程语言风格概述 摘要: 很多人在学习编程时不注意编程语言的风格,以为能够通过编译就万事大吉了.这样做的危害是巨大的,导致在以后的工作和学习中难以与别人交流与合作.而在大学教育中,也很少会注意到编程风格规范问题,留下的问题难以弥补与改正. 在业界中,每个公司都有各自的规范,以致很难形成统一的风格规范,也的确没有统一的风格规

编程语言风格概述(下)

 七.指针   杜绝野指针 "野指针"不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用NULL指针,因为用if语句很容易判断.但是"野指针"是很危险的,if语句对它不起作用. "野指针"的成因主要有两种: (1)指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气.所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存.例如 c

&lt;script type=&quot;text/template&quot;&gt;是干什么的,为什么要把html写在js中? 这是什么编程语言风格,都能这样用吗?

这一段存放了一个模板.在js里面,经常需要使用js往页面中插入html内容.比如这样: var number = 123; $('#d').append('<div class="t">'+number+'</div>') 如果html很短还好说,但是遇到描述里面的这么大段,直接用字符串存储会很困难,因为不光要处理单引号,还需要很多「+」号把字符串一个个连接起来,十分的不方便.给<script>设置type="text/template&q

RESTful 架构风格概述

Outline 1. RESTful架构风格 1.1 RESTful架构风格的特点 1.1.1 资源 1.1.2 统一接口 1.1.3 URI 1.1.4 无状态 1.2 ROA.SOA.REST与RPC 1.3 本真REST与hybrid风格 2. 认证机制 2.1 Basic Auth 2.2 Token Auth 2.3 OAuth 3. 总结 1. RESTful架构风格 RESTful架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学

【编程语言】Java中的类和对象learn by Imooc

 一.什么是类和对象 * 类是模子,确定对象将会拥有的特征(属性)和方法 * 类的特点: *     类是对象的类型 *     具有相同属性和方法的一组对象的集合 * 对象的属性 *     属性-对象具有的各种特征 *     每个对象的每个属性都有用的特定值 * 对象的方法 *     方法-对象执行的操作(能干什么) * 类和对象的关系 *     类是抽象的概念,仅仅是模板 *     对象是一个你能够看得到,摸得着的具体实体 二. 如何定义Java的类 * 1.类的重要性:所有Jav

Swift编程语言SequenceType协议中的一些比较有用的接口

在Swift编程语言中,大部分容器类(比如Array.Dictionary)都实现了SequenceType协议.SequenceType协议中有不少有趣且简便的方法可用来实现我们不少实际需求.这里将简单介绍其中的map.flatmap.reduce.以及filter方法. map的原型是:@warn_unused_result func map<T>(@noescape _ transform: (Self.Generator.Element) throws -> T) rethrow

【编程语言】进程中栈空间的参数返回值以及局部变量的分布

在进程中对于局部变量是怎么分配的,以及函数是怎么调用的其实也就是讲解栈区的具体使用过程.( 下面代码图摘要于网络) 首先,我们要知道,栈中存放的是一个个被调函数所对应的堆栈帧,当函数fun1被调用,则fun1的堆栈帧入栈,fun1返回时,fun1的堆栈帧出栈.什么是堆栈帧呢,堆栈帧其实就是保存被调函数返回时下一条执行指令的指针.主调函数的堆栈帧的指针.主调函数传递给被调函数的实参(如果有的话).被调函数的局部变量等信息的一个结构. 堆栈帧结构如图所示: 首先,我们要说明的是如何区分每个堆栈帧,或

JAVA学习中Swing概述中的JFrame学习

package com.swing; import java.awt.Color;import java.awt.Container;import java.awt.event.WindowAdapter; import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.SwingConstants;import javax.swing.WindowConstants; /** *1:Swing组件通常被称作"轻量级的

Apache Spark 2.2.0 中文文档 - 集群模式概述 | ApacheCN

集群模式概述 该文档给出了 Spark 如何在集群上运行.使之更容易来理解所涉及到的组件的简短概述.通过阅读 应用提交指南 来学习关于在集群上启动应用. 组件 Spark 应用在集群上作为独立的进程组来运行,在您的 main 程序中通过 SparkContext 来协调(称之为 driver 程序). 具体的说,为了运行在集群上,SparkContext 可以连接至几种类型的 Cluster Manager(既可以用 Spark 自己的 Standlone Cluster Manager,或者