Posted on 2006-09-29 18:56
chenger 阅读(416)
评论(0) 编辑 收藏 引用 所属分类:
Programming Stuff
Ruby中的名字约定
历史:高级程序语言的老祖宗,Fortran,对源程序中的名字,或者叫标识符(identifier)有很严格的规定,譬如首字母代表变量的类型等等。个人认为这是当年编译技术还未成熟时的权宜之计。后来主流的程序设计语言都放松了对名字的限制,像C/C++/Java,只有一点点小小的约束(对所用字符的限制:只能使用英文字母、数字、下划线,必须以下划线或英文字母开头。这也容易理解,完全是为了写词法分析器的方便)。而和Fortran同时代的Lisp,这方面更是大开绿灯,爱怎么定义怎么定义。然而到了现在,似乎有点复古的潮流,有些语言开始对名字设立一些规则,比如Haskell,Erlang,包括Ruby。
言归正传。Ruby中的名字规则主要是根据名字的第一个字母来决定这个名字的使用方式。具体来说,
- 局部变量,方法名,方法参数:以小写字母或下划线开头,以'_'连接。
Example:i,note_controller - 常量:全部大写,以'_'连接
Example:A_NUM - 类,模块(module):都是开头大写(因为类名是全局变量),其他小写并且直接连接在一起
Example:ActiveRecord - 全局变量:以'$'开头(肯定是跟Perl学的,我觉得不怎么好)
- 实例变量(instance variable):以'@'开头(同上)
- 类变量(class variable):以'@@'开头(诡异)
有点Perl的味道,但Perl更加变态,居然要以首字母区分标量、数组和Hash表,这就不太人道了。相比起来,Ruby的设置还是可以接受的,它只不过是把有些约定俗成的规则直接变成了语言规则。每个程序员基本上都会有自己的一套命名规则,比如写C++程序时,类名通常用大写字母开头,宏名则通常由大写字母组成,而下划线开头的(特别是双下划线)往往留给库开发者等等。Ruby的想法可能是:干脆统一了这些命名规则,免得人们为这种风格(Style)问题争论不休。也是挺有道理的。