タグ

ブックマーク / ufcpp.net (49)

  • C# の式と文の一覧

    ※1 論理演算と条件演算に関しては、同列の優先順位ではなく、上から順に優先度が付いています。 ※2 クエリ式、ラムダ式、代入は同列で、例えば、以下のような C# コードを書けます。 int sum = 0; Func<IEnumerable<int>> q = () => from x in new[] { 1, 2, 3, 4, 5 } select sum += x; 結合規則 優先順位が同じ場合、クエリ式、ラムダ式、代入の3つは右から、その他の式は左から結合します。 左結合は、例えば、a + b + c + d なら ((a + b) + c) + d と同じ意味です。 右結合の例は Func<int> f = x => s += x; なら Func<int> f = (x => (s += x)); になります。 評価順 演算子のオペランドは、演算子の優先順位や結合規則によらず、

    C# の式と文の一覧
  • 【開催報告】 //build/ 振り返り勉強会

    5/21(土)に勉強会を開いてました。 今回はまどすた(旧めとべや)との共同開催で、//build/の振り返りでした。 C#ユーザー会 //build/ 2016振り返り 勉強会 まどすた #1 ~ //build/ 2016 振り返り 以下、当日資料の一覧です。 ルームA (サーバー部屋) //build/ まとめ(サーバー編)

    【開催報告】 //build/ 振り返り勉強会
  • 型付き参照

    アンダーバー2つ(__)から始まっていて、いかにも隠し機能ですが、図1のように、一応、Visual Studio のサポートもかかります。 といっても、コード補完(IntelliSense)には出ず、キーワードのハイライトのみです。 隠しキーワード(__arglist) ちなみに、標準仕様外の機能ですが、Mono のC#コンパイラーもこの機能対応していて、こちらでも普通に使えます。 ※ 補足: 内部的な話 参照が作れないのは C# の言語仕様上の制限で、.NET の 「IL」 の仕様上は参照があります。 C# でも、内部的には(コンパイル結果の IL 的には)、値型の this 参照や、値型の入れ子の書き換えなどで参照が使われます。 struct A { public int x; public int Y() { return this.x * this.x; // この this はメ

    型付き参照
  • [サンプル] イテレータとマイクロスレッド

    概要 ゲーム開発の分野を中心として、 マイクロスレッド(microthread)あるいはコルーチン(coroutine)、ファイバー(fiber)などと呼ばれる概念が考えられています。 C# 2.0 の「イテレーター」構文を使うと、 マイクロスレッドと似たようなことができます。 デモ → シューティングゲーム風。 ( ソース一式 (zip 形式)。) マイクロスレッドとは 狭い分野でしか使われてない言葉なので、 定義も用語もあまりはっきりと固まっていないんですが、 ここでの説明は数ある定義のうちの1つだと思ってください。 マイクロスレッドというものの背景には、 アクションゲームやシューティングゲームの敵や弾の動作ロジックをどう書こうかという話があります。 シューティングゲームなどでは、時間をフレームと呼ばれる単位に区切って、 1フレームごとに敵や弾の位置を更新するという方式をとる場合が多い

    [サンプル] イテレータとマイクロスレッド
  • C#の今と未来

    先週金曜日の、ブログに残しとくの忘れてた。 「開発エキスパートに学ぶ! C# と Visual Studio の今と未来」ってタイトルのセミナーで登壇してきました。 古賀さんの書籍「チーム開発の教科書 C#によるモダンな開発を実践しよう! Visual Studio 」の出版記念だったりします。 ということで、多少チーム開発のことを意識しつつで「C#の今と未来」な話をしてきました。 どういう背景があって今のC#があるか、C#の言語仕様の裏にある設計思想みたいな感じの話を中心に。あと、少しだけ、オープンソースになって少し見えてきている今後の話を。 まあ、前半とかは、C#に限らず、新しめのプログラミング言語には共通して言えるような話かなぁとも思います。良いとされるパターンを楽に書けないといけない。さもないと、特にチーム規模大きくなればなるほど、締め切りに追われて負債の蓄積。 新しい技術、特にプ

    C#の今と未来
  • 演算子のオーバーロード

    概要 オブジェクト指向言語ではクラスを定義することで自分の思い通りの「型」を作ることが出来ます。 このような自作の型は、int や double などの組込み型と区別するため、 ユーザー定義型と呼ばれています。 ユーザー定義型の理想は、組込み型とまったく同じように扱えることです。 ユーザー定義型をあたかも組込み型であるかのように扱えるようにするため、 C#には演算子のオーバーロードというものが用意されています。 C#の組込み型には + や - などの演算子が用意されていますが、 演算子のオーバーロードを行うことで、 ユーザー定義型にも自分で演算子を定義することが出来、 組込み型と同じように扱うことができます。 このように、演算子のオーバーロードによってユーザ定義型に追加された演算子のことをユーザ定義演算子と呼びます。 ポイント 組み込み型(int や string など)とユーザー定義型(

    演算子のオーバーロード
  • ++C++; //未確認飛行 C++

    using static System.Console; class Welcome { /// <summary> /// saying hello to all visitors and welcome. /// </summary> /// <param name="args">visitors</param> public static void Main(string[] args) { foreach(string visitor in args) { WriteLine($"Hello {visitor}."); } WriteLine("Welcome to my web page."); } } C# によるプログラミング入門 コンピュータの基礎知識 アルゴリズムとデータ構造 ブログ ようこそ ++C++; へ。 C#・情報工学を中心に勉強用ページとブログを載せています。

    ++C++; //未確認飛行 C++
  • アルゴリズムとデータ構造

    アルゴリズムとかデータ構造というのは、プログラミングの基礎中の基礎ですね。いまどきは、いろいろな言語において標準ライブラリで提供されていたりしますから、ただ使うだけならこれらを1から自分で書けるようになってもそんなにうれしくはないですが、必要な場面でよりよいアルゴリズムを選択できるように、概要くらいは知っておきたい物です。というわけで、ここではアルゴリズムとデータ構造についての話をしていこうかと思います。 説明やサンプルには、有無を言わせず C# を使います。 うちは C# 入門サイトですから。 ある意味、「C# によるプログラミング入門」のサンプルプログラムの延長みたいなページになってるかも。

    アルゴリズムとデータ構造
  • 列挙型(C# によるプログラミング入門)

    概要 C# では、列挙型(enumeration type)と呼ばれるものを利用することで、曜日などの特定の値しかとらないデータを表現することが出来ます。 ポイント 列挙型: 特定の値しか取らないようなもの(例えば曜日など)に対して使う型 enum DayOfWeek { Monday, Tuesday, ... } 列挙型とは 例えば、曜日は月・火・水・木・金・土・日の7つの値しか取りませんし、 英語の月は January, February, March, April, May, June, July, August, September, October, November, December の12個の値しか取りません。 その他にも、 飛行機の乗車クラス(エコノミー・ビジネス・ファースト)、 日の年号(明治・大正・昭和・平成)、 性別(男・女)など、特定の値しか取らないものはたく

    列挙型(C# によるプログラミング入門)
  • クラス

    迷うようならクラスにしておけばいいと思います。 構造体は、以下の条件がそろっている場合にのみ使います。 データのサイズが小さい(目安としては16バイト程度以下) 絶対に継承しないと分かっている 変数への代入がコピーを生むというのが許容できる クラスの分割定義 Ver. 2.0 C# 1.1 以前は、クラスの定義は全て1つのファイルに収める必要がありました。 まあ、1つのクラスの中身が、複数のファイルに散在するとソースファイルの可読性が低くなるので、 通常は、むしろ、クラス定義を複数のファイルに分割できない方がいいのですが、 時折、クラス定義を分割したい場面があります。 例えば、Visual Studio などの統合開発環境を利用していると分かると思いますが、 ソースファイルの一部分はプログラマーの手書きではなく、 開発ツールが自動的に生成してくれる部分があります。 そして、この自動生成部分

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

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

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

    概要 プログラム中で、ある条件を満たしたときだけ処理の流れを変えたい場合があります。 このような処理を条件分岐といい、 C#では条件分岐のために if、else、switch などのキーワードを用意しています。 ポイント if(条件式) 真のとき if(条件式) 真のとき else 偽のとき switch(条件) { case 値: ... } goto Label; if 文 if 文は以下のような書き方をします。 if(条件式) 文1 // 条件式が真のときに実行される else 文2 // 条件式が偽のときに実行される 英文法に近い書き方ですね。 if A, B, else C (もし A ならば B、さもなくば C)。 if 文は if の後の括弧内に書かれた条件式の真偽によって処理の流れを変えます。 条件式が真のときには 文1 が、偽のときには 文2 が実行されます。 また、el

    条件分岐
  • マルチスレッド (C# によるプログラミング入門) - ++C++; // 未確認飛行 C++

    概要 .NET Framework では、マルチスレッドプログラムを作成するためのクラスライブラリを提供しています。 C# でマルチスレッドプログラムを作成する場合、これらライブラリ中のクラスを用いて行うことになります。 また、C# ではスレッド間の同期を取るために lock 文という構文を用意しています。 ポイント C# なら、Thread クラスとデリゲートで並行処理・並列処理もお手軽。 実際には、スレッドを直接作らず、スレッド プールというものを介して使う。 .NET Framework 4 以降なら、Task クラスを利用。 排他処理は lock 文で。 マルチスレッドとは まず、スレッドに関して簡単に説明しておきます。 簡単に言うと、スレッド(thread: 糸、筋道)とは一連の処理の流れのことを言います。 図1 に示すように、 処理の流れが一道な物をシングルスレッド、 複数の

    マルチスレッド (C# によるプログラミング入門) - ++C++; // 未確認飛行 C++
  • 標準クエリ演算子(クエリ式関係)

    概要 Ver. 3.0 「LINQ」で、 構文の追加(クエリ式): C# 3.0 で、SQL 風の問い合わせ構文が書けるようになった。 メソッド群の追加(標準クエリ演算子): クエリ式は、Where、Select などのメソッド呼び出しに変換される。(これらのメソッドを標準クエリ演算子と呼ぶ。) という話をしました。 ここでは、 どういう C# クエリ式がどういう標準クエリ演算子(メソッド呼び出し)に変換されるかを説明しつつ、 クエリ式に関係する標準クエリ演算子を紹介します。 (ちなみに、標準クエリ演算子の中には、クエリ式で表せない (メソッド呼び出しの形でしか使えない)ものも多数あります。 次節の「標準クエリ演算子(その他)」で説明。) サンプルデータ 次節以降の説明では、例として以下のようなデータを使います。 var a = new[] { new { X = 0, Y = 10, Z

    標準クエリ演算子(クエリ式関係)
  • 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
  • foreach

    ここでは詳細には触れませんが、 当サイト上にある「C++ STL」や「アルゴリズムとデータ構造」でもコレクションについて簡単な説明がありますので、興味のある方はそちらをご覧ください。 また、コレクションについてより詳しく知りたい方は検索エンジンで「データ構造 アルゴリズム」などをキーワードにして検索してみてください。 ここでは例として連結リストを示します。 あくまで例として示すだけなので、単純な実装方法を取っています。 (来はもう少しちゃんとした実装の仕方をしないとだめ。) using System; using System.IO; /// <summary> /// リストのノード /// </summary> class Node { public int elem; public Node next; public Node() : this(0, null){} public

    foreach
  • デリゲート

    概要 デリゲート(delegate: 代表、委譲、委託)とは、メソッドを参照するための型です。 C言語やC++言語の勉強をしたことがある人には、 「デリゲートとは関数ポインターや関数オブジェクトをオブジェクト指向に適するように拡張したもの」 と言った方が分かりやすいかもしれません。 デリゲートは用途も関数ポインターとほとんど同じで、 述語やイベントハンドラ(「イベント」で説明)等に利用します。 ただし、C言語の関数ポインターと違い、 インスタンスメソッドを参照したり、 複数のメソッドを同時に参照する事が出来ます。 delegate(委譲)という言葉のニュアンスとしては、 「他のメソッドに処理を丸投げするためのオブジェクト」というような意味です。 イベントが起きたときのイベントハンドリングをどのメソッドに丸投げ(委託)するかを指示するためなどに使われます。 ポイント C# では、メソッドも他

    デリゲート
  • イテレーター - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

    概要 C# の foreach 構文は、コレクションクラスの利用者側から見ると非常に便利な機能です。 しかしながら、実装側から見た場合、IEnumerableやIEnumeratorインターフェースを実装する必要があり、結構面倒な作業が必要でした。 この実装側の労力を軽減するために、C# 2.0ではイテレーター構文というものが追加されました。 ポイント イテレーター構文: IEnumerator を簡単に実装するための機能。 return の代わりに yield return イテレーター ブロック メソッドやプロパティのgetアクセサーなどを定義する際、ブロック中にreturnの代わりにyield returnもしくはyield breakを書くことで、通常のメソッドやプロパティとは違った動作が得られます。この、yield returnもしくはyield breakを含むブロックのことを

    イテレーター - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
  • 組込み型

    int は integer (整数)の略で、short と long の意味は名前通り、記憶領域サイズの長い/短いの違いです。 byte も名前通りで「1バイトの変数」という意味です。 sbyte の「s」は signed の s で符号付きを意味します。 また、uint, ushort, ulong の「u」は unsigned の u で符号無しを意味します。 ちなみに、8バイトよりも大きな整数値を扱いたい場合、BigInteger構造体(System.Numerics名前空間)という物を使います。 (構造体や名前空間については別項にて説明します。) また、C# 9.0 で追加された nint、nuint は、 32ビット CPU で使う場合は int、uint と同じで、 64ビット CPU で使う場合は long、ulong と同じ範囲の値を使えます。 ただし、どちらのタイプの C

    組込み型
  • プロパティ

    概要 プロパティ(property:所有物、特性)とは、JavaC++にはない(Visual Basicにはある)機能で、 クラス外部から見るとメンバー変数のように振る舞い、 クラス内部から見るとメソッドのように振舞うものです。 JavaC++がこの機能を持ってないことからも分かると思いますが、 プロパティはオブジェクト指向言語に必須の機能ではありません。 しかし、これから説明していくように、あると便利なものです。 ポイント プロパティ: 中(実装側)からはメソッドのように扱え、外(利用側)からはメンバー変数のように見えるもの。 実装の隠蔽(カプセル化)の原則を崩すことなく、 アクセサー関数の煩雑さを解消。 プロパティとは 「実装の隠蔽」で、 メンバー変数はクラス外部から直接アクセス出来ないようにして、 オブジェクトの状態の変更はすべてメソッドを通して行うべきだと書きました。 これを忠

    プロパティ