主にC# な話題です
IF 文が嫌い
なので、こうしてみた。
public MemberTotalItem GetGeneration(int age) { return age >= 60 ? Over60 : age >= 50 ? Over50 : age >= 40 ? Over40 : age >= 30 ? Over30 : age >= 20 ? Over20 : Under20;}
アリ?
ナシ?
投稿日時 : 2010年6月24日 16:37
Select Case 文がないなんて、かわいそうなC#
気持ち悪い。
なし。3項演算子の方が余程嫌い。
この例だけで言えば”あり”だけど、その記述パターンの適用OK範囲を明確にしづらいので仕事だと”なし”。
個人的には大賛成。 この例だとreturnしてるからifでも良いけど、returnしない場合は「if」と「else if」の幅が違うから、こういう例では参考演算子を用いることが多い。
3項演算子使うけど、 こういう書き方は、したこと無いです。 なので、アリ?ナシ? と聞かれれば、ナシ です。
「けしからん!」と断言するほどナシじゃないけどぉ、 if ... else if ... else ... じゃダメなの? 程度にナシ。
>「if」と「else if」の幅が違うから きれいに並んでないときしょいときは: if (false) {} // 空撃ちif文 else if ( age > 60 ) return Over60; else if ( age > 50 ) return Over50; ... else return Under20; ってやるます。
個人的にはあり。積極的にやろうとは思わないけど。 Dictionary<int, MemberTotalItem> dic = new Dictionary<int, MemberTotalItem>() { { 60, Over60 }, { 50, Over50 }, { 40, Over40 }, { 30, Over30 }, { 20, Over20 }, { 0, Under20 } }; return dic.First((pair) => age >= pair.Key).Value; とか思いついてみた。
見なれればわかりやすいのでしょうが、 見なれるほどこの記法を使うとは思えないので、 なしと言っておきます。 私だったら似たような記述ができるクラスなんかを自作しますかね。 クラスだったら中でなんかよきに計らってくれているのだろうと思えますが、 基本文法だけでやっていると、解析しようとしてしまうので。
s/IF文が嫌い/if文が嫌い/ は、さておいて。 C、C++的にはありだけど、C#的にはなし。 昭和のかおりがプンプンします。
ガード句としてはナシですが、lambda中毒の人が多分岐「式」を書くためなら有りだと思います。というかC#では三項演算子のネスト以外の方法で多分岐「式」を書けないのでは。
ガード句っぽい選択あー本題からそれてるような気もしますが。あと型名勝手に変えちゃいましたが。class Generation{    public static readonly ...
ない。 匿名型と LINQ 使って書くもん。 3項演算子は真面目に書くときはネストさせない。
Ito Blog » Blog Archive » ???????????????????????????
皆さんご意見をありがとうございました~ 予想通り「なし」の人が多かったのですね。
じゃぁありで。この程度ならたぶん3項演算子で書いちゃう。 ちなみに... if (age >= 60) return Over60; if (age >= 50) return Over50; if (age >= 40) return Over40; if (age >= 30) return Over30; if (age >= 20) return Over20; return Under20; は、ガード句とは言いません。 もし、ここでガード句を書くとしたら、 Debug.Assert( age >= 0 ); if( age < 0 ){ throw ArgumentException( "年齢にマイナスはダメだろ?", "age" ); } //以下省略... です。 ガード句は、本来来ないはずのパラメータをあらかじめチェックしておくということを 処理の内部ではなく最初におこなうことを指します。 信じられないような使い方をする素人が困らないように 自己テストするコードをかっこよく言い換えたにすぎません。 ガード(盾)は、自分自身を防御するための仕組みであって 先頭にif文が並ぶことではありません。
なるほど~ if 文で追い出した後に、実際の処理を書く例を多く見てきたので、if文で処理を抜けるものを広い意味でガード句というのだとばかり思っていました。
多くの場合で if で記述が最もわかりやすいので、ガード句はifの羅列になってることが多いというだけですね。 switch のほうがいい場合はswitch で記述しますよ。
素敵なエントリーの登録ありがとうございます - .NET Clipsからのトラックバック
示されたコードは、自分的には無しだけど。 アセンブラレベルまで落とすと、if文に変わるj○等に変わるのでは? 結局IF文が嫌いと言いながらも、中では使われているのではないのでしょうか。
高級言語の記法の話ですから、アセンブラレベルに落としたあとの状態で考えるのは少し違う気がします。
Powered by: Copyright © R・田中一郎