在我的应用中,我们的用户可以互相执行操作 - 例如在Facebook上戳。
我刚才正在编写这些方法,并不确定采用哪种方法。 我的意思是,我知道它们都是可以接受的,但是有更惯用的方法吗?
if @current_user.may_poke?(@other_user)
@current_user.poke!(@other_user)
end
if @current_user.may_poke?(@other_user)
@other_user.poke!(@current_user)
end
第一个选项在英语中读得更好,几乎完美地用作句子。
第二种选择在方法命名方面更有意义,“poke”是在@other_user
上执行的方法。 @current_user
只是提供额外信息的参数 - 谁做了戳。
答案 0 :(得分:4)
我坚持使用选项1那里..如果你遵循条件的逻辑,那么你要问"如果current_user可能戳了other_user,那么让current_user戳一下other_user"。当想到这些术语时,选项2没有多大意义。
此外,作为Ruby的作者,matz表示"爆炸[感叹号]标志意味着"爆炸版本比非爆炸版本更危险;谨慎处理"。" (http://www.ruby-forum.com/topic/176830#773946)。我可能只使用poke
作为该方法名称,而不是poke!
。
答案 1 :(得分:2)
第一个选项似乎更正确,因为may_poke?
表示正在执行某个操作。对于第二个选项,请使用名称pokable?
(或pokeable?
,正确拼写此人的拼写?)以指示其自身的属性。
答案 2 :(得分:1)
我说通过阅读你可以选择最快的选项。它使代码更具可读性,从而改进了它(IMO)。
在我的情况下(针对这种特定情况),我会使用选项1。
答案 3 :(得分:0)
如果poke
改变了@other_user
的状态,那么请选择选项2.但方法名称poke
表明接收者和参数是相反的,所以为避免混淆,请将名称更改为poke_by
。我不认为让may_poke
的接收器和参数反转是好的。或许最好以同样的方式使用它:
if @other_user.pokable_by?(@current_user)
@other_user.poke_by(@current_user)
end