C#3.0

Effective JavaのアレをC#で

ねた元はこちら: なんぞこれ。コンストラクタパラメータが異常に大杉る・・・。バカなの?死ぬの?そういう場合はBuilderパターンを検討してみよう。 - Bug Catharsis C#3.0とC#4.0の2つを考えてみました。 まず、ネタ元の本文に このEffective JavaでJoshua B…

まわしまわされ

今週も(今日も)やってまいりました現実逃避のお時間です。 Haskellの本を読んでいたら遅延評価と竹内(様)関数のことが書かれていた。 なるほどー。 とか言いながら読んだのは結構前なのですが、今日ようやく手を動かしてみました。

機能追加

先日のNyaRuRuさんのエントリ(d:id:NyaRuRu:20080328:p1)の考え方は自分の中に無かった。面白かったです。便利そうだけどパッと応用例が浮かばない・・・。C++屋さんなら得意かもしれませんね。 MC++Dの「1.8 機能追加と不完全な実体化」にちょっと似てる…

SelectMany

まだ全部のクエリ演算子を実際に試したわけじゃないので時間見つけて触っていかなきゃ(現在バイト中...)。さて、今日は今までなんとなくスルーしてたSelectManyを楽しもう。 new[] { new { Prop = new[] { 1, 2, 3, } }, new { Prop = new[] { 4, 5, 6, } …

partial application

Python2.5でfunctoolsというモジュールが加わったらしい。全体は眺めてないけど,関数の部分適用とかできるみたい。 >>> from functools import * >>> def foo( x, y, z ) : ... return x + y + z ... >>> add5 = partial( foo, 5 ) >>> add5( 2, 3 ) 10 >>>…

Dictionaryの初期化

var dic = new Dictionary<string, int>(){ { "one", 1 }, { "two", 2 }, { "three", 3 } };</string,>

var result = from x in Enumerable.Range( 0, 6 ) select Math.Pow( 2, x ); (loop for x in '(0 1 2 3 4 5) collect (expt 2 x) ) [2**x for x in range(6)]

プロパティの自動実装

C#3.0の仕様に,遅れてひっそりと追加された「プロパティの自動実装」ですが, 「なんでこんなものを・・・」と思っておりました。 けど,実際使ってみるとクラスの中がとてもスッキリする。 プロパティが多いクラスはこれを用いると思いのほか可読性が向上…

accumulator generator

http://d.hatena.ne.jp/Nobuhisa/20071009/1191942302 やっぱり大丈夫そうでした。 Func<int, Func<int,int>> foo = ( x => (y => x += y)); var f1 = foo( 0 ); Console.WriteLine( f1( 10 ) ); //10 Console.WriteLine( f1( 10 ) ); //20 Console.WriteLine( f1( 10 ) ); //30</int,>

カリーライス

カリー化(http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96) って何じゃらほい?って感じだったので,色々調べておりました。 何となく分かった気がする。 C#3.0でもできるみたいです。 public class CurryTest { private delegate int…

カリーライス2

↑のエントリにお師匠(id:uskz)さまからコメント頂いてふと気づきましたが, そう言われるとクロージャでもできますね!JavaScriptの時代ですね!いやいやいや,C#3.0ちゃんだって負けてはいません! public int Plus( int v1, int v2, int v3 ) { return v…

両方から刺されてるx

Func<int,bool> f = ( x => x <= 10 );</int,bool>

仕様の勉強は一通り終わってるけど,DLINQとかXLINQの勉強はどうしましょう。 正直今はそこまで興味ない。。 自動プロパティってわざわざ追加する必要あったんでしょうか・・・。 まあいいか・・・

めんどくさがり屋のために

LINQ用に用意された標準の拡張メソッドは普通に使っても結構便利。 Pythonの組み込み関数の知識も貧弱だったので,あわせて勉強してみた。メモりんこ。 >>> map( lambda x: pow( 2, x ), data ) [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024] List<int> data = </int>…

ExpressionTreeの練習にC#3.0で簡易電卓(?)作ってみたよ! using CalcFunc = Func<int, int, int>; public class Calc { private Expression<CalcFunc> baseExp = ( ( a, b ) => a + b ); private delegate BinaryExpression Operator( Expression a, Expression b ); private stat</calcfunc></int,>…

Expression

http://d.hatena.ne.jp/Nobuhisa/20070811/1186837364 の続き(?) public void Test() { ParameterExpression paramExp = Expression.Parameter( typeof( int ), "hoge" ); ConstantExpression constantExp = Expression.Constant( 10, typeof( int ) ); B…

specification

1.0〜3.0までを含んだ仕様書 http://blogs.msdn.com/charlie/archive/2007/07/26/csharp-language-specification-version-3-0-available-for-review.aspx

いたずら

int result; result = (((Func<int, int>) ((x) => x * x)) ( 16 )); Console.WriteLine( result ); Func<Func<Func<Func<Func<int>>>>> f = () => () => () => () => () => 100; result = f()()()()(); // !!!1 Console.WriteLine( result ); ねむいっす。ねるっす。</func<func<func<func<int></int,>

var

varの魅力は「入力が楽になる」という点ではないように感じます。 動的型付け言語でプログラムを書いているような感じでプログラムが書けて、 でも型推論のおかげで静的型付けは済まされているので安全性はもちろん、強力なインテリセンスも使える。 これが…

遅延

Pythonを触り始めたころ、こんなこと出来たりするのかなと対話してみたら出来て少し感動した。 >>> class Hoge : def method( self ) : print "hello" >>> foo = Hoge >>> instance = foo() >>> instance.method() hello 似たようなことをC#3.0でやるとする…

System.Linq.Expressions名前空間

匿名メソッドと違い、ラムダ式はデータ(?)として扱うことが出来る。 2005年9月時点の仕様書には一例が載っていたけど「これはまた別の機会に」的なことが書いてあって、 詳細は書かれていませんでした。(確か 一例では、与えられたラムダ式を分解すると…

れんしゅう

public void Test() { List<int> list1 = new List<int>{ 1, 2, 3, 4, 5 }; List<int> list2 = new List<int>{ 1, 10, 100, 1000, 10000 }; MapCar( ( v1, v2 ) => (v1 * v2).ToString(), list1, list2 ); MapCar( ( v1, v2 ) => { string result = ""; for ( int i=0 ; i</int></int></int></int>