プログラミング C# - 翔ソフトウェア (Sho's)

C#/.NET/ソフトウェア開発など

「独習C# 第5版」を読んで

独習C# 第5版

C# を教える/習得する難しさ

私は、20年間に渡って、C# を教えています。

C++ などの他のプログラミング言語の経験者に C# を教えることもありますし、プログラミングを初めて学ぶ人に教えることもあります。

後者の場合は、「C#を教える」というより、「C#を道具にプログラミングを教える」という感じです。

実は、いずれの場合も、C#を教えていて難しいのは、プログラミング自体です。

例えば、(デリゲートとしての) ラムダ式を習得する場合、文法が難しいというよりは、

  • 概念 (例えば、クロージャーの概念)
  • パラダイム (どういうプログラミングを指向しているのか)
  • 使いどころ
  • 仕組み (変数キャプチャーって内部的にどうやってるの?)

などがピンとこない場合が多いようです。

■ 「独習C#」との付き合い

ここ数年は、C# のメインのテキストには、「独習C#」を使っています。

以前は、ハーバート・シルト氏著の「独習C#」。2018年からは、山田 祥寛さんの「独習C# 新版」。

そして今年、「独習C# 第5版」が出ると聞いて、楽しみにしていました。

今回、ありがたくも、著者の山田 祥寛さんから本を頂戴できましたので、早速読んでみました。

■ 「独習C# 第5版」での新しい C# への対応について

「独習C# 新版」と「独習C# 第5版」の厚みの比較
  • それぞれのページ数
    • 独習C# 新版: 624ページ
    • 独習C# 第5版: 680ページ

これまで利用してきた「独習C# 」ですので、今回は新しい C# への対応という点で、書いてみたいと思います。

本書によって、先述した「C# を教える/習得する難しさ」は、どのように克服できるでしょうか。

「独習C# 第5版」の帯には「C# 10.0対応」と書かれていて、C# 7.0 ~ 10.0 の新しい文法に対応しています。

列挙してみると次のような感じです:

  • C# 7.0
    • switch 文での型判定
    • 参照渡し戻り値
    • タプル (値型)
  • C# 7.2
    • Span<T>
    • 読み取り専用構造体
    • ref 構造体
  • C# 8.0
    • Null許容参照型
    • switch 式
    • パターン マッチング
    • インターフェイスのデフォルト実装
    • 読み取り専用関数メンバー
    • 非同期ストリーム
  • C# 9.0
  • C# 10.0
    • global using
    • レコード構造体

C# を使っている人間には、どれも興味深い機能だと思います。

どの機能にも、追加されるに至った動機があり、プログラミング言語として C# が成長していく様子が感じられます。

半面、初めてこうした新しい機能に接する人は、場合によっては、難しく感じて拒否反応を起こすこともあります。

そして、どちらかというと、文法や書き方自体が難しいというよりは、別の理由であることが多いように思います。

C# のとある機能に初めて触れたとき、学習者が抱く疑問は、例えば次のようなものであることが多いのです。

  • 何故この機能がC#に追加されたの? (どういう問題を解決するための機能?)
    • 既存の機能でも、できたことじゃないの? 何が違うの?
  • どういうときに使うの?
  • 使った場合のメリット・デメリットは?

本書では、理解が難しそうな機能を説明する場合、

  • これまでは … という書き方 (ここでサンプル コード) があります。
  • この書き方では … という問題点がありますね。
  • そこで登場するのが、この機能です。
  • この機能を使うと、このように書けます (ここでサンプル コード)。

というような流れになっていることがよくあります。

文脈 (コンテキスト: 事情、背景、状況) が分かるような書き方、ということになるでしょうか。

例えば、タプルの説明では、

  • 複数の値を出力したい場合、従来は、配列やクラスなどで値を束ねたり、out 参照渡ししてた
  • でも、配列だと異なる型の値が束ねられないし、クラスは大げさで保守が大変
  • そこで、タプル!
  • こんな風に書ける (サンプル コード)

といった具合です。

■ まとめ

上では、特に C# の新たな機能部分について述べましたが、本書ではC# の重要な機能が網羅されています。

そして、それぞれの機能について、文法を解説するだけでなく、「その機能を使う動機・目的」から入って、次に「書き方」や「サンプル」が書かれています。

勿論プログラミング自体の入門書ではありませんので、全くプログラミングを経験していない人向けではありません。

プログラミングをやったことがある人が C# に入門したり C# をより深く理解するのに、向いている良書だと思います。

■ 関連サイト