条件表达式 (Conditional Expressions)
关键字 (Conditional keywords)
永远不要把
then和多行的if/unless搭配使用。
[link]# 错误if some_condition then...end# 正确if some_condition...end
do不要和多行的while或until搭配使用。[link]# 错误while x > 5 do...enduntil x > 5 do...end# 正确while x > 5...enduntil x > 5...end
and,or, 和not关键词禁用。 因为不值得。 总是用&&,||, 和!来代替。
[link]适合用
if/unless的情况: 内容简单, 条件简单, 整个东西能塞进一行。
不然的话, 不要用if/unless。
[link]# 错误 - 一行塞不下add_trebuchet_experiments_on_page(request_opts[:trebuchet_experiments_on_page]) if request_opts[:trebuchet_experiments_on_page] && !request_opts[:trebuchet_experiments_on_page].empty?# 还行if request_opts[:trebuchet_experiments_on_page] &&!request_opts[:trebuchet_experiments_on_page].empty?add_trebuchet_experiments_on_page(request_opts[:trebuchet_experiments_on_page])end# 错误 - 这个很复杂,需要写成多行,而且需要注释parts[i] = part.to_i(INTEGER_BASE) if !part.nil? && [0, 2, 3].include?(i)# 还行return if reconciled?
不要把
unless和else搭配使用。[link]# 错误unless success?puts 'failure'elseputs 'success'end# 正确if success?puts 'success'elseputs 'failure'end
避免用多个条件的
unless
。[link]# 错误unless foo? && bar?...end# 还行if !(foo? && bar?)...end
条件语句
if/unless/while不需要圆括号。
[link]# 错误if (x > 10)...end# 正确if x > 10...end
三元操作符 (Ternary operator)
避免使用三元操作符 (
?:),如果不用三元操作符会变得很啰嗦才用。
对于单行的条件, 用三元操作符(?:) 而不是if/then/else/end.[link]# 错误result = if some_condition then something else something_else end# 正确result = some_condition ? something : something_else
不要嵌套使用三元操作符,换成
if/else.[link]# 错误some_condition ? (nested_condition ? nested_something : nested_something_else) : something_else# 正确if some_conditionnested_condition ? nested_something : nested_something_elseelsesomething_elseend
避免多条件三元操作符。最好判断一个条件。
[link]避免拆成多行的
?:(三元操作符), 用if/then/else/end就好了。
[link]# 错误some_really_long_condition_that_might_make_you_want_to_split_lines ?something : something_else# 正确if some_really_long_condition_that_might_make_you_want_to_split_linessomethingelsesomething_elseend
