2010年10月04日

falseとtrueを交互に返す方法(C#)  

   このエントリーをはてなブックマークに追加 mixiチェック Clip to Evernote
ネタ元:
a2c.get.diary ■[python] 0と1を次々返す方法
404 Blog Not Found - Algorithm - 0と1を次々と返す簡単なお仕事

すでに旬を過ぎたみたいだけど、C#で僕も書いてみました。

espresso3389の日記 で、espresso3389 さんが素晴らしいコードを紹介しているけど、もう少しオーソドックスな実装で。

true, false を交互に次々と返すようにしています。

でも、これだと、再利用性が低いので、やはりクラスにするべきかな、ということで書いたのがこれ。

dankogaiさんのコードに合わせて、いったんfunc変数に入れてから呼び出しています。
でも、Func<bool> と型を指定するのは面倒です。やはり var を使いたいです。
それと、初期値を設定できないのも、イマイチなので、

としてみました。いわゆる関数を返す関数です。
これならば、var が使えるし、初期値も与えられます。
でも、よくよく考えたら、staticフィールドは、余分ですね。
FlipFlopクラスは、
で、OKでした。
結局、espresso3389 さんのコードと、本質的には大きく変わらないものになってしまいました。


この記事へのコメント
あ、

value = !value

の部分は、それだけで値を持つので(値として評価可能なので)、ラムダ式中では、returnはいりませんね・・・。
少しだけ短くなる可能性を見逃していました。

やはり、まだまだ、精進が必要なようです。
Posted by espresso3389 at 2010年10月05日 03:51
espresso3389 さんの記事は、目からうろこでした。
僕もまだまだ精進が必要です。
Posted by Gushwell at 2010年10月05日 21:50
class Flip {
bool b;
public Flip(bool b) { this.b = b; }
public static implicit operator bool(Flip f) {
return f.b = !f.b;
}
public static implicit operator Flip(bool b) {
return new Flip(b);
}
}

Flip f = false;
Console.WriteLine(f);
Console.WriteLine(f);
Console.WriteLine(f);

今さらですが、定義側じゃなくて使用側に重点をおいてみました
こんなのを書いた日には大目玉ですね
Posted by sz at 2010年10月19日 19:08
1週間、不在にしていて、コメント遅れました。

なるほど、implicit で暗黙の型変換ですか。
遊びとしては、とても面白いコードですね。

Posted by Gushwell at 2010年10月24日 13:28
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52076070
この記事へのトラックバック
Gushwellさんのの記事や、BlUEPIXYさんの記事やespresso3389さんの記事をみてやってみました。    ちょっと違ったやりかたとして、無限数列と外...
F#雑記 falseとtrueを交互に返す方法【F#入門と妄想英単語】at 2010年10月06日 07:00