« 高野和明「ジェノサイド」角川書店 | トップページ | R・A・ラファティ「昔には帰れない」ハヤカワ文庫SF 伊藤典夫/浅倉久志訳 »

2013年3月25日 (月)

Jesse Liberty, Brian MacDonald「初めてのC# 第2版」オライリー・ジャパン 日向俊二訳

 本書「初めてのC#」では、C# 2005 と .NET2.0 の開発プラットフォームについて紹介します。本書は、初心者プログラマと、VB6やそのほかの非オブジェクト指向プログラミング言語からC#に移行しようとしている読者を対象としています。本書を読み進むと、.NET のための高品質で生産性の高いプログラミングを学ぶことができます。

【どんな本?】

 ある種のプログラマには定評のある O'Reilly の NutShell シリーズの一つ。Microsoft が Windows アプリケーション開発用に生み出したオブジェクト指向プログラミング言語 C# の入門書。プログラミングの経験はあるがオブジェクト指向の経験は少ない人を対象に、C#言語の機能・構文・文法を解説する。

 対象とするC#の版は、2005年11月にリリースした C# 2005 こと C#2.0、処理系は Visual Studio 2005。

【いつ出たの?分量は?読みやすい?】

 原書は Get Start With C# 2.0 and .NET Programming. by Jesse Liberty & Brian MacDonald, 2006。日本語版は2006年8月10日初版第1刷発行。単行本ソフトカバー横一段組みで本文約345頁。8ポイント48字×38行×345頁=約629,280字、400字詰め原稿用紙で約1574枚。長編小説なら3冊分ぐらい。

 全般的に読みにくい。実用的な入門書で読みやすさは重要な要素なので、後に詳しく説明する。

【構成は?】

 まえがき
1章 C# と .NET プログラミング
2章 Visual Stdio 2005
3章 C# 言語の基礎
4章 演算子
5章 実効制御
6章 オブジェクト指向プログラミング
7章 クラスとオブジェクト
8章 メソッド
9章 デバッグ
10章 配列
11章 継承とポリモーフィズム
12章 演算子のオーバーロード
13章 インターフェース
14章 ジェネリックとコレクション
15章 文字列
16章 例外
17章 デリゲートとイベント
 索引

 各章の末尾には、「まとめ」と「演習問題」がついてる。演習問題の回答は、O'Reilly のサイトから入手できる。

【感想は?】

 実用書としては、帯に短したすきに長し。あまりお勧めできない。

 まず、最初に謝罪。こういう本を紹介する時は、「これを読むと○○ができるようになります」と「出来るようになること」を書き、かつ実証すべきだと思うんだが、実は私、今の所、一行もC#のプログラムを書いてない。だって処理系を持ってないし、持っていても Windows 上での開発経験は無いし←をい。まあ、そういう、無責任な書評だ、とご了承ください。

<この本を読むと、何ができるか>

 スタンドアロンの Windows が動く環境で、コンソール・アプリケーションが作れる…かもしれない。はっきり言って、役に立つプログラムは作れない。サンプルは、コマンド・プロンプト上で動くモノしか扱っていない。しかも、入出力で出てくるのは Console.WriteLine()、つまり「標準出力にテキストを書き出す」だけで、標準入力すら扱わない。 ましてや、GUIを伴うプログラムを作るのは無理。

 多少なりとも役に立つプログラムを作りたいなら、C#言語についてもっと突っ込んだ解説書である「プログラミングC#」と、.NET Framework 関係の知識が必要。いや私 Microsoft Windows の開発環境は何も知らないんで、他にも必要な事があるかも知れないが、ご容赦ください。

 つまり、この本は、プログラミング言語としての C# の機能・文法・構文の概要を掴むための本なのだ。

 サンプルは豊富に出てくるが、分割コンパイルの方法は出てこない。また、正規表現の詳細や、よく使うクラス・ライブラリの継承関係やメソッドなど、突っ込んだ話は省略している。結局、誰向けに書いたんだ?

<対象読者>

 冒頭の引用にあるように、以下の条件すべてにあてはまる人を読者として想定している。

  • Microsoft Windows を使っている。
  • プログラミングの経験がある。
  • オブジェクト指向での経験は乏しい。

 が、しかし。そういう読者に、あまりこの本はお勧めできない。というか、正直いって、入門書としてはお勧めできない。対象読者が、イマイチ絞りきれていない感がある。

 まず、訳文が硬い…というか、RFCとかでアリガチな、原文に忠実な翻訳調。技術文書だから読みやすさより正確さが重要なのは仕方がないが、慣れていない人には辛いだろう。そして、慣れている人なら、ワンランク上の「プログラミングC#」を読むだろう。

 次に、内容。最初の方では、「なぜ条件分岐なんて機能が必要なのか」とクドクド書いている。プログラミングの初心者には親切だろうけど、他の言語で経験がある人にとっては、かなり鬱陶しい。ってんで読み飛ばすと、大事な所も読み飛ばしちゃったりする。

 これが後半になると、いきなりハードルが上がって何の解説もなく「スコープ」や「コールバック」なんて言葉が出てくる。経験豊富な人には親切なんだが、初心者には意味不明だろう。そして、経験者なら、「プログラミングC#」を読むだろう。結局、誰向けに書いたんだ?

<感想>

 まず、「どんな奴がどんな目的でよんだのか」を示そう。私のプログラミング経験は…

  • プログラミング自体は多少の経験がある。主に使った言語はcとperl。プラットフォームは MS-DOS と Linux。
  • オブジェクト指向の経験は少しだけ。まあ、perl5 をオブジェクト指向と言えるなら、だけど。外野として c++ の文法は多少齧ってる。
  • Windows の開発環境については、ド素人。

 で、読んだ目的は「例のPC遠隔操作事件でC#言語に野次馬的な興味が湧いたから」。あまし切実な目的じゃないんで、ソース・プログラムをキッチリ追いかけて読んだワケではないです、はい。

 冒頭に近い2章で、開発環境の Visual Studio 2005(以後VSと略す) を紹介してるのは親切。以後、サンプルはVS上で作り、検証している模様。デバッガの使い方も9章に解説があるのは嬉しい…って、今調べたらもう Visual Stdio 2012 が出てるじゃん。

 個々の機能について解説する時に、単に「こういう事が出来ます」ってだけではなく、「こんな時に便利です」と、「ありがちな使用状況」を紹介してるのは嬉しい。

 以降、プログラミング言語としての C# の感想を。

 switch~case が、なんか中途半端。フォールスルーが不許可なら、if 文でいいじゃん。つか私、c を使ってた時もあまし swich~case 誓わなかったんだよね。みんな if~else if。コンパイラによっちゃ分岐表の最適化とかしてくれたんだろうけど、あまし賢いコンパイラは使えなかったのさ、しくしく。

 ガベージコレクション(ゴミ集め)があるのは、とっても嬉しい。c++ だと、string 型を使うのにイロイロと苦労したような。でもやっぱり、ファイルやデータベース,通信ポートなどを使うクラスだと、デストラクタ(ファイナライザ)が必要なのね。

 メソッド呼び出しは、やっぱり値呼び出し。だから、メソッド内で引数に代入した時、組み込み型(int や char)とオブジェクトじゃ挙動が違う。いっそ全部、参照呼出しにしちゃえばいいのに。最も、その場合も、問題はあるんだけどね。参照を示すのが c の * や & でなく、ref 修飾子になったのは嬉しい。いや私、* が2個以上つくと理解できないもんで。

 基本型のバイト数が決まってるのも嬉しい。decimal 型があるのも、事務系の人には有り難いかも。でも整数だけなんだよなあ。利息計算とかで小数や割り算が必要な時は、「予め10n倍を掛け整数にして云々」みたいな工夫が必要なのか、またはライブラリで Money 型をサポートしてるのか。つか文字型が2バイトって漢字ナメとんのか?最新の仕様じゃ変わってる事を祈ります。

 継承関連は、ちと込み入ってる。基本は単純継承で多重継承はなし。その替わり、interface がある。ソッチの方が綺麗だしね。メソッドのオーバーライドは注意が必要。親クラスで virtual して、子で override するのがお作法かな?

 ジェネリックって何かと思ったら、c++ のテンプレートだね。いやきっと正確には違うんだろうけど、目的は同じっぽい。

 string 型の代入が =演算子と Copy メソッドで違うのは混乱を招きそう。

 デリゲート、何かと思ったらコールバックというかハンドラというか。こういうの、やっぱり GUI 系のサンプルの方が説明しやすいんだろうなあ。

 全般として、設計思想は c++ より java に近い雰囲気がある。c++ の混乱した仕様を java の経験で整理して、Objective-c から美味しい所を摘みました、みたいな感じ。特に嬉しいのはガベージ・コレクションと正規表現とデリゲートかな。あと、参照の * を ref にするとか、プログラムの書きやすさ・読みやすさにも配慮している様子。

 でもやっぱり、サンプルコードの変数名やメソッド名が、やたらと長いのは、なんとかならんのだろうか。

【関連記事】

|

« 高野和明「ジェノサイド」角川書店 | トップページ | R・A・ラファティ「昔には帰れない」ハヤカワ文庫SF 伊藤典夫/浅倉久志訳 »

書評:科学/技術」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/201750/57034040

この記事へのトラックバック一覧です: Jesse Liberty, Brian MacDonald「初めてのC# 第2版」オライリー・ジャパン 日向俊二訳:

« 高野和明「ジェノサイド」角川書店 | トップページ | R・A・ラファティ「昔には帰れない」ハヤカワ文庫SF 伊藤典夫/浅倉久志訳 »