【ゲーム開発のためのC#入門講座・基礎拡張編】色んなコメントを使ってみよう【#1】

2021-12-262.0_C#基礎拡張編

ようこそ、基礎拡張編へ!

この基礎拡張編では、使わなくてもよかったり基礎編で学んだことで代替可能だったりするが、使った方が絶対便利だよねという機能を学習していきます。

基本的に基礎学習編で学んだことの発展系なので、ちょっとうろ覚えなところとかあれば過去の記事を見直しながら学習してもらえれば理解しやすいと思います。

それでは、まずはコメントからいきましょう!

コメントって?

以前にも説明させていただいた通り、コメントとは何らかの補足情報をプログラム内に書き残すことができる機能のことです。

あくまでプログラマーが自分達のために書き残す情報なので、コンピュータはそのコードを見ても何もしないという性質があります。

例えばいつものWeb上でプログラム実行ができるサービスでは、初期値として下記のコードが設定されていましたね。

C# Online | ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO

public class Hello{
    public static void Main(){
        // Your code here!
        
        System.Console.WriteLine("Hello C#");
    }
}

このうち3行目の「//」から始まるコードがコメントです。

つまり、この初期設定のコードには「ここから貴方がコードを書いてね!」という、サービス提供者からのメッセージが補足情報として盛り込まれていた訳です。

このように、誰か(ゲーム開発なら共同制作者)や未来の自分自身に対して何らかの情報を書き残してあげたい時にこのコメント機能は使います。

「未来の自分だって自分なんだから、自分が組んだコードぐらいわかるやろ」

と思うかもしれませんが、マジで未来の自分は別人だと思った方がいいです(白目

特に慣れないうちは加速度的に成長もするので、未来の自分はだいたい「誰だよ、こんなコード組んだやつ……」とか思うことになります。

残しておいた方がいいなと思う情報があればぜひ残してあげましょう。一緒に作っている誰かや未来の自分自身に優しくしてあげてください。

コメントの書き方

コメントの書き方には二種類あります。

1行コメント

文字通り1行だけコメントとして扱われるものです。

//1行コメントだよ!

「//」以降の内容がすべてコメントとして扱われます。

これは必ず行頭でなければいけない訳ではないので、コードの後ろに置いても大丈夫です。

System.Console.WriteLine("Hello C#"); //こういうこともできるよ!

複数行コメント

複数行に渡って記述できるコメントです。

/*
こんな感じです。
1行に収まりきらない場合はこっちを使ってあげた方が、
適切に改行を挟めるので見やすくていいですね。
*/

「/*」から「*/」までの部分がすべてコメントとして扱われます。

こちらも行頭でなければいけない訳ではないですが、コードの後ろから書き始めると収まりが悪いので、あまりそういう使い方はしないかなと思います。

System.Console.WriteLine("Hello C#"); /*やっぱり
これだと見栄え悪いですよね。
*/

もうひとつのコメントの使い方「コメントアウト」

コメントにはもうひとつ有名な使い方があります。

プログラマーの秘奥義とでもいうべきその技こそコメントアウト

コメントアウトとは、動かしたくないコードを一時的にコメント化することです。そのコードの有無による変化を確認したり、想定外の動きや問題を抱えている箇所を調査したりするのに非常に便利です。

例えば下記のようなコードを考えてみましょう。

public class Hello{
    public static void Main(){
        int enemyHP = 10;
        int playerAttack = 3;
        string text = "勝利!";
        while (enemyHP > 0)
        {
            enemyHP = enemyHP - playerAttack;
            System.Console.WriteLine(enemyHP);
            text = "敗北";
        }
        System.Console.WriteLine(text);
    }
}

このうち、一番最後に記述した「System.Console.WriteLine」の部分が思っていたのと違う動きをしたとします(勝利と出力される想定だが、実際には敗北と出力された)。

こういう時、頑張って目視で原因を探し出すよりも、

  • 無関係だと思われる箇所をひとつずつコメントアウトしてみて、結果が変わってしまうところを見つける
  • 少なくともここまでは想定通り動いているはず、と思える箇所以降をすべてコメントアウトしてみて、認識相違ないか確認してみる

というアプローチを取った方が早い場合があります。

public class Hello{
    public static void Main(){
        int enemyHP = 10;
        int playerAttack = 3;
        string text = "勝利!";
        //while (enemyHP > 0)
        //{
        //    enemyHP = enemyHP - playerAttack;
        //    System.Console.WriteLine(enemyHP);
        //    text = "敗北";
        //}
        System.Console.WriteLine(text);
    }
}

今回は直前のループ処理をすべてコメントアウトしてみました。すると出力結果が「勝利!」に変化したため、「どうやらこのループ処理の中に問題があるようだ」ということが確認できた、みたいな使い方です。

このぐらいの規模のコードであれば目視で見た方がはやいとは思います。が、このアプローチは問題解決方法として非常に便利なので、ぜひ覚えておいてください。

Unityでの活躍ポイント

今回活用しているWebサービスが「Your code here!」というメッセージを残してくれたように、Unityにも公式が用意してくれたコメントというものがあります。

UnityでC#のプログラムファイルを作成すると、初期設定として下記のコードが設定されています。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

まだ学習していない部分ばかりなのでコードの中身は一旦気にしないでください。

確かにふたつコメントが設定されているのがわかるかと思います。

これはいずれ学習する予定の「メソッド」と呼ばれる機能の使い方を示唆する、Unity開発者からのアドバイスです。

このように、自分自身は例え使わなかったとしても、公式や共同制作者がコメントを残してくれていることがあります。そういう時はぜひ参考にしましょう。

実践演習

それでは実際にコメントを使ってみましょう。

演習①1行コメントを使ってみよう!

下記のコードで無限ループが発生してしまいました。直そうかと思ったのですがめっちゃ眠いので、明日の自分に任せることにします。明日の自分が問題をスムーズに思い出せるよう、任意の位置に1行コメントを残してあげてください。

テンプレート
public class Hello{
    public static void Main(){
        int playerHP = 5;
        while (playerHP != 0)
        {
            playerHP = playerHP - 2;
            System.Console.WriteLine(playerHP);
        }
        System.Console.WriteLine("ループ処理おわったよ!");
    }
}

演習②複数行コメントを使ってみよう!

下記のループ処理を、複数行コメントとしてコメントアウトしてください。

テンプレート
public class Hello{
    public static void Main(){
        int enemyHP = 10;
        int playerAttack = 3;
        string text = "勝利!";
        while (enemyHP > 0)
        {
            enemyHP = enemyHP - playerAttack;
            System.Console.WriteLine(enemyHP);
            text = "敗北";
        }
        System.Console.WriteLine(text);
    }
}

答え合わせ

演習①の答え

コメントの位置と内容は任意なので、あくまで参考程度に。

public class Hello{
    public static void Main(){
        int playerHP = 5;
        // ↓このコードあかん。判定条件を直してケロ
        while (playerHP != 0)
        {
            playerHP = playerHP - 2;
            System.Console.WriteLine(playerHP);
        }
        System.Console.WriteLine("ループ処理おわったよ!");
    }
}

演習②の答え

public class Hello{
    public static void Main(){
        int enemyHP = 10;
        int playerAttack = 3;
        string text = "勝利!";
        /*
        while (enemyHP > 0)
        {
            enemyHP = enemyHP - playerAttack;
            System.Console.WriteLine(enemyHP);
            text = "敗北";
        }
        */
        System.Console.WriteLine(text);
    }
}

まとめ

  • コメントとは何らかの補足情報をプログラム内に書き残すことができる機能のこと
  • プログラマーが自分達のために書き残す情報なので、コンピュータはそのコードを見ても何もしない
  • 「//」で1行コメントを書くことができる
  • 「/*」と「*/」で囲むことで、複数行コメントを書くことができる
  • コメントアウトとは動かしたくないコードを一時的にコメント化すること。問題解決に便利な手法

それでは、今回もお疲れ様でした!

また次の記事でお会いしましょう!

お借りした素材一覧

この記事では下記サイト様の素材をお借りしています。

ありがとうございました!

かわいいフリー素材集 いらすとや (irasutoya.com)

Posted by 夕目紅