1日目:最も基本的なプログラム

はじめの一歩 — Hello, World から学ぶC#の基礎

日数: 0 1 2 3 4 5 6 7

最も基本的なプログラム

Hello, World

これから、C#でプログラムを作る方法を学習していきましょう。まず最初は、最も基礎的で、かつ有名なサンプルである Hello, World を紹介します。内容は単純で、コンソール画面に「HelloWorld.」という文字列を表示するだけです。

サンプルプログラム

では実際に、そのプログラムを入力して、試してみましょう。VisualStudio でプロジェクト名を「Sample101」として、自動生成されるソースコード Program.cs を、以下のように変更し、実行してみてください。

プロジェクト: Sample101 / ファイル名: Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample101
{
    class Program
    {
        /*
         *  HelloWorld
         */
        static void Main(string[] args)
        {
            //  コンソールにHelloWorldと表示して終了
            Console.WriteLine("HelloWorld.");
        }
    }
}
実行結果
HelloWorld.

実行結果からもわかるとおり、このプログラムを実行すると、コンソール画面に「HelloWorld.」という文字列が表示されます。このプログラムは、C#に限らず、ほとんどのプログラミング言語の入門書で最初に記述されているサンプルプログラムである、Hello, World と呼ばれる、簡単な文字列を画面表示するだけのものです。

プログラムの仕組み

ネームスペース

では、一体、このプログラムはどのような仕組みになっているのでしょうか?

7行目に出てくる namespace という記述は、ネームスペース(日本語で「名前空間」)と呼ばれ、このプログラムを分類する「入れ物」の名前を決める部分です。同一ネームスペース内に作成されるプログラムは、互いに関係性が深いものとされます。

ネームスペースの設定
namespace Sample101

このように記述することにより、このプログラムは Sample101 と呼ばれるネームスペースに属することがわかります。

クラス名

続いて、9行目を見てみましょう。ここで、class という記述の後に Program と記述されていますが、これはクラス名と呼ばれるものです。クラスの詳細については後ほど詳しく説明しますが、現時点では、C#における、プログラムのまとまった処理の単位であると考えてもらえれば十分です。書式は次の通りです。

クラス名の指定
class (クラス名)

なお、同一ネームスペースには、同じ名前のクラスが存在してはいけません。逆にいえば、ネームスペースが異なれば、同じクラス名が存在してもかまいません。

エントリーポイント

14行目の static void Main(string[] args) の部分は、エントリーポイントと呼ばれるものです。C#では、原則的にこの中に処理を書くことで、プログラムが実行されます。処理の中身は { および } で囲まれています。この処理の中には Console.WriteLine() という命令があり、これはコンソールに文字を出力するものです。今は「Main() 内に処理を書けば実行される」とだけ理解しておけば十分です。なお、一つのプロジェクトには、エントリーポイントを1つしか置けません。

Console.WriteLine

続いて、17行目の Console.WriteLine() を見てみましょう。これは () で囲まれた内容を表示する命令です。文字列の場合は、"(ダブルクォーテーション)で挟みます。このプログラムで「HelloWorld.」を表示しているのはここになります。

Console.WriteLine の書式
Console.WriteLine(内容);

using とネームスペース

順序は前後しますが、1行目から5行目に出てくる using … となっている部分はなんでしょう?これは using ステートメントと呼ばれるもので、C#はプログラムを .cs ファイルに記述します。VisualStudio を使うと、プログラムの冒頭に数行「using ...」と書かれた行が自動生成されます。using の後に続くのは名前空間であり、以下のように記述すると、プログラムの中で指定した名前空間を利用するという宣言になります。

using ステートメント
using (名前空間);

これにより、指定した名前空間で定義されているクラスなどが利用できるようになります。このサンプルの中では他の名前空間を利用する必要がないので、省略することもできます。

コメント

このプログラムの中に、///* */ という記号が出てきます。その中には文章が書かれていますが、プログラムの実行結果には何も関係ないように見えます。この記号のことを、コメントと言います。

コメントは、プログラムの注釈を付けるためのもので、プログラマーが各所に書いて処理の意味などを記述する際に用いられます。実行結果には何ら影響を与えませんが、これを付けるとプログラムが非常にわかりやすくなります。そのため、できるだけコメントをつけるようにすることが推奨されています。

コメントには、以下(表1-1)のような種類があります。

表1-1:C#で用いられるコメント
記述方法 名前 特徴 使用例
/* */ ブロックコメント /* と */ の間に囲まれた部分がコメントになる。複数行にわたってコメントを付けることができる。 /* このように複数行
コメント可能です。 */
// 行コメント その行の // 以降がコメントになる。1行にコメントを付けることができる。 // コメント

様々なコンソールへの出力処理

サンプルプログラム

続いて、様々なコンソールへの出力の例を見てみましょう。以下のサンプルを実行して結果を確認してください。

プロジェクト: Sample102 / ファイル名: Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample102
{
    class Program
    {
        static void Main(string[] args)
        {
            //  数値の表示
            Console.Write(123);
            Console.WriteLine(456);
            //  文字列の表示
            Console.Write("ABC");
            Console.WriteLine("DEF");
        }
    }
}
実行結果
123456
ABCDEF

このように、様々な値を表示することができました。では、いったいどうしてこのような結果になるのでしょうか。

Write と WriteLine の違い

まず、14行目と15行目、17行目と18行目の違いに注目してください。最初のサンプルでは Console. の後に WriteLine を使っていましたが、ここでは Write という表現も出ています。この違いは、Write() が () 内のものを表示した後に改行を行わない命令であるのに対し、WriteLine() は表示後に改行を行うという点にあります。

そのため、14行目で「123」と表示した後、15行目で「456」と表示していて、この2つがつながるのは、「123」を表示した段階で改行を行わないからです。17行目と18行目に関しても同様です。

文字列以外の表示

再び14行目・15行目に注目してみてください。17行目・18行目で文字列を表示する場合には "(ダブルクォーテーション)で文字列を挟んでいるのに対し、数値を表示する14行目・15行目では用いていません。このように、数値を表示するときには " で挟む必要がありません。

エラーの処理

コンパイルエラー

まずは、以下のプログラムを入力・実行してみてください。

プロジェクト: Sample103 / ファイル名: Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample103
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLime("HelloWorld.");
        }
    }
}

プログラムを実行しようとすると、次のようなエラーメッセージが出ると思います。

コンパイラが発するエラーメッセージ
1>------ ビルド開始: プロジェクト: Sample103, 構成: Debug Any CPU ------

これは何を意味するのでしょうか?このメッセージは、ソースコードのビルドに失敗したことを意味しています。つまり、このプログラムには文法上、誤った記述があるということです。コンパイラは、誤った記述がある場合にこのようなメッセージを発します。当然、プログラムを実行することはできません。

では、一体どこに誤りがあるのでしょうか?エラーメッセージに従い、13行目を見ると、WriteLime となっています。これは本来 WriteLine とすべきところを、誤って記述したものです。正しい記述に直してみましょう。

プロジェクト: Sample103 / ファイル名: Program.cs(修正後)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample103
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("HelloWorld.");
        }
    }
}
実行結果
HelloWorld.

実際にもっと複雑なプログラミングを行う場合も、このようにしてプログラムの誤りを修正しながら実行することが求められます。

練習問題 1 へ →