方法 (Methods)
优质
小牛编辑
140浏览
2023-12-01
方法定义 (Method definitions)
函数要接参数的时候就用括号, 不用参数时就不用写括号了。 下面是正确的例子.
def some_method # body omitted end def some_method_with_parameters(arg1, arg2) # body omitted end
不要用默认参数,用一个选项 hash 来做这个事。
# 错误 def obliterate(things, gently = true, except = [], at = Time.now) ... end # 正确 def obliterate(things, options = {}) default_options = { :gently => true, # obliterate with soft-delete :except => [], # skip obliterating these things :at => Time.now, # don't obliterate them until later } options.reverse_merge!(default_options) ... end
避免定义单行函数,虽然有些人喜欢这样写,但是这样容易引起一些奇怪的问题
# 错误 def too_much; something; something_else; end # 正确 def some_method # body end
方法调用 (Method calls)
应该用 圆括号 的情况:
如果方法会返回值。
# 错误 @current_user = User.find_by_id 1964192 # 正确 @current_user = User.find_by_id(1964192)
如果第一个参数需要圆括号。
# 错误 put! (x + y) % len, value # 正确 put!((x + y) % len, value)
方法名和左括号之间永远不要放空格。
# 错误 f (3 + 2) + 1 # 正确 f(3 + 2) + 1
对于不用接收参数的方法, 忽略圆括号 。
# 错误 nil?() # 正确 nil?
如果方法不返回值 (或者我们不关心返回值),那么带不带括号都行。
(如果参数会导致代码多于一行, 建议加个括号比较有可读性)# okay render(:partial => 'foo') # okay render :partial => 'foo'
不论什么情况:
如果一个方法的最后一个参数接收 hash, 那么不需要
{
}
。# 错误 get '/v1/reservations', { :id => 54875 } # 正确 get '/v1/reservations', :id => 54875