【 C# 】 はじめてのプログラミング ” Hello World! ” コンソールAPP版

   2015/12/03   icon-clock-o読了時間:約15分37秒

何はともあれ ”Hello World!”

ホームページを作るとき、プログラムを作るとき。
何かしらのコードを記述し始めるときの第一歩。
プログラミングというものが出来てから一番多く作られたであろうプログラム。
それが”Hello World!”という文言を表示させるプログラムです。

記述したコードが実行され『 Hello World! 』という文字が表示される。
それだけのことなのですが、これが意外と大切です。
至ってシンプルなプログラムでありながら、目に見える形で動作が分かる、
実行と表示というプログラムの基本が簡単に理解できる、といった利点があります。

そこで一番最初のお約束にのっとって プログラム”Hello World!” を作ってみましょう。

ちなみにC#によってプログラム”Hello World!”を作る方法は
Microsoftの公式サイトでも説明してくれています。
こちらはコンソールアプリケーション(文字ベースのコマンドラインインターフェース=CUIで
動作するアプリケーションソフト)での”Hello World!”の作り方です。

コンソールアプリケーションだと完成形はこんな感じ。
コンソールHello World
コンソールアプリケーションで ”Hello World!” を作る

見慣れたウィンドウアプリケーションだとこんな感じ。
ウィンドウアプリケーション
⇒ ウィンドウアプリケーションで ”Hello World!” を作る(別の記事に移ります)
どちらもプログラミングを続けていく中で必要かと思いますので、試しに両方作ってみてくださいね。

コンソールアプリケーションで ”Hello World!” を作る

(1)Visual Studioを開く

まだVisual Studioの無料版をインストールしていない方は
初心者による初心者のためのプログラミング用語の解説 のVisual Studioの項目をご覧ください。

(2)新しいプロジェクトを開く

◆上部のメニューバーの【 ファイル 】⇒【 新規作成 】⇒【 プロジェクト 】
◆スタートメニューの【 新しいプロジェクト 】をクリック
どちらでも新しいプロジェクトが開かれます。
VisualStudioスタートページ

(3)コンソールアプリケーションを選択

なんのプロジェクトを始めるか、ということでコンソールアプリケーションを選択して
プロジェクトの名前も付けておきましょう。
コンソールアプリケーション

(4)デフォルトのコードを削除

基本的にこれ使うよね?というコードをVisual Studioが予め書いておいてくれています。
残念ながら今回は使用しないのでまるっと削除して真っ白にしてしまいましょう。
最初の記述

『 Program.cs 』のコードがコードエディターに表示されていない、
もしくは間違って非表示にしてしまった場合は
画面右側のソリューションエクスプローラーからコードを表示させましょう。
ソリューションエクスプローラー
◆『 Program.cs 』をダブルクリック
◆『 Program.cs 』を選択した状態で右クリック⇒【 コードの表示 】を選択
◆『 Program.cs 』を選択した状態で【 F7 】キーを押す
以上のいずれかでコードを表示させることができます。

(5)”Hello World!”のコードを記述

空っぽになった『 Program.cs 』に以下のコードを入力してください。
練習として手入力しても良いのですが、今はとりあえず概要を掴むだけということで
コピー&ペーストでも大丈夫です。

ちなみに以下のコードには私がコメントを書き足したり、英語部分を日本語に直したりしているので、
元のシンプルなコードでいいよ!という方は Microsoftの説明ページ から
コピー&ペーストしてください。もちろんプログラム内容は全く同じです。

(8)デバッグして動作確認

プログラムとしてちゃんと動作するか、テスト走行を行います。
Visual Studioではデバッグを選択するだけでデバッガー(デバッグ用ソフト)が動いて
自動的にビルドが必要ならビルドを行い、デバッグを行ってくれます。
デバッグ

(9)完成!

お疲れ様でした(ノ´∀`)ノ
完成形コンソールアプリケーション

コード内容について説明

ここでは上で記述した内容について説明します。
先にウィンドウアプリケーションの作成を実践したい方は
ここを飛ばして ウィンドウアプリケーションで ”Hello World!” を作る をご覧ください。

 using System; 

 usingによってSystemという名前空間を宣言 
このプログラムの中ではusing ディレクティブとして冒頭に記述されています。
『 デフォルトでSystemが居ることを覚えておいてね! 』と
冒頭で念を押しておくと、以降の記述の中でnamespaceが省略された場面に出会った時
自動的に『 あーここにはSystemが省略されてるんだな 』と解釈してくれます。

 namespace HelloWorld 

namespace 名前空間によるクラス管理
ご自分のパソコンの中に『写真』や『書類』といったフォルダ分けをして
データを扱いやすくしているのと同じで、namespaceで名前を付けて記述を管理しています。
このプログラムで例えると、
『HelloWorld』名前空間というフォルダに『Hello』クラスのデータを放り込んでいます。

『写真』フォルダの中に『工事01』というデータがあり、
『書類』フォルダの中にも同じ『工事01』という名前のデータがあるとします。
それぞれ写真とエクセルデータで全く別物ですが、全体に名前検索を掛けたとしたら
二つともが出てきてしまいますね。
プログラムにおいてこの状態になると、本来呼び出されるべきメソッド(動作)が
どっちなのか判明しないのでエラーが発生してしまいます。
「山田さんを呼んで来いって言われても山田さん何人も居るし分からない」という状態です。
そのため、たくさんのクラスを記述するような大きなプログラムでは
クラス同士がぶつかって喧嘩しないよう、関連性でまとめて名前空間ごとに管理する必要があります。

 複数の名前空間 
using System;でSystem名前空間を宣言し、
namespace HelloWorldでも HelloWorld名前空間を宣言していますね。
名前いっぱいあっちゃダメなんじゃないの、と思った方もいるかもしれません。
しかしご心配なく。それとこれとは別物です。

コードの冒頭においてusingで宣言された名前空間は「デフォルトの名前空間」、
以降の記述の大前提となる名前空間です。
デフォルト指定の名前空間を複数記述することも可能です。

一方、namespaceで宣言された名前空間も、この後いくつでも宣言できます。
また、以下のように同じ名前空間を分割して記述することもできます。

プログラムを構成するクラスが100あるとしましょう。
このクラスをひとつの名前空間に放り込んでしまうと、
ずらーっとひとつのファイルの中に100のクラスを記述し続けなければなりません。
そうなるとデバッグエラーが発生してもどこがバグかコードを見直すのも一苦労。
それを防ぐために、名前空間によってクラスを分割し、尚且つ同じ名前空間でも
内容を小分けにして別のファイルにすることによってコード管理を簡単にすることができます。

その他にも、名前空間は様々なパターンで利用が可能です。
・A名前空間で使った①クラスをB名前空間でも使いたいなあ、という時に
 B名前空間の中で『using A……①』のようにクラスを呼び出すことができます。
 
・ネスト(入れ子)にして重ねて名前空間を指定することもできます。

このクラス①を他の名前空間で使う場合は『A.B.①』と記述します。

名前空間やクラスについてはある程度理解してからの方がコードがスムーズに書けるので、
まずは色々なサンプルコードを見て書いて使い方を覚えましょう。

 class Hello 

 クラス(型)とメソッド(動作)とインスタンス(実体)とオブジェクト(物体) 
Helloクラスの中にあるConsole.WriteLine メソッドの
インスタンスは”Hello New World!”や”終了するために何か適当にキーを押してね。”です。

更に付け加えると、プログラムの中で実際に用いられるのは
オブジェクト(物体)ではなくインスタンス(実体)です。
言い換えれば、プログラムの中で必要なのは
【 オブジェクト:画面に表示される文字 】ではなく
【 インスタンス:”Hello New World!”や”終了するために~” 】です。

C#のプログラミングはこうした『オブジェクト指向』という考え方に基づいています。
オブジェクト指向については他の記事で今後詳しく説明しますのでそちらをご覧ください。

 static void Main() 

全てはMainから始まる
これはMainというクラスですよ!と記述することによって
Mainと書かれたところからプログラムが実行されます。
実行される動作をメインメソッドと呼ぶこともあります。

 static=静的 
メンバーとはクラスの中で定義される変数やメソッドのことです。
個々の実体(インスタンス)ではなくクラスごとのひとつの実体を持つメンバーは
静的メンバーとしてstaticという修飾子を付けます。

Mainメソッドはstatic(静的)でなくてはならないという決まりがあるので気をつけましょう。
これは、Mainメソッドに対して
「大人しく静かにしてメモリに座っててね!
 他のクラスが働いてて今すぐ仕事が無いからって君がメインなんだからサボっちゃダメだよ!
 いつ呼ぶか分からないんだからすぐ動けるように準備しておいてね!」
と言い含めるためです。

逆に個々の実体(インスタンス)を持つメンバーは動的メンバーと呼ばれます。
修飾子にはstatic以外にもpublic、private、overrideなど様々なものがあります。
これも長いお話になるので別の記事にて。

 void = 空っぽ 
メソッドによって何も出力しない戻り値で、return ステートメント(式)を省くことができます。
インスタンス(実体)を作る必要がないので、メソッドの処理だけを実行する場合に使います。

 return 
return はメソッドの実行を終了し、呼び出し側のメソッドに制御を戻すためのものです。

ゲームセンターのUFOキャッチャーを思い浮かべてください。
硬貨を入れてボタンで位置を指示すればアームが移動、景品を掴んで
一連の動きの後には元の場所に戻りますね。

硬貨を入れる、ボタンを押す、アームを動かす、などの操作=メソッド、
掴む景品=インスタンス(実体)
最後にアームを元の場所に戻す動き=return
景品口から出てくる景品=戻り値
景品の入れ替え中で景品が入っていない=最初から戻り値がない=void

 Console.WriteLine(“Hello New World!”); 

 usingによる宣言の結果 
Console.WriteLineは本当はSystem.Console.WriteLine。
Systemを省略していますが、冒頭のusingで宣言してあるので
ちゃんとSystem.Console.WriteLineとして扱ってくます。
もしusing System;が無かったらメソッドの正常な呼び出しができずコンパイルエラーが発生します。
「苗字無しのConsoleさんなんて知らん。知らんから呼べん」
と門前払いされてしまった状態のエラーになります。 
using System;を削除するとエラーメッセージが出るので試しに一度やってみてください。

 コンパイルとは 
こうして記述しているソースコードを機械語(オブジェクトコード)に変換すること。
私達の指令内容をコンピュータにわかるように翻訳してくれるコンパイラの働き。
ビルド(実行ファイルの作成)をする時にコンパイルも行われます。

Console.ReadKey(); 

 Console.ReadKeyで入力キーを受け取る 
コンソールアプリケーション(このHelloWorldプログラムのような文字を表示する黒い画面)は
一通り実行処理をした後、放っておくと勝手に終わってしまいます。
つらーっと文字が出てパッと消えられては実行状態の確認もロクにできませんね。

そのためこの2行
 Console.WriteLine(“終了するために何か適当にキーを押してね。”);
 Console.ReadKey();
によって、ユーザーが何かしら行動するまで終わらないように設定しています。
ユーザーに分かりやすく操作を促すためにWriteLineでメッセージを表示させ、
入力されたことをReadKeyで読み取って、それ以降の処理が無いためにプログラムは自動で閉じられます。
コンソールアプリケーションを作る時はこの手順を忘れないようにご注意。

 コードスニペット 
コードのスニペット(断片)。
これはプログラミングの中でよく出てくる記述や
よく使う組み合わせをあらかじめ登録しておくことで
簡単な操作で呼び出して貼り付けられるようにしたものです。
Visual Studioでもこのスニペット機能があるため、
頻繁に使用するコードであればパッと呼び出すことができます。

例えば上の「Console.WriteLine」を呼び出したい時。
「cw」と入力してから、キーボードのTabキーを2回押してください。
Console.WriteLine(); と自動的に入力されます。

Visual Studio C#で使用できるスニペットの種類は
Microsoftの公式ヘルプに記載されているのでご確認ください。
私は便利さに負けてコードスニペットを使っていますが、
これからVisual Studioを利用しないコーディングを目指す場合は
逆にこれを覚えないほうがいいのかもしれません。

 良かったら押してみてください♥

  • このエントリーをはてなブックマークに追加
  • Pocket