首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

Ruby 代码轨范

2012-10-08 
Ruby 代码规范对ruby和python这样的动态语言的开发者来说,从来没有官方的编码规范和最佳实践,下面介绍一种

Ruby 代码规范

对ruby和python这样的动态语言的开发者来说,从来没有官方的编码规范和最佳实践,下面介绍一种。
这个代码的规范推荐ruby开发者把它作为最佳实践,这样一个开发者写的代码就可以被真实世界中的其他开发者维护。

格式
几乎每一个人都相信除了自己的代码别人的风格都是丑陋的,代码都是不可读的。不过事实真的是这样?最好还是有一个规范。
1 source的文件编码使用utf-8。


2 使用2个空格的缩进,不要使用tabs,tabs在不同的操作系统上有不同的空格数(并且可以被人为的设置)。这可能导致在有些人的编辑器在代码看起来不同。


3 在操作符前后使用空格,包括逗号,冒号,分号,{的前后和}的前面,空格也许(大部分)和Ruby的解释器无关,但它的正确使用是写易读的代码的关键。

?

   sum = 1 + 2  a, b = 1, 2  1 > 2 ? true : false; puts 'Hi'  [1, 2, 3].each { |e| puts e }

?

唯一的例外是使用指数操作符

# bade = M * c ** 2# goode = M * c**2

?


4 没有空格在(, [的后面和], )的前面。

some(arg).other[1, 2, 3].length

?


5 when和case的步长一样深
这个有很多的人不认同,不过这种风格在"The Ruby Programming Language"和"Programming Ruby"都得到了确认。

casewhen song.name == 'Misty'  puts 'Not again!'when song.duration > 120  puts 'Too long!'when Time.now.hour > 21  puts "It's too late"else  song.playendkind = case year       when 1850..1889 then 'Blues'       when 1890..1909 then 'Ragtime'       when 1910..1929 then 'New Orleans Jazz'       when 1930..1939 then 'Swing'       when 1940..1950 then 'Bebop'       else 'Jazz'       end
?



6 在一个方法的返回值前面使用空行(除非只有一行),并且在def之间使用空行。

def some_method  do_something  do_something_else  resultenddef some_method  resultend
?


7 使用api文档和它的约定。不要在注释块和def之间使用空行。

8 使用空行把一个方法分为逻辑段。

9 保持每行少于80个字符
Emacs的用户也许相应设置这样的配置在他们的config中 (e.g. ~/.emacs.d/init.el):

(setq whitespace-line-count 80      whitespace-style '(lines)){code}Vim的用户也许相应设置这样的配置在他们的config中(e.g. ~/.vimrc):{code}" VIM 7.3+ has support for highlighting a specified column.if exists('+colorcolumn')    set colorcolumn=80else    " Emulate    au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%80v.\+', -1)endif
?



10 避免结尾空格
Emacs的用户也许相应设置这样的配置在他们的config中 (和前面的例子完美的结合起来):

(setq whitespace-style '(trailing space-before-tab                         indentation space-after-tab)){code}Vim Emacs的用户也许相应设置这样的配置在他们的 ~/.vimrc:{code}autocmd BufWritePre * :%s/\s\+$//e

?

语法
1 def使用括号当有参数的时候,忽略括号当没有参数

def some_method   # body omitted end def some_method_with_arguments(arg1, arg2)   # body omitted end
?

2 不要使用for,除非你知道为什么。大部分的时候使用迭代器代替。for在each中被实现了(所以你是间接使用),不过for没有引入到一个新的范围中(不像each),而且在块中定义的变量外部仍然可见。

arr = [1, 2, 3]# badfor elem in arr do  puts elemend# goodarr.each { |elem| puts elem }

?

3 在if/unless多行的时候不要使用then

# badif some_condition then  # body omittedend# goodif some_condition  # body omittedend
?


4 比起if/then/else/end 结构更加喜爱使用三元运算符,它的更为普遍和明显更简洁。

# badresult = if some_condition then something else something_else end# goodresult = some_condition ? something : something_else
?


5

热点排行