.NET 開発者仲間は条件演算子についてどう考えていますか?[重複]
-
05-09-2019 - |
質問
この質問にはすでに答えがあります:
- 三進法にするのか、それとも三進法にしないのか?[閉まっている] 54 件の回答
私は C# の条件演算子が本当に大好きです。これにより、次のようなロジックを書くのが非常に楽になります。
public string FormattedFileName
{
get
{
return string.Format("{0}_{1}_{2}_{3}.xls",
DateTime.Now.Month.ToString().Length == 1
? "0" + DateTime.Now.Month.ToString()
: DateTime.Now.Month.ToString(),
DateTime.Now.Day.ToString().Length == 1
? "0" + DateTime.Now.Day.ToString()
: DateTime.Now.Day.ToString(),
DateTime.Now.Year.ToString(),
"DownLoaded_From_Clients");
}
}
もちろん、それはコードの可読性を失うことを意味します。とにかく、他の開発者仲間がこのコード作成アプローチについてどのような意見を持っているかに興味があります。ありがとう。否定的なコメントも肯定的なコメントも同様に評価します。
解決
気に入りましたか?それを使用しますしないでください。
// if (Like it) then (Use it) else (Don't)
他のヒント
、三項演算子は非常に貴重です。しかし、私は自分を表現するためのより良い方法があることが多いと思います。正確に行いますフォーマット文字列を使用しない理由を与えた例では、あなたが欲しいもの:"{0:00}_{1:00}_{2}_{3}.xls"
を、あなたは大幅にコードを簡素化することができます。
あなたはそれがよりreadbleあなたは常にgetCurrent月()、getCurrentYearへの呼び出しを考慮する可能性が作りたいと思った場合、getCurrentDate呼び出し....
あなたが持っている例は、条件付きの乱用でありますオペレータで、
これは、このように多くのより明確に表現することができます:
public string FormattedFileName
{
get {
return DateTime.Now.ToString("MM_dd_yyyy") +
"_DownLoaded_From_Clients.xls";
}
}
私は、条件演算子は非常に便利と、多くの場合、それを使用しています。正しく使用する場合、それはより簡潔することによって、コードを簡素化することができます。
一般的に、私は同じ文で複数の条件文を連鎖避けるだろう、それはすぐに取得するの非常にの混乱、維持することができないコードになります。
私も見つけます?非常に便利な、非常に多くの場合、簡単に??と交換することができる三元系を見つけます。
例
a == null? "empty" : a
に置き換えることができます:
a ?? "empty"
漫画の男は言います。 「今までに三項演算子の最悪使用。」
可読性は、コメントをインデント、空白の使用を介して達成することができる。
親指の私の個人的なルールは、それが三元が何をするか露骨に明らかだ場合、それは大丈夫だということです。それはコーダが三元を使用できるだけのように、1行の中に詰め込んだ場合はif文、それは括弧する必要があります。
私だけの単純なためにそれを使用する文の場合、2高々。どれよりも多くの、私はむしろ、それはあなたが投稿するもののように見える持っているよりも長い道のりを、それを記述します。その後、再び私は、最初の場所でのステートメントは、そのよう本当に出てくることはありません場合は、ネストされたのつ以上のレベルを持たないようにしようとします。
私は条件演算子を使用するため、すべてのだが、あなたはここでそれを必要としない...
return string.Format("{0}_{1}_{2}_{3}.xls",
DateTime.Now.Month.ToString("00"),
DateTime.Now.Day.ToString("00"),
DateTime.Now.Year,
"DownLoaded_From_Clients");
私は本当にあなたがそれを使用しましたか好きではありません。私は簡単に1行で収まるのではなく、複数行のif文を使用することができたとき、私はそれを使用します。
私は、三級オペレータが大好きです。あなたは表記法に精通していない場合にのみ問題です。それは孤独な作業上のドキュメントを見つけるために時々難しいですが、それはより多くのドキュメントと私はそれがはるかに人気を得るだろうと信じているブックで使用された場合。
、条件演算子は非常に一般的です。それは「(これは)dothat他dothis場合は、」ステートメントによって引き起こされる時間的な制御の流れを取り出すため、一つの方法または別では、私は、機能的なパラダイムが関心を集めているという印象を持っています。それは、それが簡単に本当にががあなたの代わりに何をするか、コンピュータを伝えるの意味を定義することになります。
可読性は完全にこれをサポートしていない言語では、しかし、問題の1つである。
Debuggeabilityは、別のは、次のとおりで例えばC ++、あなたは枝の一つだけにブレークポイントを置くことができない。
私はすべての三項演算子のようにドント - それは非常に読みやすいものではなく、私はバグ修正を行うと、そのようなものを見つけたとき、私は本当に気難しい取得
。あなたは可読性心配している場合はそうでない場合、私はそれを使用しない理由を見ていない、あなたのコードをコメントます。
いくつかの括弧のヘルプ可読性immenslyます。
あなたの交代演算子がやっているまさに明らかにし、あなたは問題ないはず助けるためにそれらを追加することを検討してください。 :)
より、このような何かをしないのはなぜ?
public string FormattedFileName
{
get
{
return string.Format(
"{0}_{1}_{2}_{3}.xls",
DateTime.Now.Month.ToString().Length == 1 ?
"0" + DateTime.Now.Month.ToString() :
DateTime.Now.Month.ToString(),
DateTime.Now.Day.ToString().Length == 1 ?
"0" + DateTime.Now.Day.ToString() :
DateTime.Now.Day.ToString(),
DateTime.Now.Year.ToString(),
"DownLoaded_From_Clients");
}
}
私は、まったくただの書式を、コードを変更していない注意してください。前述のように、あなたはここで条件演算子を使用する必要はありませんが、あなたのインデントと少しのケアは非常に読みやすさを向上させることができます。私は条件演算子を愛していますが、無インデントと密なブロックで一緒にすべてのコードを実行した場合、関係なく、あなたが使用している事業者読めなくならないように起こってます。
これは、三項演算子(私たちはのバイナリコードのの二次コードの呼び出すことはありません、すべての後)と呼ばれる、それは前に頼まれています: