3

私のアプリには、互いにアクションを実行できるユーザーがいます。たとえば、Facebookをつつきます。

私は今メソッドを書いていますが、どのアプローチを取るべきか本当にわかりません。つまり、どちらも受け入れられることは知っていますが、より慣用的なアプローチはありますか?

オプション1

if @current_user.may_poke?(@other_user)
  @current_user.poke!(@other_user)
end

オプション 2

if @current_user.may_poke?(@other_user)
  @other_user.poke!(@current_user)
end

最初のオプションは英語で読みやすく、文としてほぼ完璧です。2 番目のオプションは、メソッドの命名に関してより理にかなっています。「poke」は で実行されるメソッド@other_userです。追加情報を提供するための@current_user引数にすぎません - 誰が突っついたのですか。

4

4 に答える 4

4

そこでオプション1に固執します..条件のロジックに従う場合、「current_userがother_userを突く可能性がある場合は、current_userがother_userを突くようにする」と尋ねています。オプション 2 は、これらの用語で考えるとあまり意味がありません。

また、Ruby の作者である matz は次のように述べています。取扱注意"。" ( http://www.ruby-forum.com/topic/176830#773946 )。pokeの代わりにそのメソッド名に使用するだけでしょうpoke!

于 2013-02-12T16:16:20.420 に答える
2

may_poke?アクションの実行を示しているため、最初のオプションの方が正しいようです。2 番目のオプションでは、名前pokable?(またはpokeable?、この誰かの正しいスペル?) を使用して、それ自体の属性を示します。

于 2013-02-12T16:16:39.277 に答える
1

読んで一番早く理解できる選択肢を選んでください。コードが読みやすくなり、コードが改善されます(IMO)。

私の場合 (この特定の状況の場合)、オプション 1 を使用します。

于 2013-02-12T16:16:15.877 に答える
0

pokeが の状態を変更するものである場合は@other_user、オプション 2 を使用します。ただし、メソッド名pokeはレシーバーを示唆しており、引数は逆であるため、混乱を避けるために、名前を のようなものに変更しpoke_byます。のレシーバと引数を逆にするのは良くないと思いますmay_poke。おそらく、同じようにする方が良いでしょう:

if @other_user.pokable_by?(@current_user)
  @other_user.poke_by(@current_user)
end
于 2013-02-12T16:44:51.893 に答える