【C#入門】プログラムの基本的な文法や書き方をサンプル付きで解説
C#によるプログラムの書き方を、具体的なサンプルとともに説明していきます。
C#によるプログラムの書き方を、具体的なサンプルとともに説明していきます。
スキルアップ
2023/01/26 UP
- SE資格・スキル
- プログラミング
- システムエンジニア
C#は、WindowsやMacをはじめ、さまざまな環境向けの開発ができるプログラミング言語です。ゲーム開発に広く用いられているUnityにも採用されていることから、興味をもった人もいるかもしれません。そこで今回は、C#によるプログラムの書き方を、具体的なサンプルとともに説明していきます。
なお、C#の特徴やメリットについてまとめた記事もあるので、併せて参考にしてください。
C#とはどんな言語?特徴やメリットを知ろう
C#による開発をはじめるには?
C#の実行環境は、国際標準として定められた仕様に基づくものです。日本においてもJISX3016「共通言語基盤(CLI)」として標準化されているため、C#の仕様は日本語で読むこともできます。
この仕様を実装した代表例が、Microsoft社の「.NET」です。同社の「Visual Studio」を利用して開発環境を構築すれば、C#を使い始めるのは比較的簡単でしょう。また、解説書も豊富に手に入るため、C#はプログラミング言語のなかでも入門しやすいものの一つといえます。
Visual StudioでC#の開発環境を構築する方法については、こちらの記事で確認してください。
C#の入門者が覚えておきたい機能の特徴や開発環境の構築方法
C#で最初のプログラムを実行してみよう
プログラミングの学習では、自分でプログラムを書きながら理解していくことが大切です。
開発環境が用意できたら、手始めに「Hello, world」プログラムを作成してみましょう。簡単なメッセージを表示するだけの、次のようなプログラムです。
サンプルコード:
using System; class Hello { static void Main() { Console.WriteLine("Hello, World!"); } }
実行結果:
Hello, World!
Visual Studioなどの開発環境でソースファイルを開き、プログラム(上記のサンプルコード)を入力して実行してみましょう。すると、「Hello, World!」というメッセージが表示されます。
このプログラム中で、メッセージを出力する処理を担っているのは「Console.WriteLine」の行です。ほかにも数行分の記述がありますが、実際に動作する部分のみに注目すれば、実質1行のプログラムだといえます。
C#で条件分岐を書いてみよう
プログラムは、入力データやユーザー操作の違いにより実行する処理を分け、結果も変わってくるのが一般的です。このように、何らかの条件に応じて処理の流れが枝分かれすることを「条件分岐」といいます。
C#の条件分岐には「if文」と「switch文」という2種類の書き方があるので、それぞれについてみていきましょう。
if文の書き方
if文では、特定の条件が成立した場合にのみ実行される処理を指定できます。具体的なプログラムで、if文の動作を確認してみましょう。
サンプルコード:
var x = 123; var y = 456; if (x < y) { Console.WriteLine("xよりもyのほうが大きいです。"); }
実行結果:
xよりもyのほうが大きいです。
プログラムの冒頭に出てきている「x」と「y」は変数といい、値に名前をつけたものです。ここでは「x」に「123」、「y」に「456」という値が割り当てられています。
プログラム中にはif文があり、「x < y」という記述で「x」よりも「y」が大きいかどうかをチェックしている様子がわかるでしょうか。この条件は成立するため、指定の処理が実行されてメッセージが表示される結果となりました。
条件が成立しない場合は、if文に指定した処理は実行されません。試しに2つの変数の値を「x」のほうが大きくなるように書き換えて実行してみれば、メッセージが表示されなくなるのを確認できます。
もう1つ、具体例を挙げておきましょう。
サンプルコード:
var text1 = "abc"; var text2 = "xyz"; if (text1 == text2) { Console.WriteLine("2つのテキストは同じです。"); } else { Console.WriteLine("2つのテキストは異なります。"); }
実行結果:
2つのテキストは異なります。
2つの変数「text1」と「text2」に、それぞれ異なるテキストが割り当てられています。if文では、「text1 == text2」の部分で2つの値が等しいかどうかをチェックしているのですが、この条件は成立しません。しかし、if文のあとにelseが記述されているため、こちらに指定された処理が実行されてメッセージが表示されました。
このように、if文にelseを追加すると、条件が成立するかどうかによって2つの処理のどちらを実行するか選択できるのです。
if文についてさらに詳しく知るには、こちらの記事も併せてチェックしてみてください。
【ソースコード有】C#におけるif文の書き方を具体例で解説
switch文の書き方
if文さえあればどのような条件分岐も可能ですが、一度に指定できる分岐先は「条件が成立した場合」と「条件が成立しなかった場合」の2つだけです。これに対しswitch文では、より多くの分岐先を一度に記述できます。
具体例で、switch文の動作を確認してみましょう。
サンプルコード:
var x = -1; switch (x) { case int xx when x > 0: Console.WriteLine("xは正の数です。"); break; case 0: Console.WriteLine("xはゼロです。"); break; case int xx when x < 0: Console.WriteLine("xは負の数です。"); break; }
実行結果:
xは負の数です。
この例では、変数「x」の値に応じて、処理の流れが3つに枝分かれしています。
3つあるcaseの部分で、それぞれ「0より大きい」「0である」「0より小さい」という条件が記述されているのがわかるでしょうか。ここでは「x」の値が「-1」のため、3つ目のcaseに分岐してメッセージが表示されています。
C#でループを書いてみよう
処理の流れを反復させることを「ループ」といいます。プログラミングにおいて、ループは条件分岐とともに重要な要素です。
C#のループにはいくつかの種類がありますが、なかでも基本となる「foreach文」と「while文」の書き方について説明していきます。
foreach文の書き方
プログラミングでは、データの集まりを扱いたい場合が多くあります。foreach文で流れを反復させれば、データを1件ずつ取り出して処理することが可能です。
foreach文の使い方を、具体例で確認してみましょう。
サンプルコード:
var items = new[] { "りんご", "ぶどう", "みかん", "いちご" }; foreach (var item in items) { Console.WriteLine(item); }
実行結果:
りんご ぶどう みかん いちご
変数「items」に、「りんご」から「いちご」までの4つのテキストをまとめて割り当てている様子がわかるでしょうか。これは「配列」と呼ばれる形式で、C#でデータの集まりを表現する方法の一つです。
foreach文には、「var item in items」という記述が見えます。これは、配列「items」からデータを1件ずつ取り出し、変数「item」に割り当てながら処理を反復させる指定です。これにより、配列の各要素(それぞれのテキスト)を順番に表示することができました。
ここでポイントとなるのは、テキストが4つあるのに対し、それらを表示する処理は「Console.WriteLine」の実質1行しかないという点です。ループを活用すれば、データの件数が多くなってもプログラムを短く保てることがわかるでしょう。
foreach文については、より詳しい記事があるので併せて参考にしてください。
【ソースコード有】C#のforeachの使い方は?配列での使用方法を解説
while文の書き方
foreach文は、データの集まりを反復的に処理するための方法でした。これに対しwhile文では、より汎用的なループを記述できます。処理を繰り返す条件を自由に指定できる、応用範囲の広いループです。
while文がどのように動作するのか、具体例で確認してみましょう。
サンプルコード:
var x = 100; while (x < 10000) { x = x * 3; Console.WriteLine(x); }
実行結果:
300 900 2700 8100 24300
プログラムの冒頭で、変数「x」に初期値として「100」を割り当てています。
while文には、「x < 10000」という条件が与えられているのがわかるでしょうか。これは、「x」の値が10,000より小さい間だけ処理を反復させるための指定です。
また、ループ中の処理では、「x」の値を3倍してから表示しています。条件が成立しなくなるまでは処理が繰り返されるため、「x」の値は3倍、9倍、27倍と順に変化していき、10,000以上になった時点で処理を終えました。
C#の「型」について理解しよう
多くのプログラミング言語には、「型」と呼ばれる重要な概念があります。型は、データの種類や形式を表すためのものです。
C#は型に対して厳密なプログラミング言語の一つであり、あらゆるデータが型をもっています。
型を明確にする書き方
ここまでのプログラムでは、変数に値を割り当てる際に「var」というキーワードを使用していました。C#は、「var」を使うと自動的に最適な型で変数を作成してくれます。これは、変数には値の種類に応じて異なる型があるということです。
一方、C#には型を明示する書き方もあります。次の2つの例を見比べてみてください。
var x = 123;
int x = 123;
どちらも変数「x」に「123」という値を割り当てる書き方ですが、後者では変数の型が「int」であることを明示しています。「int」は、C#で整数を表すときに使う型の一つです。「123」は整数値のため「var」と書けば暗黙的に「int」が選択されるのですが、このように自分で型を明記しても意味は変わりません。
次の2つの例も、同じ意味になる書き方です。
var text1 = "abc";
string text1 = "abc";
ダブルクオートで囲まれたテキストはC#では「文字列」と呼ばれる値で、型としては「string」に対応します。そのため、「var」と書いたときは暗黙的に「string」が選択されていたのです。
では、配列の場合はどうでしょうか。
var items = new[] { "りんご", "ぶどう", "みかん", "いちご" };
string[] items = new string[] { "りんご", "ぶどう", "みかん", "いちご" };
少し複雑に見えますが、この2つも意味は同じです。変数の値がテキストの集まりになっているため、「var」と書くと「文字列の配列」だと解釈されます。C#では、この型を「string[]」と書くのです。
自前の型を定義する方法
C#では、自分で新しい型を作ることもできます。これは、データを独自形式にして、扱いやすくできるということです。
型を定義する方法は複数ありますが、ここでは「列挙型」の例を紹介しましょう。
enum Drink { Coffee, Milk, Soda, Tea }
列挙型は、表現したい値の種類があらかじめ決まっているときに便利な型です。この例では、4種類のドリンクを表現できる、「Drink」という型を定義しています。
では、実際に「Drink」型を使ってプログラムを書いてみましょう。
サンプルコード:
var order = Drink.Milk; if (order == Drink.Soda) { Console.WriteLine(order.ToString() + "は、炭酸飲料です。"); } else { Console.WriteLine(order.ToString() + "は、炭酸を含まない飲み物です。"); } enum Drink { Coffee, Milk, Soda, Tea }
実行結果:
Milkは、炭酸を含まない飲み物です。
プログラムの冒頭で、「Drink」型の値を変数「order」に割り当てている様子がわかるでしょうか。このように自分で定義した型でも、「int」や「string」と同様に値を記述したり、それを変数に割り当てたりできるのです。
また、変数の値をチェックして、条件分岐できることもわかるでしょう。ここではif文の例を示しましたが、列挙型はswitch文とともに用いられることも多い型です。
C#の列挙型についてさらに詳しく知りたい場合は、こちらの記事もチェックしてみてください。
【ソースコード有】列挙型とは?C#のenumの使い方を知ろう
C#の学習はプログラムを作りながら進めよう
C#の基本について、駆け足で説明してきました。
たった1行のプログラムでも、C#なら「Hello, world」を実行できます。if文やswitch文による条件分岐と、foreach文やwhile文を用いたループの書き方を覚えれば、より複雑な動作も実現できるでしょう。さらに、独自の型を定義してプログラム中で用いることも可能です。
C#の開発環境は、Visual Studioを利用すれば比較的簡単に整います。自分でプログラムを作る練習をしながら、C#の学習を進めてみてはいかがでしょうか。