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 }

 

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

# bad
e = M * c ** 2

# good
e = M * c**2

 


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

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

 


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

case
when 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.play
end

kind = 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

  result
end

def some_method
  result
end
 


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=80
else
    " 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]

# bad
for elem in arr do
  puts elem
end

# good
arr.each { |elem| puts elem }

 

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

# bad
if some_condition then
  # body omitted
end

# good
if some_condition
  # body omitted
end
 


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

# bad
result = if some_condition then something else something_else end

# good
result = some_condition ? something : something_else
 


5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值