cfscriptでは、return and elseステートメントを交換可能に使用できますか?

StackOverflow https://stackoverflow.com/questions/4629594

質問

使用についてあなたの意見を知りたいです returnelse cfscriptのステートメントは互換性があります。私は通常、次の構文を使用します。

if (something) {
  // Do something
}
else {
  // Do something else
}

それは最近私に起こりました私は代わりにこれを行うことができました:

if (something) {
  // Do something
  return;
}
// Do something else

これらの2つのスタイルは異なる最終結果をもたらしますか?コードをラップする必要がないのが好きです else 声明。私の考えは、です if ステートメントはtrueを評価し、返品します。その下のコードは実行されません。それが真であると評価しない場合、その下のコードは、それがラップされているかどうかに関係なく実行されます else 声明かどうか。

それは正しいですか?

役に立ちましたか?

解決

ほとんどの言語のようなColdFusionは、同じことを達成する多くの方法を提供します。プログラマーの仕事は、状況のために正しいものを選ぶことです。もちろん、「正しい」は多くの解釈を持つことができますが、正しい方法は明確で簡潔でスケーラブルだと思います。

この場合、実際のパフォーマンスや「コードの行」の違いはありません。コードのまったく異なるブランチのリターンを使用することは私の目には明確ではありませんが、初期のリターンスタイルを使用して、無効な条件のために機能から保釈することは(再びIMO)より明確です。次の場合を検討してください。

if (not isdefined("url.param1")) {
  return;
}
if (not len(url.param1)) {
  return;
}
if (not refind("[0-9]+", url.param1)) {
  return;
}
doSomethingToValid(url.param1);

if (isdefined("url.param1")) {
  if (len(url.param1)) {
    if (refind("[0-9]+", url.param1)) {
      doSomethingToValid(url.param1);
    }
  }
}

最初のケースでは、リストに適用されるすべての検証を見ることができ、それを前もって邪魔にならないようにすることができます。 2番目のケースでは、IFSのネストされたセクションの奥深くにルーチンのかなりの部分を埋めました。また、コード構造がより複雑になるという検証に別のルールを追加する必要がある場合。

他のヒント

それを書く2つの方法は同じ結果を返しますが、読みやすさのために最初の方法が好まれます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top