ようこそ。睡眠不足なプログラマのチラ裏です。

C#4.0

F#でRxる。よく訓練されたF#erはコンピューテーション式をつくる。

いにしえからの言い伝えによると、よく訓練されたF#erはコンピューテーション式をつくるそうです。 Select Many: Reactive Extensions’ Mother Of All Operators (Chaining). お、SelectManyですね。 なるほどなるほど。計算を繋ぐもの。モナドですか。そこ…

F#かわいいよF#。F#の並列処理や非同期計算の理解を深めるために、FSharpAsyncとFSharpAsyncBuilderのラッパーをC#で書いてみた。

ご存知、F#は並列処理や非同期処理について考慮されて設計された強力な言語です。 いくつかサンプルプログラムを書いて、わたしもその雰囲気については過去に簡単に確認していました。 しかし、FSharpAsyncやFSharpAsyncBuilder(computation expression)にど…

SilverlightやWPFやってっと、弱い参照のキーと値を管理するWeakDictionaryが欲しくなるよね。

「弱い参照」と「強い参照」.NET Frameworkでは、ガベージコレクションによってメモリが管理されます。 変数(フィールドやローカル変数など)に格納されている参照のことを「強い参照」と言います。 強い参照によるオブジェクトは、そのオブジェクトがアク…

C#で今風メタプログラミング。Expression Tree(式木)に慣れ親しもう。

久しぶりにExpression Tree(式木)をいじってました。 .NET Framework4では式木が大幅にバージョンアップして、複文や条件分岐、ループなどが表現できるようになりましたが、 それによってどんな面白いことができるかは、まだ模索中だったりします。 今回はと…

拡張メソッドバブルのこのご時世、ふつうのデリゲートをジェネリックデリゲートに変換したいことってあるよね。

拡張メソッドバブルのこのご時世、ジェネリックデリゲートに対して拡張メソッドが定義されていることとかも少なくない。 ということで、ふつうのデリゲートをジェネリックデリゲートとして扱いたい!なんてケースもあるようなないような。いや、きっとありま…

MVVMパターンのViewModelで、INotifyPropertyChangedをいちいち実装すんのかったるい。かといって、AbstractなViewModelBaseは継承したくないでござるよ。

INotifyPropertyChanged インターフェースを実装した抽象クラス ViewModelBase は、残念な俺俺設計MVVMパターンでViewModelを実装する場合、INotifyPropertyChanged インターフェースを実装するのが面倒という理由もあって、 INotifyPropertyChanged インタ…

F#でもdynamic(動的型付け)したかったけど・・・、The ? Operatorで我慢の子。

C#4.0およびVB10で利用できるようになった、System.Dynamic.ExpandoObjectクラス。 これはDLR(動的言語ランタイム)の相互運用モデルのひとつとして機能する。 例えば、ExpandoObjectクラスのインスタンスを、IronPythonの関数に渡すことができる。 このSyste…

F#でMVVMパターン。はじめてのWPFプログラミング。ModelとViewModelをF#で、ViewはXAMLとC#で。

遅ればせながら「WindowsForm終了のお知らせ」を感知WPFに関しては、仕事で使う機会もなく、自宅に満足な開発環境もなかったという理由で、 関連記事の流し読み程度はしていましたが、基本華麗にスルーしてきました。 しかし、Windows7が好感触だったり、今…

C#でもLazy Evaluationしたいよね。カリー化しーの、遅延評価しーの、トツギーノ。

.NET Framework4.0には System.Lazy なんてものが追加されていて、 もしかして遅延評価標準サポートktkr?と、思わずwktkした人も少なくないのでは。 ですが、これはインスタンスの生成を遅らせるだけの代物でした。多くのC#erの期待は一瞬にして儚く散って…

この関数呼んだら毎回超モッサリするんだけど?だったらメモ化とかしてみたら?というただのメモ

メモ化とはプログラムを高速化するための最適化技法のひとつで、 関数呼び出しの結果を保持しておいて再利用するというものです。 1度呼び出された関数が再度呼び出されたときに再計算をせずに、保持しておいた値を再利用する手法です。 具体的には、キーと…