私は個人的に条件ステートメント全体を別のメソッドに入れました。これはすでに提案されていることとよく似ているように聞こえるかもしれませんが、私はそれを分割するのではなく、全体をメソッドに入れています。
simple_body if complicated_condition
def complicated_condition
condition1 and
condition2 and
condition3 and
some_more_complicated_condition_that_cannot_be_written_on_a_single_line and
still_some_more_complicated_condition_that_cannot_be_written_on_a_single_line
end
条件が何であるか、およびそれらのメソッドを後で使用することになるかどうかに応じて、条件をより多くのメソッドに分割する場合と分割しない場合があります (1 つの目的だけに使用されるメソッドが多すぎると、コードの匂いがし始めます)。
これにより、コードが読みやすくなり (コードにざっと目を通し、コードが何を行っているかを確認できます)、保守が容易になります (必要に応じて条件を変更でき、それがどこにあるかを正確に把握できます)。
これをクラスに入れる場合private
、「外部」がそれを使用する必要がある理由がないため、メソッドを下に置きます。
編集:
条件が条件で使用されるときに変数の値を必要とする場合は、おそらくbinding
メソッドに渡すことを検討してください。
opt = :mysql
simple_body if complicated_condition(binding)
opt = :oracle
simple_body if complicated_condition(binding)
def complicated_condition(b)
condition1 and
condition2 and
condition3 and
some_more_complicated_condition_that_cannot_be_written_on_a_single_line and
still_some_more_complicated_condition_that_cannot_be_written_on_a_single_line and
eval('opt', b) == :mysql
end