第0章 始めに:連載 改訂版 C#入門
本サイトで連載された「C#入門」を大幅に加筆修正し、刊行された書籍版を再度Webで公開開始。この機会にC#プログラミングにチャレンジしよう。
本記事は、(株)技術評論社が発行する書籍『新プログラミング環境 C#がわかる+使える』から許可を得て転載したものです。同書籍に関する詳しい情報については、本記事の最後に掲載しています。
まずは、最低限の背景知識を説明しよう。C#とはどのような形で生まれた言語か、そして、ECMAによる標準化やCLI(Common Language Infrastructure)などの言葉の説明も今回で行う。
0-1 本連載の目的
本連載は、新しいプログラミング言語、C#のプログラミング入門を扱う。C#とは何か、という話題は本連載の本題でもあるので、あとで詳しく説明する。想定する読者は、C#のことは何も知らないが、プログラミングの経験のある方々とする。つまり、C#のことを何も知らない人も歓迎するが、いちいち「変数って何?」というような基本的な説明は行わない。それでも、プログラミング言語によって知識に偏りがあるのは事実なので、もしかしたら、あなたがご存じのプログラミング言語には存在しない用語を使って説明する場合があるかもしれない。少なくとも、Visual Basicの経験があれば、読み通せる水準を想定している。JavaやC++の知識があるとよいが、必須ではない。
さて、本連載では、C#というプログラミング言語に関して説明するだけでなく、Visual Studio .NET(詳細はあとで説明する)の具体的な操作手順も一部解説に含めている。これは、抽象的な知識に偏ることなく、実際に追体験可能であることを重視したためだ。プログラミング言語の新しい概念などは、すぐに意味が理解できなくても、実際に動かしてみると分かることもある。そのため、具体的な操作方法の説明にも重点を置く。また、最近では統合開発環境が主流になっているため、テキスト・エディタでソース・コードを書いてコマンドラインでコンパイルすることができないプログラマーも多い。これを配慮して、グラフィカルな統合開発環境を前提に解説を進める。
本連載では、主にC#の言語仕様のトピックごとに解説を進める。実際にC#でプログラミングを行う場合は、.NET Framework(後述)に用意された膨大なクラス・ライブラリを活用する必要がある。しかし、クラス・ライブラリはあまりにも膨大であり、C#の解説書の一部に収めるには無理がある。そこで本連載では、C#を理解し最低限活用していくために必要なクラスに限って、そのつど解説を加える構成とする。実際に本格的なプログラムを開発する際には、クラス・ライブラリのリファレンスマニュアルを随時参照していただきたい。
0-2 C#とは何か?
C#は、Microsoftが開発したプログラミング言語である。Microsoftが提唱する .NET構想の中核となるプログラミング言語ということで注目を浴びている。また、ヨーロッパの標準化団体であるECMA- Standardizing Information and Communication Systemsにより、ECMA-334 C# Language Specificationとして標準化されている。つまり、C#はMicrosoftの技術として注目を集めていると同時に、国際的な標準としても認知されているのである。
技術的な面から見ると、C#は、C++の一種の進化形であると同時に、Javaの影響を大きく受けている言語といえる。また、Visual BasicやDelphiなど、さまざまな言語の長所を集めた言語ともいうこともできる。
ここで重要なのは、「なぜC#か?」ということだ。なぜなら、プログラミング言語として、すでにC、C++、Java、Visual Basicなどが存在するからだ。これだけプログラミング言語があって、どうして、それに新しい言語を付け加える必要があるのだろうか?
その答えは簡単だ。既存の言語がいくら多くても、すべてに関して満足のいく言語というものは1つもないという、大きな問題があるからだ。Cはすでに時代遅れであり、C++という後継言語が使用されている。C++は、高機能で何でも記述できる自由度があるが、メモリの管理が自動化されていないため、少しのミスでもメモリを使い尽くすプログラムができてしまう。Javaは、メモリの管理が自動化されているのでそのような危険はないのだが、どんな環境でも実行できるという理想ゆえに、どうしても機能が最大公約数的になり、思いどおりの機能を実現するには不向きだ。Visual Basicは、基本的にデータ型が自動変換される言語であり、これがプログラムの見通しを悪くし、バグの温床になるという構造的な問題を有している。データ型を厳密に適用すればコンパイル時に判明してしまうようなバグが、入り込んでしまう危険がある。
このように、どの言語も、現在のニーズにジャストフィットするプログラミング言語とはいえない。これに対するMicrosoftの結論がC#である。C#はほかのプログラミング言語と比較したときに、以下のような位置付けになる。
- C、C++から見たとき:メモリ管理の自動化によりコーディングが手軽になる
- Javaから見たとき:より現実的でどんな処理も容易に書ける
- Visual Basicから見たとき:データ型が厳密に扱われ、コンパイラがバグを見つけやすい
もちろん、これらは、ごく大ざっぱな要約にすぎない。言語の相違を論じればそれだけで1冊の本になってしまうので、ここでは深くは触れない。
0-3 CLIと .NET Framework
C#について語る場合は、それと同時に、CLI(Common Language Infrastructure)についても語らなければならない。CLIは一種の実行環境であり、クラス・ライブラリを持つ。C#でプログラムを作成するということは、CLIで実行するプログラムを作成するということとイコールである。CLIは、ECMA-335 Common Language InfrastructureとしてECMAにて標準化されているが、これに則って開発された実行環境の上で、C#で記述されたプログラムが実行されることが主に想定されている。実際にCLI準拠の実行環境はいくつも開発されつつあり、対象はWindowsに限定されない。例えば、FreeBSDやLinux上でも、C#で記述したソース・コードをコンパイルし、実行することも実現可能である。
これに対して、Microsoftが提供する実行環境は .NET Frameworkという。.NET Frameworkは、CLIの機能に加えて、ウィンドウを使用したアプリケーションの作成やWebアプリケーションを実現するASP.NET、さらに、XML Webサービスを実現する機能なども含まれている。そのため、CLIと .NET Frameworkは等価ではない。つまり、.NET Frameworkで動作するプログラムをC#で記述した場合、それがすべてのCLI環境で動作するわけではない。
また、C#は .NET Frameworkの環境で使用したとき、Win32 APIに直接アクセスする機能を利用できる。これは、当然のことながら、Windows環境でのみ利用可能な機能である。その意味でも、C#で記述されたプログラムがすべてのCLI環境で動作する保証はない。
もし、CLIに含まれる機能だけで記述できるプログラムを作成する場合、CLIの機能だけ参照する形でソースを記述すれば、多くの環境で動作することが期待できる。しかし、CLIに含まれる機能で足りない場合は、環境依存を恐れずソースを書こう。
0-4 Visual Studio .NETについて
Visual Studio .NETは、Microsoftが .NET構想の開発ツールとして位置付けているものである。基本的には、Microsoftの人気開発ソフトであるVisual Studioの最新バージョンといえる。しかし、従来のVisual Studioが主にWindows向けのソフトウェアを開発するツールであったのに対して、Visual Studio .NETは主に .NET Framework上で実行するソフトウェアを開発するツールであるという点で、大きな方向転換が行われている。その違いをよく理解しておく必要がある。いまのところ違いがはっきりしないかもしれないが、Windowsとの互換性はなくても .NET Frameworkをサポートした環境が増えてくれば、だれの目にも違いがはっきりと見えてくるだろう。
過去のVisual Studioは、Visual C++、Visual Basic、Visual J++を組み合わせた開発環境といえる。Visual Studio .NETでは、Visual J++のサポートがなくなり、その代わりに、Visual C#が追加されている(Javaのサポートはなくなるが、Java言語のソース・コードをCLI環境で実行できるプログラムとしてコンパイルする、Visual J#という追加ソフトがアナウンスされている)。つまり、Visual Studio .NETになったからといって、従来型の言語の開発が不可能になるわけではない。Visual Studio .NETでは、C#が最新の代表的な言語となるが、例えばBasicプログラマーがそのままVisual Basicを使い続けることも可能である。従来からの言語を使い続けるか、それともC#に乗り換えるかは、あくまで個々の利用者の判断で可能となっている。
しかし、効率のよさや生産性の高さを意識するなら、C#への乗り換えを検討すべきだろう。学習の時間を費やしても、その程度は簡単に回収できるほど、開発効率に差がある。また、C#はカバーする領域も広いので、1つの言語を覚えるだけでさまざまなプログラムに対応できる。C#は、Visual Basicのように使っても、C++のように使っても、Javaのように使っても、そこそこの実用性を発揮する汎用性の高い便利な言語といえる。
本連載では、このVisual Studio .NETが利用可能であることを前提に説明を進めることとする。
『新プログラミング環境 C#がわかる+使える』
本記事は、(株)技術評論社が発行する書籍『新プログラミング環境 C#がわかる+使える』から許可を得て一部分を転載したものです。
【本連載と書籍の関係について 】
この書籍は、本フォーラムで連載した「C#入門」を大幅に加筆修正し、発行されたものです。連載時はベータ版のVS.NETをベースとしていましたが、書籍ではVS.NET製品版を使ってプログラムの検証などが実施されています。技術評論社、および著者である川俣晶氏のご好意により、書籍の内容を本フォーラムの連載記事として掲載させていただけることになりました。
→技術評論社の解説ページ
ご注文はこちらから
Copyright© Digital Advantage Corp. All Rights Reserved.