タグ

2011年10月14日のブックマーク (8件)

  • [雑記] 型推論の是非(C# によるプログラミング入門)

    概要 Ver. 3.0 C# 3.0 では、var キーワードを用いて、暗黙的に型付けされたローカル変数を定義できるようになりました(型推論(type inference))。 型推論は便利な機能ではあるんですが、“いいことずくめ”なものではなく、少々副作用もあって、 その利用形態をめぐって軽い論争が起きたりもしています。 具体的にいうと、var の利用ポリシーとして、 以下のようなものが考えらていて、 どれがいいのかでもめています。 匿名型利用時など、どうしても必要なときだけ使う ↑に加え、右辺が new SomeClass() のようなときだけ var を使う int, string などの組み込み型に対しては使わない 使えるところでは全部使う “いいことずくめ”なんだったら「使えるところでは全部使う」でいいんですが、 最初に言ったように、少々副作用を伴うので、利用を制限した方がいいの

    [雑記] 型推論の是非(C# によるプログラミング入門)
    n-e
    n-e 2011/10/14
  • 型推論(暗黙的型付け)と匿名型

    概要 (※修正予定: 型推論だけに絞って、「変数と式」の直後にでも移動。 匿名型の話は「クラス」の辺りか、「メソッド指向」か「データ処理」の辺りに移動。 Ver. 3.0 C# 2.0 以前、「静的型付け言語は冗長な記述が多くてめんどくさい」などと言われることがありました。 例えば、以下の例について考えてみてください。 System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>(); 「なんでこんな長ったらしい型名を左辺と右辺の両方で書かなきゃいけないんだ、 どっちか片方書けば、もう片方は推論できるだろう」という話です。 これに対して、C# 3.0 では、可能な限り型推論を行うような構文が追加されています。 ポイント var: 変数の型を推論してくれる。var x = 1;なら x

    型推論(暗黙的型付け)と匿名型
    n-e
    n-e 2011/10/14
  • 参照渡し

    概要 プログラミング言語での値の受け渡しの方法には 値渡し(pass by value)と参照渡し(pass by reference)という2つの方法があります。 C# では、値の受け渡しは基的に値渡しになります。 しかし、ref や out といったキーワードを使うことで参照渡しにすることが出来ます。 ポイント 値渡し: メソッド内で引数の値を書きかえても、呼び出し元には影響しない。 参照渡し(ref): メソッド内での値の書き換えの影響が呼び出し元に伝搬する。 out: 特殊な参照渡し。戻り値以外にも値を返したいとき(複数の値を返したいとか)に使う。 値の受け渡し 値の受け渡しが発生する場所は何カ所かあります。例えば以下のような場所です。 変数から変数 変数から引数 戻り値から変数 var x = 1; var y = x; // x から y に値を渡す static void

    参照渡し
    n-e
    n-e 2011/10/14
  • 拡張メソッド(C# によるプログラミング入門)

    概要 拡張メソッドは、静的メソッドをインスタンスメソッドと同じ形式で呼び出せるようにできるものです。 すなわち、 今までなら、 int x = int.Parse("1"); と書いていたものを、 static class Extensions { public static int Parse(this string str) { return int.Parse(str); } } というような静的メソッドを用意することで、 以下のような構文で呼び出せるようになります。 int x = "1".Parse(); ポイント 拡張メソッド: 静的メソッドをインスタンスメソッドと同じ書式で呼び出せるようにすることで、 あたかもクラスに新しいメソッドを追加したかのように見せかける仕組みです。 単に、静的メソッドを後置き記法で呼び出せるようになっただけとも考えることができます。 定義側: 第1引

    拡張メソッド(C# によるプログラミング入門)
    n-e
    n-e 2011/10/14
  • C# によるプログラミング入門 [データ処理] LINQ

    概要 Ver. 3.0 C# 3.0(そして、同時に発表された VB 9.0)の目玉となる新機能は、 Language Integrated Query、略して LINQ と呼ばれるもので、 リレーショナルデータベースや XML に対する操作をプログラミング言語に統合するものです。 LINQ を用いることで、様々なタイプのデータソースに対する検索や操作を、 共通の構文で行うことができます。 IEnumeable を実装するコレクションクラスに対するもの(LINQ to Object)や、 XML に対するもの(LINQ to XML)、 それに、リレーショナルデータベースサーバに対する SQL クエリを生成するもの(LINQ to SQL)などがあります。 LINQ には以下のような利点があります。 オブジェクト指向言語らしい書き方でデータベースへの問い合わせができます。 in-memor

    C# によるプログラミング入門 [データ処理] LINQ
  • 全てが式になる,全てが木になる,全てが式木になる - NyaRuRuが地球にいたころ

    関数型プログラマはプログラムを木だと思ってるらしい,より もいっこ yhara くんのところから. 関数型プログラマはプログラムを木だと思ってるらしい gauche.nightで出た話題だけど、関数型プログラマはプログラムを木だと思ってるらしい。 (car (string-split (string-reverse (string-upcase str)) "\n")) うん、これは木だ。 head $ lines $ reverse $ upcase str Haskellだと $ があるから見た目はネストしてないけど、実際には関数に関数の返り値を渡している。 そう、関数型プログラマは関数呼び出しの中に関数を書くことに抵抗がない。でもC言語とかだとさ、関数呼び出しの中に関数って書かないじゃん、普通。すごく短いやつを除けば、だいたい一旦変数に代入するでしょ。 そのへんの違いが関数型言語を学

    全てが式になる,全てが木になる,全てが式木になる - NyaRuRuが地球にいたころ
    n-e
    n-e 2011/10/14
  • ラムダ式(C# によるプログラミング入門)

    概要 Ver. 3.0 ラムダ式(lambda expression)と言うのは、 関数型言語と呼ばれるような種類のプログラミング言語における用語なのですが、 関数(メソッド)を整数などの変数と全く同列に扱う手法のことです。 C# 3.0 で導入されたラムダ式は、 以下のようなものだと思ってください。 「デリゲート」に対して代入すると、「匿名メソッド式」と同じ扱いになる。 Expression 型の変数に代入すると、式木(expression tree)データになる。 ポイント C# 3.0 で導入されたラムダ式には、2通りの意味があります。 匿名メソッドを 2.0 の頃の記法より簡単に書ける。 上述の匿名メソッドと同じ記法で式木を作れる。 例:Func<int, int> square = x => x * x; 匿名メソッドの記法の簡略化 まず、1つ目。 ラムダ式は、 C# 2.0 の

    ラムダ式(C# によるプログラミング入門)
    n-e
    n-e 2011/10/14
  • 多態性(C# によるプログラミング入門)

    概要 多態性(polymorphism: ポリモーフィズム)とは、 同じメソッド呼び出し(オブジェクト指向用語的には「メッセージ」という)に対して異なるオブジェクトが異なる動作をすることを言います。 ( ちなみに、polymorphism は多相性とか多様性と訳す場合もあります。 「poly(多)+morphism(射:形を変えるみたいな意味) → いろいろな姿を映し出す」という意味。 ) オブジェクト指向プログラミング言語には、 多態性を実現するために、仮想メソッドというものが用意されています。 ポイント オブジェクト指向の中核概念その3: 多態性。 同じ名前のメソッドを呼び出しで、異なる振る舞いをすること。 特に重要なのは、仮想関数を使った動的多態性。インスタンスの動的な型に応じて異なる振る舞いをする。 (メソッドのオーバーロードも多態性の一種(静的多態性)。) 静的な型、動的な型 「

    多態性(C# によるプログラミング入門)
    n-e
    n-e 2011/10/14