变量命名规则

必须遵循的命名规则

1.    变量名首字母必须为字母(a-z A-Z),下划线(_),或者美元符号($)开始php编程中所有变量必须以$开始。

2.    变量名只能是字母(a-z A-Z),数字(0-9),下划线(_)的组合,并且之间不能包含空格,数字不能放在变量名首位。

3.    变量名不能使用编程语言的保留字。比如在javascript中不能使用true,false,while,case,break保留字等等。

  • 在每个代码范围内使用足够短和足够长的名称:例如循环计算器用一个字符就可以了, 变量命名规则如i;
  • 条件和循环变量用一个单词,方法名1-2个单词,类名2-3个单词,全局变量3-4个单词组成;
  • 为变量指定一些专门名称,不要使用例如 "value", "equals", "data" 这样的变量名;
  • 变量名要使用有意义的名称,通过变量名能大概反映出其具体的用途;
  • 不要在变量名前加前缀,例如 o_, obj_, m_ 之类;
  • 服从公司命名规范,在命名时使用一致的做法,例如:txtUserName, lblUserName, cmbSchoolType, ... 除非是大大降低了可读性;
  • 服从编程语言本身的规范,不要使用不连贯的小写和大写混合名称,例如:userName, UserName, USER_NAME, m_userName, username, ...;

经典命名规则

  1. 匈牙利命名法。(匈牙利命名规范:广泛应用于象Microsoft Windows这样的环境中。不建议)

    该命名法是在每个变量名的前面加上若干表示数据类型的字符。基本原则是:变量名=属性+类型+对象描述。如i表示int,所有i开头的变量命都表示int类型。s表示String,所有变量命以s开头的都表示String类型变量。

几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针. 这种方法的优点是使人能够通过变量的名字来辨别变量的类型,而不比去查找它的定义.遗憾的是,这种方法不仅使变量名字非常绕口,而且使改变变量类型的工作变得十分艰巨.在Windows3.1中,整型变量为16为宽.如果我们在开始时采用了一个整型变量,但是在通过30---40个函数的计算之后,发现采用整型变量宽度不够,这时我们不仅要改变这个变量的类型,而且要改变这个变量在这30--40个函数中的名字. 因为不切实际,除了一些顽固的Windows程序员外已经没有人再使用"匈牙利表示法"了.毫无疑问,在某种场合它依然存在,但大部分人现在已经抛弃它了.一般而言,输入前缀是一种糟糕的想法,因为它把变量于其类型紧紧地绑在了一起. 对于30行以下的函数,匈牙利方法一般有优势。 尤其是对界面编程,有优势。 但对于有强烈的算法要求、尤其是有很多抽象类型的C++程序,匈牙利方法简直是一个灾难。 看你用在什么地方。 现在有了很好的IDE工具,如:VC,SourceInsight等. 选中变量,会自动提示告诉你它的声明和定义,这样 匈牙利命名法就没有很大的必要了. 无非就是为了程序可读性较好. 实际上良好的代码书写习惯比强制使用匈牙利命名法更重要. 系统性。整体性。可读性。分类要清楚。要有注释!

匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推广给了全世界的Windows开发人员。匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成员变量),再指针,再简单数据类型,再其他。例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。

匈牙利命名法中常用的小写字母的前缀:

前缀

类型

a

数组(Array)

b

布尔值(Boolean)

by

字节(Byte)

c

有符号字符(Char)

cb

无符号字符(Char Byte,没有多少人用)

cr

颜色参考值(ColorRef)

cx,cy

坐标差(长度 ShortInt)

dw

Double Word

fn

函数

h

Handle(句柄)

i

整型

l

长整型(Long Int)

lp

Long Pointer

m_

类的成员

n

短整型(Short Int)

np

Near Pointer

p

Pointer

s

字符串型

sz

以null做结尾的字符串型(String with Zero End)

w

Word

  1. 骆驼命名法。

    正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。驼峰命名法跟帕斯卡命名法相似,只是首字母为小写,如userName。因为看上去像驼峰,因此而得名。注意第一个单词是永远小写的,后面的单词首字母是大写,其余的就是小写。例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数:

printEmployeePaychecks();

print_employee_paychecks();

第一个函数名使用了骆驼式命名法——函数名中的每一个逻辑断点都有一个大写字母来标记;

第二个函数名使用了下划线法----函数名中的每一个逻辑断点都有一个下划线来标记。

骆驼式命名法近年来越来越流行了,在许多新的函数库和Microsoft Windows这样的环境中,它使用得当相多。另一方面,下划线法是c出现后开始流行起来的,在许多旧的程序和UNIX这样的环境中,它的使用非常普遍。好处很明显,可以很清晰的明白命名的意义,这也是编程命名的一个基本出发点。

  1. 帕斯卡命名法 即pascal命名法。

    做法是首字母大写,如UserName,常用在类的变量命名中。与骆驼命名法类似。只不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写

如:public void DisplayInfo();

string UserName;

二者都是采用了帕斯卡命名法.

在C#中,以帕斯卡命名法和骆驼命名法居多。

附上.NET命名规范中文版    词语选择

避免使用由经常使用的名称空间复制的类型名。类型名不能使用下列词语。

System

Collections

Forms

UI

避免使用与常用关键词冲突的标识符。例如,避免使用下列词语。

AddHandler

AddressOf

Alias

And

Ansi

As

Assembly

Auto

BitAnd

BitNot

BitOr

BitXor

Boolean

ByRef

Byte

ByVal

Call

Case

Catch

CBool

CByte

CChar

CDate

CDec

CDbl

Char

CInt

Class

CLng

CObj

Const

CShort

CSng

CStr

CType

Date

Decimal

Declare

Default

Delegate

Dim

Do

Double

Each

Else

ElseIf

End

Enum

Erase

Error

Event

Exit

ExternalSource

FALSE

Finally

For

Friend

Function

Get

GetType

Goto

Handles

If

Implements

Imports

In

Inherits

Integer

Interface

Is

Let

Lib

Like

Long

Loop

Me

Mod

Module

MustInherit

MustOverride

MyBase

MyClass

Namespace

New

Next

Not

Nothing

NotInheritable

NotOverridable

Object

On

Option

Optional

Or

Overloads

Overridable

Overrides

ParamArray

Preserve

Private

Property

Protected

Public

RaiseEvent

ReadOnly

ReDim

Region

REM

RemoveHandler

Resume

Return

Select

Set

Shadows

Shared

Short

Single

Static

Step

Stop

String

Structure

Sub

SyncLock

Then

Throw

To

TRUE

Try

TypeOf

Unicode

Until

Variant

When

While

With

WithEvents

WriteOnly

Xor

eval

extends

instanceof

package

var

 

名称空间

命名名称空间的一般规则如下:

CompanyName.TechnologyName

这样,我们看到的名称空间应该是这样的:

Microsoft.Office

PowerSoft.PowerBuilder

注意:这只是一个原则。第三方公司可以选择其它的名字。

避免用公司名称或其它著名品牌的名称作为名称空间的前缀,这样会造成两个公布的名称空间有同一个名称的可能性。(例如,将微软提供的Office自动类命名为Microsoft.Office。)

使用Pascal大写方式,用逗号分隔逻辑成分(例如,Microsoft.Office.PowerPoint)。如果你的品牌使用的是非传统大写方式,那么一定要遵循你的品牌所确定使用的大写方式,即使这种方式背离了通常的名称空间大写规则(例如,NeXT.WebObjects,和ee.cummings。)

该用复数的时候要使用复数的名称空间名。例如,使用System.Collections而不是System.Collection。本规则的特例是品牌名称和缩写。例如:使用System.IO而不是System.IOs。

名称空间和类不能使用同样的名字。例如,有一个类被命名为Debug后,就不要再使用Debug作为一个名称空间名。

类和类成分

类的命名原则

  • 用名词或名词短语命名类。
  • 使用Pascal大写。
  • 减少类名中缩写的使用量。
  • 不要使用任何类前缀(比如C)。
  • 不要使用带下划线的字符。

下面是一些正确命名的类名的例子。

public class FileStream {}

public class Button {}

public class String {}

接口命名原则

  • 使用名词或名词短语,或者描述行为的形容词来命名接口。例如,IComponent(描述性名词),ICustomAttributeProvider(名词短语),和IPersistable(形容词)。
  • 使用Pascal大写。
  • 减少接口名中缩写的使用量。
  • 不要使用带下划线的字符。
  • 在接口名前加前缀I,以表示这个类型是一个接口。
  • 不要在类名前加上前缀C。偶而情况下,需要在类名前加上I而并不表示它是一个接口。在这种情况下,只要I后面的字符是小写就可(例如,IdentityStore。)
  • 当类是接口的标准执行时,定义这一对类/接口组合就要使用相似的名称。两个名称的不同之处只是接口名前有一个I前缀。

下面我们举个例子,来看看接口IComponent和它的标准执行,类Component。

public interface IComponent {}

public class Component : IComponent {}

public interface IServiceProvider{}

public interface IFormatable {}

属性命名原则

  • 在属性的后面加上Attribute后缀,来自定义属性类。如下例所示。
  • public class ObsoleteAttribute{}

Enum命名原则

  • Enum需使用Pascal大写。
  • Enum值名需使用Pascal大写。
  • 减少enum名中缩写的使用量。
  • Enum名前不要加前缀(例如,adxxx表示ADO enums,rtfxxx表示多信息文本enum,等等。)。
  • 在enum类型上不要加Enum后缀。
  • Enum名称需使用单数名词。
  • 比特域使用复数名词。
  • 如果列举值在参数或属性中使用,需用一个enum来定义列举值。这样工具就可以知道一个属性或参数可能的值了。

public enum FileMode{

Create,

CreateNew,

Open,

OpenOrCreate,

Truncate

}

如果数字值to be bitwise or-ed together(按位bit标记,或被按位bit标记),就使用Flags对属性进行自定义。(下面是一个12位bit的枚举)

[Flags]

public enum Bindings {

CreateInstance,

DefaultBinding,

ExcatBinding,

GetField,

GetProperty,

IgnoreCase,

InvokeMethod,

NonPublic,

OABinding,

SetField

SetProperty,

Static

}

在封装一个Win32 API时,这个规则有一个特例。从一个Win32标头产生内部定义是很常见的。你可以使用Win32大写,这种形式下字母通常全部大写。

使用Int32作为一个enum的基础类型。

  • 如果这个enum代表标志,而且标志又非常多(大于32),或者这个enum在将来可以发展成许多标志,或者类型需要与类型int有所不同以便向后兼容时,在这种情况下就产生了特例。
  • 只有在值可以被完全表示为一组位标志时,才使用enum。开集不能使用enum(例如操作系统版,等等)。

只读和Const字段名

  • 用名词,名词短语,或名词的缩写命名静态字段。
  • 用Pascal大写命名静态字段。
  • 不要用匈牙利文类型的符号作静态字段名的前缀。

参数名

  • 使用描述性参数名。参数名应该具有足够的描述性,这样在大多数情况下参数名和它的种类可以用来确定它的意思。
  • 用camel大写方式命名参数。
  • 根据参数的意思来命名参数,而不是根据参数的种类来命名。我们希望开发工具可以用很方便的方式提供关于参数种类的信息,这样参数名可以得到更好的使用,可以对语义而不是对种类进行描述。但是偶尔使用根据类型命名的参数名也是完全可以的。
  • 不要使用保留参数。如果在下一个版本中需要更多的数据,可以增加进来。
  • 不要用匈牙利文类型的符号作为字段名的前缀。

Type GetType (string typeName)

string Format (string format, object [] args)

方法命名原则

  • 用动词或动词短语命名方法。
  • 用下述范例所示的Pascal大写方式命名方法。
  • RemoveAll()
  • GetCharArray()
  • Invoke()

属性命名原则

  • 用名词或名词短语命名属性。
  • 用Pascal大写命名属性。
  • 属性与类型要一样。
  • 用与一个类型的名称相同的名字来命名属性时,就使这个属性的类型成为那个类型。虽然听起来有些奇怪,但这是正确的。下面的例子正确使用了属性命名原则。

public enum Color {...}

public class Control {

public Color Color { get {...} set {...} }

}

下例就是不正确的。

public enum Color {...}

public class Control {

public int Color { get {...} set {...} }

}

在那个不正确的例子中,要想引用Color enum是不可能的,因为Color,Xxx会被翻译成一个成员访问,它会首先获得Color属性的值(int种类),然后再访问那个值的成员(它应该是System.Int32的一个实例成员)。

事件命名原则

  • 用EventHandloer后缀命名事件处理程序,如下列所示。

public delegate void MouseEventHandler(object sender, MouseEvent e);

使用名为sender和e的两个参数。

Sender参数代表提出事件的对象。Sender参数永远是一个类型对象,即使它可能使用了更为特定的类型。

与事件相关的状态被封装在一个名为e的事件类范例中。要使用这个类型的正确的、特定的事件类。

public delegate void MouseEventHandler(object sender, MouseEvent e);

  • 用EventArgs后缀命名事件自变量类,如下例所示。

public class MouseEventArgs : EventArgs {

int x;

int y;

public MouseEventArgs(int x, int y)

{ this.x = x; this.y = y; }

public int X { get { return x; } }

public int Y { get { return y; } }

}

命名事件名时,需要有之前和之后的时态概念,因此要使用现在时态和过去时态(不要使用BeforeXxx/AfterXxx的方式)。例如,可以被取消的结束事件就有Closing事件和Closed事件。

public event ControlEventHandler ControlAdded {//..

}

用动词命名事件。

区分大小写

不要使用需要对大小写作出区分的名称。各成分不论是在区分大小写还是不区分大小写的语言下都必须是完全可用的。因为不区分大小写的语言不能在同样的环境下对只有大小写不同的两个名称作出辩别,所以成分必须避免这种情况。

不要产生两个名称相同只有大小写不同的名称空间。

namespace ee.cummings;

namespace Ee.Cummings;

  • 带有两个参数的一个类型,其两个参数的名称不能只有大小写不同。

void foo(string a, string A)

System.WinForms.Point p;

System.WinForms.POINT pp;

  • 带有两个属性的一个类型,其属性的名称不能只有大小写不同。

int Foo {get, set};

int FOO {get, set}

  • 带有两种方法的一个类型,其方法的名称不能只有大小写不同。

void foo();

void Foo();

避免类型名出现混淆

不同的语言使用不同的术语以识别基本管理类型。设计人员必须避免使用对语言有专门要求的术语。遵照本章说明的规则,避免出现类型名称混淆的情况。

使用语义上有意义的名称,而不要使用类型名称。

在很少见的情况下,参数除了类型以外语义上没有任何意义,这时使用类属名。例如,一个类支持将多种数据类型写进一个流中,这个类可能有下列方法:

void Write(double value);

void Write(float value);

void Write(long value);

void Write(int value);

void Write(short value);

上面的例子在下述对语言有专门要求的情况下是首选。

void Write(double doubleValue);

void Write(float floatValue);

void Write(long longValue);

void Write(int intValue);

void Write(short shortValue);

在极端情况下,每一个基本数据类型需要有唯一的命名方式,此时使用下面的通用类型名称。

C# type name

Visual Basic type name

JScript type name

Visual C++ type name

IL representation

Universal type name

sbyte

SByte

SByte

char

I1

SByte

byte

Byte

byte

unsigned char

U1

Byte

short

Short

short

short

I2

Int16

ushort

UInt16

UInt16

unsigned short

U2

UInt16

int

Integer

int

int

I4

Int32

uint

NA

NA

unsigned int

U4

UInt32

long

Long

long

__int64

I8

Int64

ulong

UInt64

UInt64

Unsigned __int64

U8

UInt64

float

Single

float

float

R4

Single

double

Double

double

double

R8

Double

bool

Boolean

boolean

bool

I4

Boolean

char

Char

char

wchar_t

U2

Char

string

String

String

String

System.String

String

object

Object

Object

Object

System.Object

Object

一个支持从流中读取多种数据类型的类可以有下列方法。

double ReadDouble();

float ReadSingle();

long ReadIn64();

int ReadInt32();

short ReadInt16();

上面的例子在下述对语言有专门要求的情况下是首选。

double ReadDouble();

float ReadFloat();

long ReadLong();

int ReadInt();

short ReadShort();

Java建议命名规则

类名使用驼峰命名方式,如:VelocityResponseWriter

包含小写:net.oschina.beans.xxx

变量名和方法名小写开始的驼峰命名,例如:studentParentName

常量名用全大写:MAX_PARAMETER_COUNT = 100

枚举类名参考普通类名,枚举变量使用全大写

不使用任何带下划线的命名方式(OSCHINA项目大量采用带下划线的变量,哈哈),除非是常量或者是枚举值

标识符(包括参数名)中不要使用缩写。如果必须使用缩写:任何超过两个字符以上的缩写都使用camel大写格式,即使这不是标准缩写。

[No00009E]几种常见的命名规则的更多相关文章

  1. Java标识符中常见的命名规则

    标识符:就是给类,接口,方法,变量等起名字.组成规则:A:英文字母大小写B:数字字符C:$和_注意事项:A:不能以数字开头B:不能使Java中的关键字C:Java语言严格区分大小写常见的命名规则:见名 ...

  2. HR外包系统 - 工资计算-几种常见账单计算规则

    01-正常工资计税 (包括同一月多地计税方式) 02-年终奖计税 (包括可分批发放,但计税总额不变)  按工资 除以月份,看落在那个计税区间,获取税率和扣除数,再用总额*税率-扣除数,要考虑当月工资如 ...

  3. Java的书写格式,标识符及命名规则,注释

    Java的书写格式,标识符及命名规则,注释 1.Java语言的书写格式(约定成俗) 1) 大括号要对齐(左大括号与句尾对其,后面大括号与句头对齐),并且成对写 2) 左大括号前面有空格 3) 遇到左大 ...

  4. PHP 中各种命名规则的总结

    一般约定而言 类.函数和变量的名字应该是能够让代码阅读者能够容易地知道这些代码的作用,应该避免使用凌磨两可的命名. 以下是在开发过程中常见的命名规则总结 1.类的命名 使用大写字母作为词的分割,其余的 ...

  5. java小提示:标示符常见命名规则、常用ASCII

    标示符常见命名规则: A:包:全部小写B:类或者接口:首字母大写:StudentC:方法或者接口:首字母小写,第二个单词开始开始,每个单词首字母大写:studentAgeD:常量:全部大写,多个单词之 ...

  6. JavaScript 基础(一) - JavaScript的引入方式,JavaScript 变量命名规则,JS 的五种基本数据类型,ECMAScript 算数运算符,逻辑运算符

    JavaScript的引入方式 直接编写 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  7. java常见命名规则

    常见命名规则: 包:类似文件夹,用于把相同的类名进行区分(小写) 单级:例如:student 多级:例如:cn.student 类或者接口: 一个单词:单词首字母大写,例如:Student 多个单词: ...

  8. 常见linux系统中RPM包的通用命名规则

    本文重点说一下在常见的linux系统中,RPM包通用的命名规则. RPM包的一般格式为:name-version-arch.rpmname-version-arch.src.rpm 例:httpd-2 ...

  9. BEM(一种 CSS 命名规则)

    一. 什么是 BEM BEM的意思就是块(block).元素(element).修饰符(modifier),是由 Yandex 团队提出的一种前端命名方法论. 这种巧妙的命名方法让你的 CSS 类对其 ...

随机推荐

  1. window.name实现的跨域数据传输

    这篇文章是对 JavaScript跨域总结与解决办法 的补充. 有三个页面: a.com/app.html:应用页面. a.com/proxy.html:代理文件,一般是一个没有任何内容的html文件 ...

  2. Oracle PL/SQL随堂笔记总结

    1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...

  3. 【转】基于linux下的dm9000网卡移植全分析

    转自:http://blog.sina.com.cn/s/blog_6abf2c04010189ui.html DM9000可以直接与ISA总线相连,也可以与大多数CPU直接相连.Mini2440采用 ...

  4. 初谈SQL Server逻辑读、物理读、预读

    前言 本文涉及的内容均不是原创,是记录自己在学习IO.执行计划的过程中学习其他大牛的博客和心得并记录下来,之所以想写下来是为了记录自己在追溯的过程遇到的几个问题,并把这些问题弄清楚. 本章最后已贴出原 ...

  5. 异步Socket 客户端部分

    using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; using S ...

  6. jQuery图片延迟加载

    这里延迟加载的意思是,拖动滚动条时,在图片出现在浏览器显示区域后才加载显示.在这之前全部图片都由一张图片代替.节省流量,减轻服务器负担. 效果展示 http://hovertree.com/texia ...

  7. GJM : Unity3D HIAR -【 快速入门 】 四、创建 Hello World

    创建 Hello World 本文将介绍如何在 Windows 系统下,使用 HiAR SDK 创建一个简单的 AR 应用.在开始之前,请先完成下列准备工作: 注册 HiAR 帐户 获取 AppKey ...

  8. Singleton(单例模式)的一种实现 -- 基于【惰性】适用于【大对象】的一种生产实践

    一.说明 本文中的代码类,在生产中使用了很长的时间,曾应用于多个企业多个项目实践中,其中也踩了不少坑,总结了一些适用的业务情景, 重要的事情说三遍: a.本代码类不是万能药,不要在业务情景中滥用! b ...

  9. 浅析天猫H5站点

    前言 我们做前端开发的时候,很有可能会做一个竞品分析,比如我就做过去哪儿.艺龙.同程等与携程的移动站点竞品分析,竞品分析的目的一般是技术对比,但是更多的是业务对比,知己知彼,百战不殆:我们同时会借鉴. ...

  10. ArcGIS Engine开发之地图基本操作(2)

    地图数据的加载 1.加载地图文档 ArcGIS Engine支持加载多种类型的数据,有矢量数据的Coverage.Shapefile.dwg/dxf文件,栅格数据的BMP.GRID.控件数据库等.很多 ...