3

このコードに対して Rubocop を実行した後、私は得ています

Use a guard clause instead of wrapping the code inside a conditional expression.

したがって、私が読んだことから、条件が満たされない場合、「ガード句」はメソッドから抜け出すので、余分な条件を通過する時間を無駄にする必要はありません。私の理解が正しくない場合は修正してください。

私の質問は、複数の条件でガードステートメントをどのように使用するかです

def auth_creds
  if %w(test1 qa demo ci).include? ENV['ENV']
    { key: 'key1', secret: 'secret1' }
  elsif ENV['ENV'] == 'live'
    { key: 'key2', secret: 'secret2' }
  else
    fail 'Unable to set key/secret'
  end
end

ありがとう

4

3 に答える 3

8

あなたのスニペットは「ガード句」の有効な例ではありません。守るべきものは何もありません。データを選択しているだけです。見た目は良いですcase/whenが、ifチェーンも大丈夫です。

def auth_creds
  case ENV['ENV']
  when 'test1', 'qa', 'demo', 'ci'
    { key: 'key1', secret: 'secret1' }
  when 'live'
    { key: 'key2', secret: 'secret2' }
  else
    fail 'Unable to set key/secret'
  end
end

メソッドの本体全体が条件でラップされている場合は、ガード句 (または私が呼んでいるように、アーリー リターン) が使用されます。

def process_project
  if project
    # do stuff
  end
end

が存在しない限り、メソッドは何もしませんproject。したがって、ここでネストを減らすと、より読みやすいコードになります。

def process_project
  return unless project

  # do stuff with project
end

繰り返しifますが、コード内のすべてがこの形式に変換できるわけではありません。適当なところだけ。

于 2015-09-09T07:47:44.003 に答える