スラスラわかるC# 読書メモ 第3章

スラスラわかるC# (Beginner’s Best Guide to Programmin)

配列

C#では、配列の宣言と実体の生成方法が何通りかある。このうち、最も使い勝手が良いのは「var x = new[] {1,2,3,};」という記法らしい。

C#の配列は、作成時に与えた長さから変化しない。要素の追加・削除などを行い、途中で長さを変えたい場合には、List<t>クラスを利用する。

列挙型

曜日や月のように、特定の値しかとらないデータを表現するには、列挙型(enumeration type)を使うと便利。

列挙型の値は内部では整数として扱われており、上記DayOfWeek型であれば、Monが0、Tueが1、となる。列挙型の値を明示的に指定することもできる。

上記Month型では、それぞれの値はbyte型となり、Janが1、以降はFebが2、となる。

関数オーバーロード

同じ名前で引数の異なる関数を定義できる。

可変長引数

C#では、paramsキーワードを使うことで可変長引数を使うことができる。

オプション引数・名前付き引数

C#4.0以上では、オプション引数(省略可能な引数)と名前付き引数を使うことができる。なお、C#4.0に対応するのは、.NET Framework 4.0、Visual Studio 2010。やや古めの環境では対応していないので注意が必要。

名前空間のエイリアスと、エイリアス修飾子

名前空間のエイリアスを使うと、任意の名前でクラスにアクセスすることができる。このとき、エイリアスが同一名前空間内で定義されている別クラスと名前が衝突する可能性がある。名前の衝突を回避する方法として、エイリアス修飾子(::)がある。

スラスラわかるC# 第2章 読書メモ

スラスラわかるC# (Beginner’s Best Guide to Programmin)

型推論

varキーワードを使って変数を宣言すると、右辺の値を自動的に判別して変数を宣言する。

識別子の規則

正確な規則はUnicodeの話が入るのでややこしいのだけど、最低限覚えておく必要があるのは以下の規則。

  • 1文字目は半角英字もしくは_(アンダーバー)。正規表現: [a-zA-Z_]
  • 2文字目以降は、上記に加えて半角数字も可。正規表現: [0-9a-zA-Z_]
    • ただし、「int」のように言語のキーワードとして使用される単語は不可
      • @をつけることで言語のキーワードを変数名に使うことができる。「int @int = 1」はOK

本書では、1文字目に使える文字は「可読文字もしくはアンダーバー」、と書いていますが、「可読文字」は一般的な用語ではなく、半角数字を含まないことを予期しづらいと思います。「ユニコード文字を識別子に使わない」という制約を加えるなら、上で書いた簡略化した規則さえ覚えておけばOKです。

変数のスコープ

Cと同様のブロックスコープがあるが、1点だけ違いがある。

整数リテラル・浮動小数点数リテラル・10進数リテラル

整数リテラルの後ろにuまたはUをつけると符号なし(Unsigned)、lまたはLをつけるとlong型になる。
同様に、浮動小数点数リテラルの後ろにfまたはFをつけると単精度、dまたはDをつけると倍精度になる。浮動小数点数リテラルは指数表記できる。
小数の後ろにmまたはMをつけると10進数型になる。浮動小数点数型では、2進数で正確に表せない小数が循環小数となってしまう問題がある。それに対して、10進数型では、28桁までの10進数であれば正確な値が保持される。

文字リテラル・文字列リテラル・逐語的文字列リテラル

char型の値はシングルクォートで囲み、string型の文字列リテラルはダブルクォートで囲む。string型のリテラルのダブルクォートの直前に@をつけると、逐語的文字列リテラル(verbatim string literal)となる。通常のstringは複数行に渡って文字列を定義できないが、逐語的文字列リテラルでは複数行に渡った定義でき、また、エスケープシーケンスが解釈されずそのまま表示される。

オブジェクト型

オブジェクト型(object)は、全ての型に共通する基底クラス。

匿名型

名前の無い型を定義できる。

Null合体演算子(Null coalescing operator)

型変換

C#では、桁落ちしない、より大きな範囲を扱える型への変換だけが暗黙的に行える。明示的な型変換を行うには、「(変換先の型名)式」という記法を用いる。

オーバーフローのチェック

C#では、オーバーフローを無視するかエラーにするかを選択できる。
checked/uncheckedには式とステートメントの2種類の書き方がある。

↓はcheckedステートメントの例。これを実行すると、オーバーフローが発生した旨の例外が投げられる。

以下はunchecked式の例。unchecked式の中で発生したオーバーフローは無視される。

C#の学習環境にXamarin Studioを使うのはつらそう

『スラスラわかるC#』第1章 読書メモで「コンソールアプリケーションメインなので、Xamarin Studioを使えばWindows無しでもOKかも」と書きましたが、前言撤回。XamarinのC#とVisual C#とは、構文レベルでは互換性があるものの、環境面では互換性がないため、Visual C#で動くコードがXamarinでは動かない(正確には、動かすための設定が必要)という現象は、コンソールアプリケーションでも結構発生するみたいです。

たとえば、以下のソース。

コンソールからユーザーの入力値を受け取って、それを表示するだけの単純なソースですが、Xamarin Studioで「C# > コンソールアプリケーション」を作成して上記ソースに書き換えても、動きません。プロジェクトの設定変更が必要です。

Xamarin Studio使えばWindowsに悩まされずC#に集中できるかな、と思ってXamarin Studioをセットアップしてみたのですが、実際のところ、Visual C#とXamarinには環境の違いがあって、そこに悩まされそうな感じがします。

ということで、どうしてもMacでC#を学びたいというわけでなければ、たとえWindowsに不慣れでも、C#の学習環境としては素直にVisual Studioを使ったほうが良いと思います。

『スラスラわかるC#』第1章 読書メモ

『10日でおぼえるC#入門教室』が割と不親切(説明なしに専門用語が出てくる)でつらい感じだったので、改めて入門書を入手しました。

スラスラわかるC# (Beginner’s Best Guide to Programmin)

実を言うと、本書もAmazonレビューでは「プログラミング未経験者には難しい」という評判です。しかし、自分の場合、プログラミング未経験というわけではないので、C#やWindowsアプリケーション特有の概念がちゃんと説明されてれば、オブジェクト指向とかは端折り気味でも構いません。購入のポイントはページ数の少なさ(それでも400ページありますが)と、判型のコンパクトさ。また、ざっと眺めた感じ、『10日でおぼえるC#』で説明されていなかった用語が本書では説明されていたので、『10日でおぼえるC#』よりは説明が丁寧だろう、と。

あと、わからないことを調べる用にVisualC#2013パーフェクトマスターも買いました。こちらは、1000ページ以上あって通読には向かないですが、目次・索引が充実しているのでやりたいことベースで探せるのと、スクリーンショットが豊富なのでVisual Studioの操作がわからない時に使えそうかな、と(Web検索はIDEの操作法を調べるには向かない)。

以下、読書メモ。

.NET Frameworkとは

.NET Frameworkは、アプリケーションの実行基板。仮想実行環境(VSE)、基本クラスライブラリ(BCL)を備えている。

仮想実行環境

C#では、ソースコードをマシン語に変換する前にCIL(Common Intermediate Language, 共通中間言語)に変換する。このCILを実行するのがVSE(Virtual Execution System, 仮想実行環境)。.NET Framework上で動作する言語(C#, VB.NET, F#等)は、全てCILにコンパイルされる。

基本クラスライブラリ

.NET Frameworkに標準で用意されているライブラリ。BCL(Base Class Library)。

Hello, World

Windows 10(Developer Preview) + Visual Studio 2013で一度動かした後、Macでも動くC#開発環境Xamarin Studioを入れて、こちらでも動くのを確認。『スラスラわかるC#』はコンソールアプリケーションがメインのようなので、Windows無しでも学べそう。

Visual Studio賢いとよくいわれるけど、Xamarin Studioも十分に賢いので、C#という言語の仕様自体がIDEに向いている、という感じがある。

『10日でおぼえるC#入門教室』1日目

10日でおぼえるC#入門教室 (10日でおぼえるシリーズ)

次期プロジェクトでC#が必要になったので。。。PMからは「『パーフェクトC#』読んできてね」と言われたんですが、いきなり『パーフェクトC#』はきつそうだったので、新し目の入門書ということで本書をチョイス。

以下、読書メモ。

ビルド

  • コンパイル:ソースをコンピュータが実行できる形式に変換する
  • コンパイラ:変換プログラム
  • アセンブリ:変換した実行可能なプログラム(Unixの世界だとバイナリと呼ぶことが多いと思うけど、Windowsではアセンブリと呼ぶ?)

アセンブリは、拡張子が.exeのファイル。

通常、1つのアセンブリは複数のソースファイル、画像等のリソースファイルから構成される。また、.NET Frameworkのようにソース内で利用する外部のアセンブリ(ライブラリ、拡張子は.dll)を用いることが多い。

個々のソースファイルをコンパイルし、外部のアセンブリの参照を解決し、リソースと組み合わせて1つのアセンブリを出力する作業全体をビルドと呼ぶ。

C# と Visual C

C#は、マイクロソフトが仕様を提案したプログラミング言語。Visual C#は、マイクロソフトによるC#実装。マイクロソフト以外のC#実装としてはXamarin C#がある。

Visual Studioのインストール

Visual Studio 2013 Ultimate Update 4をインストールしたら、インストール量11GBで1時間以上かかりました。。。

ウィンドウ名称

  • デザイナー:WindowsフォームのGUIをWYSISYG編集するためのウィンドウ
  • ソリューションエクスプローラー:プロジェクトのファイルを管理するウィンドウ
  • プロパティウィンドウ:プロパティを編集するウィンドウ

用語

  • プロジェクト:実行ファイル、ライブラリなど、1つの実行ファイルを作成するのに必要となるファイルや設定のコンテナ(.csproj)
  • ソリューション:このソリューションが提供するソフトウェアシステムを構成するプロジェクトを格納するコンテナ(.sln)

ソリューションとは???

デバッガの使い方

「最強IDE」Visual Studioの面目躍如といったところ。言語とIDEとライブラリが高度に結合されているこの感触は、OSSのスクリプト言語などではなかなか味わえない。