親亀の上には?

ホームC#入門講座第1章:世界へのトビラ > 親亀の上には?

親亀の上には?

3世代の同居

親亀の上には子亀がいるはずです。そのまた上には、孫亀がいるでしょう。これはよく考えると、「ヒエラルキー」な構造をしています。そこで「Hello,World!プログラム」をもう一度見てください。

using System;

namespace NewWorld
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			Console.WriteLine("Hello,World!");
		}
	}
}

あなたには見えますか? このソースコードが、まるで亀が重なりあうようになっていることが。

一番大きいのは「namespace NewWorld」です。これを「NewWorld名前空間」といいます。NewWorldの部分は私が付けた名前で、「SatoshiWorld」でも「YUIWorld」でも「Oyagame」でもなんでもいいです。(YUIは私の好きなアーティスト。)

次が「class MainClass」です。これを「MainClassクラス」といいます。MainClassも私が付けた名前で、「GokusenClass」でも「Kogame」でもなんでもいいです。(「ごくせん」は私の好きな仲間由紀恵が主演したドラマ。)

最後が長いので省略して「Main()」です。これを「Main()メソッド」といいます。Main()メソッドだけは、Mainという名前に意味があります。他にいろいろ「メソッド」なるものを自分で作ったとしても、プログラムが開始されるのはMain()メソッドであると決まっています。

独立できるのは?

子亀こと「クラス」からです。「クラス」というのは「メソッド」をいくつか引き連れて独立できます。ですが、孫亀こと「メソッド」は独立できません。

つまり、「すべてのプログラムには最低限1つのクラスが必要」ということです。「名前空間」はなくてもかまいません。

メソッドをちょっとだけ

応用的な内容に飛びますが、あえて少し話しましょう。それは「メソッド」についてです。

メソッドとは「方法」という意味です。プログラミングでは「処理の方法を定義したもの」という意味で、「関数」と言い替えても一応通じます。(厳密には区別してほしい)

メソッドの最大の特徴はかっこが付いていることですが、その辺はまた今度話しましょう。ここではMain()メソッドとWriteLine()メソッドの見た目の違いを説明します。

前回紹介した「ConsoleクラスのWriteLine()メソッド」とMain()メソッドは、このプログラムの中でぱっと見、全然形が違います。WriteLine()メソッドには最後に「;」セミコロンがあるのに、Main()メソッドは前にいろいろくっついているし、後ろには{ }でっかいかっこがあります。そしてこのでっかいかっこでWriteLine()メソッドすら含んでいます。

これらの違いはメソッドの「定義」と「呼び出し」からくるのです。数学を思い出してください。

(例題)
y = 2x + 1 とおく。
x = 3 のとき、y はいくらか?

(解)
y = 2x + 1 に x = 3 を代入して、
y = 2 * 3 + 1
  = 6 + 1
  =7
よって、答えは 7

y = 2x + 1 とおくことと、そこに x = 3 を代入することでは違います。このように、あらかじめ定義されているWriteLine()メソッドを「呼び出す」ことと、自分で初めてMain()メソッドを「定義する」ことは違うのです。

では、あなたが定義したMain()は誰が呼び出すのでしょう? それは、プログラムが開始されたときに「実行環境」が自動的に呼び出すのです。そのためにMain()メソッドというのは特別なのです。

まとめ

ここで知ってほしかったのは亀がヒエラルキー構造をしていることや私がYUIを好きであること、あるいはYUIは亀好きで上京の際も持ってきたことなどではありません。亀から離れてください。

重要なのは「名前空間」「クラス」「メソッド」という一連の構造が存在することと、「クラス」が独立できる最低限の構造であることです。

これらは「オブジェクト指向」の概念に関係する問題であり、後でじっくり格闘しますが、ここでは説明の都合上、ざっくり覚えるようにしてください。