- 首页
- 作品
- Ruby 代码风格指南
- 1. 缩进 (Indentation)
1. 缩进 (Indentation)
缩进 (Indentation)
- 始终用 2 个空格做缩进。
when
的缩进和 case
一致。
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
- 函数的参数要么全部在同一行,如果参数要分成多行,则每行一个参数,相同缩进。
# 错误
def self.create_translation(phrase_id, phrase_key, target_locale,
value, user_id, do_xss_check, allow_verification)
...
end
# 正确
def self.create_translation(phrase_id,
phrase_key,
target_locale,
value,
user_id,
do_xss_check,
allow_verification)
...
end
# 正确
def self.create_translation(
phrase_id,
phrase_key,
target_locale,
value,
user_id,
do_xss_check,
allow_verification
)
...
end
- 多行的布尔表达式,下一行缩进一下。
# 错误
def is_eligible?(user)
Trebuchet.current.launch?(ProgramEligibilityHelper::PROGRAM_TREBUCHET_FLAG) &&
is_in_program?(user) &&
program_not_expired
end
# 正确
def is_eligible?(user)
Trebuchet.current.launch?(ProgramEligibilityHelper::PROGRAM_TREBUCHET_FLAG) &&
is_in_program?(user) &&
program_not_expired
end
行内 (Inline)
- 行末不要留空格。
- 写行内注释的时候,在代码和注释之间放 1 个空格。
# 错误
result = func(a, b)# we might want to change b to c
# 正确
result = func(a, b) # we might want to change b to c
- 操作符两边放一个空格;逗号,冒号,分号后面都放一个空格;左大括号
{
两边放空格,右大括号 }
左边放空格。
sum = 1 + 2
a, b = 1, 2
1 > 2 ? true : false; puts 'Hi'
[1, 2, 3].each { |e| puts e }
- 逗号前面永远不要放空格
result = func(a, b)
- block 语法里,| | 内部的两边不应该带多余的空格,参数之间应该有1个空格,| | 后面应该有一个空格
# 错误
{}.each { | x, y |puts x }
# 正确
{}.each { |x, y| puts x }
- 感叹号和参数间不要留空格,下面是个正确的例子。
!something
(
, [
后面不要有空格,]
, )
前面不要有空格
some(arg).other
[1, 2, 3].length
- 字符串插值时候忽略空格。
# 错误
var = "This # { foobar } is interpolated."
# 正确
var = "This # {foobar} is interpolated."
- 当表达范围时,不要写额外的空格。
# 错误
(0 ... coll).each do |item|
# 正确
(0...coll).each do |item|
换行 (Newlines)
- if 条件保持相同缩进,方便识别哪些是条件,哪些是内容。
if @reservation_alteration.checkin == @reservation.start_date &&
@reservation_alteration.checkout == (@reservation.start_date + @reservation.nights)
redirect_to_alteration @reservation_alteration
end
- 条件语句,块,case 语句,等等东西后面换一行, 例子如下。
if robot.is_awesome?
send_robot_present
end
robot.add_trait(:human_like_intelligence)
- 不同缩进的代码之间无需空行 (比如 class 或 module 和内容之间)。
# 错误
class Foo
def bar
# body omitted
end
end
# 正确
class Foo
def bar
# body omitted
end
end
- 方法之间 1 个空行就好。
def a
end
def b
end
- 1 个空行隔开类似的逻辑。
def transformorize_car
car = manufacture(options)
t = transformer(robot, disguise)
car.after_market_mod!
t.transform(car)
car.assign_cool_name!
fleet.add(car)
car
end
- 文件末尾只放一个空行。