|
■No68892 (krk さん) に返信 > 初めまして。いつもお世話になっています。 > C#に関する質問です。 > > 早速ですが、 > 真偽を返す関数がいくつも存在するとします。(たとえば、A(), B(), C(), D()...) > また、処理は関数内のみで完了するものとします。 > 上から順番に関数を実行して、ある関数が真を返す場合にはそれ以下の関数は実行しないようにしたい場合に、 > > if(!A()){ } > else if(!B()){ } > else if(!C()){ } > else if(!D()){ } > ... > ---------------- > > if(A() || B() || C() || D() || ...){/*処理なし*/} > > ---------------- > > bool b = A() || B() || C() || D() || ...; > // bは使用しない > ---------------- > > 以上のうち、どの書き方が一番よいのでしょうか? > 又は、他にいい書き方がありますでしょうか。 > どの書き方も、何となく気持ちがわるくて、もっといいやり方があるんじゃないかと考えてしまいますが、思いつきません。 > ご教授いただけますと幸いです。よろしくお願いいたします。
「もっと良いやり方」という曖昧な言葉ではなく、不満な点、解消したい点を明確にしてください。 あなたの中にある「不満に思っている点」は、誰にものぞき見ることはできません。
> 上から順番に関数を実行して、ある関数が真を返す場合にはそれ以下の関数は実行しない 最初の if 文の列は、この文をそのままコードに変換しています。 つまり、「実行したいこと」を一番的確に表現できています。 それよりも「もっと良いやり方」とは、何を基準に「良い」「悪い」を判断するのでしょうか。
> if(A() || B() || C() || D() || ...){/*処理なし*/} > bool b = A() || B() || C() || D() || ...; これらが「何となく気持ちがわる(い)」のは、使用しない処理があるからでしょう。
Func<bool>[] funcs = new Func<bool> { A, B, C, D }; foreach (var f in funcs) { if (f() == true) { return; } }
だったかな?とか。
|