空格 (Whitespace)
优质
小牛编辑
142浏览
2023-12-01
缩进 (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
文件末尾只放一个空行。