C#の基礎と記述を理解しよう!

[C#] C#の基礎と記述を理解しよう!

※ 当サイトは広告を含みます。

本格的に自動出力されたコードを読み解いてみましょう。
ここではC#の基礎となる知識を学び、この先に進めるようになりましょう。

このページが説明するコードと自身のコードが異なる場合、最上位レベルのステートメントが有効な可能性があります。
まずは次の記事を参考に、最上位レベルのステートメントを利用しないプロジェクトを作ってください。

自動出力されたコードの確認

最初に自動出力されたコードを確認しましょう。Program.csはこんな感じですよね?


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Hello, World!");
    }
  }
}
管理人

単なる念のため確認です。コードが同じなら先に進みましょう。

コードの記述方法

まずは内容を確認する前にコードの記述方法を学びましょう。

1行で1処理が原則

プログラムの原則は1行に1処理です。これをステートメントと呼びます。
ただし、この1行とは;(セミコロン)までを意味します。つまり途中で改行しても;が無ければプログラム的な行数は増えてません。

また、スペースやタブも同じ扱いで、どれだけ記述してもプログラムの処理には影響しません。
加えて入力できる文字は半角文字だけです。特殊な場合を除いて全角文字は入力できません。

なお、単語の途中など、明らかに中途半端な位置で改行やスペースを記述するのはNGです。
そういった記述をするとエラーでビルドが成功しません。つまり実行不可能になります。

コメント

プログラムにはコメントと呼ばれる補足説明を記述する方法があります。
これはプログラム的には一切の意味がなく、処理にも影響しないコードです。

では、何故そのような意味のないコードを書くのでしょうか?

それは説明のためです。プログラムは原則として英語のみで記述します。
さらには特定の記述しか認められないので、例え英語でもコードに対しての説明は書けません。

つまりは後で見返す時のメモです。もしくはチーム開発時のメンバーへの説明など、簡易ドキュメントみたいなものですね。
具体的な使い方はC#では2種類あって、次の方法でコメントを記述できます。

パターン1: //

こんな感じに//を付けた場所から、行の終わりまでがコメント扱いになります。
この時の行の終わりは;では無いので注意してください。あくまでテキスト的な行末です。


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      //Console.WriteLine("Hello, World!");
      Console.WriteLine("Hello, World!"); // 文字列を出力する
    }
  }
}
管理人

行の途中からコメントにすることもできます。

パターン2: /**/

次は/**/で囲った部分がコメントになる方法です。
こんな感じに複数行をまとめてコメントできます。


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      /*Console.WriteLine("Hello, World!");
      Console.WriteLine("Hello, World!");
      Console.WriteLine("Hello, World!");*/
    }
  }
}
管理人

ここで僕から一言。この方法は使わなくていいです。理由は単に効率が悪いから。後ろに移動して*/をつけるのが手間です。

りさ

それだと複数行のコメントが大変では?

管理人

早速IDEの強さを知ってもらいますか。

コメントの切り替え方法

Visual Studioを使ってる場合は次の方法でコメントの切り替えができます。
どちらの場合もCtrlを押したまま次のキーを押してください。

コメント有効化 1. コメントに変更したい範囲を選択する。
2. Ctrl + Kを押した後にCtrl + Cを押す。

コメント無効化 1. コメントを解除したい範囲を選択する。
2. Ctrl + Kを押した後にCtrl + Uを押す。

管理人

ちなみに範囲を選択しない場合はカーソル行が対象になります。そう言えば、ある時からCtrl + /でも切り替えできた気がします。

りさ

凄い!

管理人

これがIDEを利用する利点だよ。こんなものは機能の1つに過ぎないけどね。
ちなみにコメント有効化をコメントアウトと呼ぶので覚えましょう。

IntelliSense(インテリセンス)

これはプログラムの記述ではないのですが、IDEの話をしたので続けて話します。

そもそもコードを入力する度に入力付近に何か出てきませんか?

それはVisual StudioIntelliSenseと呼ばれる機能です。
簡単に機能説明すると「お前が入力したいのこれじゃね?」って感じにIDEが予測して出してくれます。

りさ

えっ、なにそれ凄すぎ...

管理人

IntelliSenseは年々進化してて、遂にはAI支援とか呼ばれる機能で、この場面なら普通これじゃね? みたいな予測変換機能が付いたんだ。
これらの機能を使えるのがIDE、いやVisual Studioで開発するメリットだよ。

りさ

あまりに恐ろしい機能。何かデメリットがあるのでは?

管理人

よくプログラマがプログラムを書けなくなるって言う。自動入力に頼りまくった結果、それを使えない環境では力を発揮できない的なやつだね。これに関してはVisual StudioみたいなIDEを利用することが現代の基本だから気にしなくていいよ。後はPCに高スペックを要求するってことかな。よく分かんないけどVisual Studioって重いらしいよ。僕ミジンコみたいPC使ってないから気持ち分かんないけど。

りさ

どうして言わなくていいことを...

ブロック

{}で囲まれた部分をブロックと呼びます。このブロックは必ず対になってる必要があり、{}の数が異なることは許されません。
ブロックはステートメントと合わせて色々な部分で登場するので、ここでは簡単な説明のみにしますが、大抵は構文の始まりと終わりを意味します。

また、ブロックの内部にさらに{}を記述することができ、これをネスト構造と言います。
特に制限はなくいくらでもネストさせることができますが、その場合でも{}の数は同じだけ必要です。

管理人

IDEが勝手に後ろ側を補完してくれるよ。

スコープ

先程の{}で囲まれた内側の範囲をスコープと言います。こちらも今は簡単な説明のみにします。
スコープとは内側で定義された項目(変数や関数など)の範囲を示します。

具体例で説明すると、あるスコープで定義した変数はその下位スコープでしか使用できません。
この下位とは自身が存在するブロックの内側より内部を意味します。こんな感じです。


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      {
        // ここで変数Aを定義する
        {
          // ここは内側なのでAが利用可能
        }
      }

      // ここは外側なのでAが利用不可能
    }
  }
}
管理人

スコープについては変数のところでしっかり触れます。

インデント

ブロックで囲まれた部分に段差があるのが分かりますでしょうか? これはインデントと言って、コードを見やすくしてます。
極端な話、インデントが無くてもプログラムは動きます。が、例として以下を見てください。


namespace Sample {
  internal class Program {
    static void Main(string[] args)
    { Console.WriteLine("Hello, World!"); } } }
管理人

これ許せますか?

りさ

無理...

このように雑なインデントでもプログラムの動作上は問題が無いのです。
それでも常識から逸脱したコードは読みづらく、誰にも受け入れてもらえません。
みなさんはそんなゴミを生み出さないプログラマを目指してください。

管理人

インデントがスペース派vsタブ派とか、どこで改行する派閥とか色々います。
これは別記事を書こうと思ってるのですが、今は気にしなくていいです。

りさ

常識の範囲で逸脱したコードじゃなければいいってこと?

管理人

その通り。答えのないことを永遠に考えても無駄。それに今はインデントを気にするより、たくさんコーディングしましょう。
ちなみにVisual Studioの機能でCtrl + K, Ctrl + Dって押すと、ある程度は自動でインデントが整います。

りさ

IDEで標準設定されてるインデントが答えなのでは?

管理人

それ以上は駄目!

Main関数

色々と前知識も付いたのでプログラムの解説に進みましょう。
まずはMain関数です。static void Main(string[] args)と記述されてる部分ですね。

これはMain関数と呼ばれ、どんなプログラムにも必ず1つ存在します。
仮に仕組み上はMain関数が見つからなくても、隠されてるだけで絶対に存在してます。

そして全てのプログラムはMain関数の頭から開始され、下方向に順次処理を進めていきます。
つまりプログラムを追うときはMain関数を探しましょう。ここから順番に辿っていけば必ず理解できます。

管理人

順次処理? と思った人はこちらをどうぞ。

class

クラスと呼ばれます。internal class Programと記述されてる部分ですね。
正直、現時点では気にしなくていいです。と言うより、今の知識だと説明する方法がないです。

C#は仕様上、関数単体で存在することが許されず、必ずいずれかのクラスに属します。
今回の場合はMain関数がProgramクラスに所属する記述になってます。

namespace

名前空間と呼ばれます。同じことの繰り返しですが、これも気にしなくていいです。
ただし、非常に大切な仕組みなので別枠で解説をします。その時に学んでください。

自動出力されたコードの処理

さて、自動出力されたコードは非常にシンプルです。
実処理は1行しか記述されてなく、単なる標準出力ですね。


Console.WriteLine("Hello, World!");

前回も説明してますが、これは標準出力、つまりは実行時の黒画面に文字列を出力する関数です。
当面の間は深くは気にせず、文字列を出力したい時に使うんだなぁくらいの理解で大丈夫です。

管理人

ちなみに別のプログラミング言語でもHello, World!を出力するのが最初のサンプルコードです。
理由は知らないんですが、何か慣習としてそうなってます。

ビルドエラー

何かが記述的に間違ってる場合はビルドがエラーになり、この状態を解決するまでは実行できません。

試しに次のコードをビルドしてください。


namespace Sample
{
  internal class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Hello, World!")
    }
  }
}

これは単なる;(セミコロン)の記述忘れです。

エラーが出ると、画面上のエラーを表示する部分に、それっぽい内容が表示されます。
無理やり日本語訳したエラーもあり意味不明かもしれませんが、常に内容を確認するよう心掛けてください。

Errorの一覧
管理人

厳しめに言うと、このエラーは自分で調べて解決するのが基本です。早々に誰かに聞いたり、質問サイトに投げるやつはこの業界が向いてません。その時に必ず聞かれますよ。何をどこまで調べたのかを。それすら言えない人は迷惑なので引退しましょう。

りさ

調べても分からなかったらどうしたらいいの?

管理人

その時は普通に聞きましょう。調べることすらできないモンキーが悪なだけです。
調べた内容をしっかり相手に伝えれば、理解するつもりがあると分かるので、寧ろ好印象だよ。

りさ

厳しいけど言ってることは分かる。

あとがき

当分はMain関数の中身を変更する方法で学習をします。載せてるコードをコピペしてもいいけど、自分で入力したほうが覚えますよ。

◆ C#に関する学習コンテンツ

この記事は参考になりましたか?

関連記事

コメント

この記事へのコメントはありません。