这是我们开发团队的编码规范
Ruby编程规约(下)
本规约 、 记述的是在用 Ruby 进行编程时所使用的编程规约 。 在实际项目开发的时候,推荐以此为基础,根据项目实际情况进行客户化 (定制化) 后再使用。
代码缩进
为了增加程序的可读性而进行的适当的缩进,缩进的幅度以 2 个字符为宜。另外,缩进的时候,只可使用空格,不可使用 TAB (编程工具不同的时候,看起来会不一样)
例 :
if x > 0
if y > 0
puts "x > 0 && y > 0"
end
end
一行的字符数
一行的字符数以 80 字符(半角)为宜 。
用空行来区分开 多个 类。
正 例 :
class Foo
...
end
class Bar
...
end
误例 :
class Foo
...
end
class Bar
...
end
另外、类中的各个构成要素之间也需要用空行来隔开。 但是,最初的要素之前和最后的要素之后不需要插入空行。
正 例 :
class Foo
attr :bar
def baz
...
end
def quux
..
end
end
误 例 :
class Foo
attr :bar
def baz
...
end
def quux
...
end
end
注释
方法的定义中不需要注释行 。 ( 对那些认为 需要注释的代码进行重构。 )
但是,对类、模块、或公有方法的 说明 ,要使用 RDoc 的风格来 描述 。
例 :
# 分割用逗号区分的字符串,把结果返回给数组。
def split_csv(str)
return str.split(/,/)
end
程序结构相关的规约
类的构成要素以下记的顺序来记述。
-
模块的包含
-
常数的定义
-
类变量、类实例 变量 的定义
-
公有 类 方法的定义
-
accessor 的定义
-
initialize 的定义
-
公有实例方法的定义
-
保护类方法的定义
-
保护 accessor 的 定义
-
保护实例方法的定义
-
私有类方法的定义
-
私有 accessor 的定义
-
私有实例方法的定义
-
嵌套类的定义
在 accessor 的定义中,使用 attr_accessor 、 attr_reader 、 attr_writer ( 不使用 attr )
方法的定义
方法的定义中,形参要用括号括起来。但是 、 没有参数的时候,括号可以省略。
正 例 :
def foo(x, y)
...
end
def foo
...
end
误 例 :
def foo x, y
...
end
def foo()
...
end
类方法的定义的时候要使用 self 。
正 例 :
class Foo
def self.foo
...
end
end
误 例 :
class Foo
def Foo.foo
...
end
end
调用某个方法的时候,参数要用括号括起来 。 但是,没有参数的时候,括号可以省略。 另外, print 、 puts 、 p 的时候,也可已省略参数 。
正 例 :
foo(1, "abc")
obj.foo(1, "abc")
bar
print "x = ", x, "\n"
误 例 :
foo 1, "abc"
obj.foo 1, "abc"
bar()
一个代码块基本上使用 do ... end 来包括起来
正 例 :
foo(x, y) do
...
end
x = bar(y, z) do
...
end
误 例 :
foo(x, y) {
...
}
x = bar(y, z) {
...
}
但是, 使用 方法链的时候,用 { ... } 来包括起来。
正 例 :
s = ary.collect { |i| i.to_s }.join(",")
误 例 :
s = ary.collect do |i| i.to_s end.join(",")
方法有返回值的时候 、 必须使用 return 来明示 。 另外 、 return 的括号可以省略。
例 :
def add(x, y)
return x + y
end
误 例 :
def add(x, y)
x + y
end
def add(x, y)
return(x + y)
end
yield 的调用方法遵照方法的调用规则 。
If 语句的 then 可以省略 。 另外 、 如果是 if !x 的时候 、 请用 unless x 来置换。 但是, unless 的时候 、 不使用 else 。 还有,非常简单的条件,一行能够写下来的时候, 也可 使用 if / while 。
正 例 :
if x > 0
puts "x > 0"
else
puts "x <= 0"
end
unless x
puts "x is false"
end
puts "x is true" if x
误 例 :
if x > 0 then
puts "x > 0"
end
unless x
puts "x is false"
else
puts "x is true"
end
puts "foo && bar && baz && quux" if foo &&
bar && baz && quux
能使用 case 、 就 使用 case 。 另外, 省略 then 。
正 例 :
case x
when 1
...
when 2
...
end
误 例 :
if x == 1
...
elsif x == 2
...
end
case x
when 1 then
...
when 2 then
...
end
不要使用条件分支表达式的值 。
正 例 :
if x > 0
msg = "x > 0"
else
msg = "x <= 0"
end
误 例 :
msg = if x > 0
"x > 0"
else
"x <= 0"
end
循环
省略 While 语句 的 do 。 另外 、 像 while !x 的时候 、 使用 until x 。
正 例 :
while cond
...
end
until cond
...
end
误 例 :
while cond do
...
end
另外 、 无限循环的时候,使用 loop 。
正 例 :
loop do
...
end
误 例 :
while true
...
end
逻辑运算符
逻辑运算中,使用 ! 、 && 、 || 。 ( 不使用 not / and / or 。 )
三项运算符
除非有明确的可读性,尽量不要使用三项运算符 。 特别是 、 括号等必要的条件复杂的时候 、 跨行的时候 、 不使用三项运算符 。
字符串
字符串基本上使用 "..." 的形式 。 但是, 只有在不想解释特殊文字的时候 ,使用 '...' 的形式 。 另外 、 原则上不使用“ here document ”
Ruby编程规约(下)