++C++; // 未確認飛行 C

Google
Web ufcpp.net

はじめに

目次

キーワード

当コンテンツ作成の動機

実を言うと、 僕は趣味でプログラミングをしてるだけで、 C# は研究とは一切関係なかったりします。 (むしろ C/C++ を使うことが多かった。 2007年追記: 最近では割となんでも C# で書くようになりました。 2008年追記: 最近、仕事で久々に C++ を使って、C++ のダメさ加減にブチ切れ。さすがに昔取った杵柄で書けるけども・・・)

初めて C# について調べてみたとき(ちょうど Java に物足りなさを感じ、SUNの方針に憤りを感じていたころです)、 C# が普及してくれればプログラミングにかかる手間は大幅に削減されると感じるました。 しかし、Microsoft は順調に行かなさそうなものはばっさりと切り捨てることで有名な企業ですし、 世間の C# への関心が低ければ、C# は普及することなく消え去ってしまうでしょう。 そこで、少しでも早く C# が普及するようにとの願いを込めて当コンテンツを作成することにしました。

(2008年追記: さすがにもう .NET Framework が切り捨てられることはありえないくらいには安定したかと思います。 ただ、最近では Google が力をつけてきて、Microsoft そのものの権威が脅かされていたりしますが。 )

ただ、研究や授業の合間に暇を見て作成しているため、 更新は1・2週間に1回程度と非常にのんびりしたものになっています。 (作成し始めた当初、.NET Framework 正式版のリリースまでに完成させるという目標でやっていましたが、 この目標は全然達成できませんでした。) また、構成なども頻繁に変更される可能性があります。

↑追記: 2003年頃にはほぼ完成。 その後は、C# 2.0/3.0 に関する記事や、 C# の言語仕様だけでなく .NET Framework のライブラリに関する記事を追加しています。

当コンテンツの内容について

.NET Framework Technical Preview 版配布開始から約2年、 2001年末にようやく .NET Framework 正式版が発表されました。 また、2002年2月には日本語版も配布開始され、同4月には Visual C# .NET 日本語版も発売されました。 ここに来てようやく日本でも C# や .NET が話題になり始め、雑誌やウェブ上の掲示板などでの話題も盛り上がってきました。 そして、 C# は「C++ の柔軟性と Visual Basic(VB) の生産性を併せ持つ言語」として開発されていることもあり、 今まで VB を用いてプログラム開発を行っていた人や、 新規にプログラミングを始めようという人が C# の勉強をはじめようとしています。

Microsoft の提供する C# のドキュメントでは、 C# では「なにができるか」「どうすればできるか」という部分については詳細まで書かれていて非常に分かりやすいのですが、 「なぜこういった機能が必要なのか」という部分までは書かれていません。 そのため、C++ や Java などについての知識が十分にあれば、 Microsoft の提供するドキュメントだけでも容易に C# について理解することができるのですが、 プログラミングの初心者やこれからプログラミングを始めようという人にとっては、 このドキュメントだけではプログラミングの勉強をするには不十分です。

また、C# に関する解説書籍、ウェブサイトでも、 C 言語や Java などの知識を有することを前提とし、 1から C# を学ぶにはハードルの高いものが多いです。

そこで当サイトでは、これからプログラミングを始めようという人が C# の勉強をできるように、 C# で「何ができるか」「どうすればできるか」そして「なぜそのような機能が必要なのか」という部分まで説明していこうと思っています。

あるいは、プログラミング初心者の方でなくても、 C++ や Java と比べて追加された機能や、逆に削除された機能に関して、 「なぜ追加・削除されたのか」が分かってもらえるような説明を心がけるつもりです。

C# によるプログラミング入門

よく訊かれる質問、 特に、主として C 言語を利用しているプログラマの方からの質問なのですが、 「C# は初入門の言語として適切か」と言うものを受けることがあります。

多いのは、 「C 言語 → C++ というように段階を経て学んでいくべきなのではないか」という意見です。 「Java や C# だと、class や static など、最初に説明しないといけない“おまじない”が多いし・・・」とか、 「Java や C# などのオブジェクト指向言語を学ぶにしても、 その基本は構造化プログラミング言語だし」というのが、これらの意見の理由です。

この質問に対する(僕個人の私的な)答えですが、 結論から言うと、初めから C# を学ぶ方がいいと思います。

例えば、C 言語なら最初から理解するのが難しい“おまじない”の部分がないかと言うとそんなはずもなく、 #include などはやはり“おまじない”ですし、 Java や C# などの新参の言語は、構造化プログラミング言語としても見た場合でもかなり優秀な言語です。

むしろ、C 言語など、長い歴史を持つ言語は、 昔からの悪習を引きずっていて、 下手に学ぶと悪い癖が付いたまま抜けなくなる危険性の方が高いです。

習得難易度の低さの面からも、 悪習を身に着けないためという意味でも、 最初に C#、そして、必要に応じて C 言語などの抽象度の低い言語を学ぶ方がいいと思います。 (ちなみに、参考として抽象度の低い言語を学ぶという発想なら、 アセンブリ言語の勉強するのもお勧め。)

(2008年追記: 最近、会社の同僚が「C++ ロストジェネレーション論」というのを唱え始めた。 C++ 全盛期、Java 登場以前の90年代にプログラミングを始めた人は、 C++ のせいで過剰にプログラミングを怖がったり、 過去の悪習にとらわれて変な癖がついたりしてかわいそう。 まるで就職氷河期の失われた世代のようだという話。 あながちトンデモな話でもない気がする。 )

当コンテンツの構成

当コンテンツは、 「C#の概要」、 「C#で始めるプログラミング」、 「C#で学ぶオブジェクト指向」、 「C#の特徴的な機能」、 「付録」 から構成されています。

「C# の概要」では、 C# というものがどういったものかを説明しています。 また、C++ や Java の経験者向けに C# の特徴的な機能を簡単にまとめています。

「C# で始めるプログラミング」では、 初めてプログラミングを勉強する人向けに、 C# を用いたプログラミングの基礎を説明しています。

「C#で学ぶオブジェクト指向」では、 近年、プログラミング作法の主流として定着しているオブジェクト指向というものについて説明し、 C# を用いてオブジェクト指向を実現するための方法について説明しています。

「C#の特徴的な機能」では、 プログラミングの基礎やオブジェクト指向以外の C# の特徴的な機能について説明しています。

ちなみに、本筋から離れた補足的な話には、タイトルに [雑記] というタグをつけています。

また、当コンテンツ中でサンプルコードは以下のようなスタイルで書いています。

// サンプルコード
if(条件文)
{
  int n = 0;
  string s = "sample";
}

C# のキーワードや、コメント文字列は色付けして強調表示してあります。 また、条件文などその時々に応じて適当に書き換える必要のある部分は斜体で強調表示してあります。

また、ユーザーからの入力や、サンプルコードの出力は以下のようなスタイルで書いています。

sample input/output
← この行に対するコメント
ユーザーからの入力

サンプルコードとは異なる背景色で囲み、ユーザーからの入力は斜体で強調表示してあります。

さらに、本文中、サンプルコード中を問わず、重要な部分は背景色を色付けし強調表示してあります。

\ 記号についての注意

¥記号問題 (同じ文字コードに、日本では ¥、英語圏では \ の半角が割り当たっている) のせいで、 「\」が「¥」の半角で表示される場合と「\」の半角になる場合があるようですが、 どちらも同じものです。

¥記号問題に関する詳細は、 Wikipedia の¥記号の記事を参照してください。

当コンテンツ複製・利用について

当コンテンツの内容は個人的・教育的目的での複製・利用はご自由にして頂いて構いません。 利用に際して、誤字等を見つけた場合や、ご意見・ご要望・ご不満等がございましたら、 その内容を教えていただければこちらとしても助かりますので、 そうして頂きますようにお願い致します。

Transtation into English

[お問い合わせ](q)