【Lua言語講座】5.文とコメント

文とコメント Lua言語講座

※この記事は会話形式にリライトしました。

こんにちは、ロブスタのハルです!
前回の講座では演算と演算子について説明しました。
今回は文という概念がいねんとプログラムの簡単なデバッグ、補足ほそくに使うコメントについて説明していきます!
前回の講座を見ていない方はこちらからご覧ください。

文とは

――ある日の会話――

たかし
たかし

先生、プログラミングにはテストやコメントを上手く使うことが大切だと書いてある記事を見つけました。

先生
先生

そうですね。プログラミングは常にコードを書いてテストを行い、エラーを修正する作業の繰り返しですから。

たかし
たかし

テストとかコメントの意味はなんとなくわかるんですが、
実際にどうやって実施するんでしょうか?

先生
先生

テストとコメントについてですね。
それではまず文という概念について見ていきましょうか。

解説

この講座の第1回目でプログラミングは命令であると説明しました。
これはその通りなのですが、例えば次のような状況を考えてみてください。

ロボットに家から学校までの道を案内するとします。
①まずは玄関のドアを開けて
②前に5歩進んで
③左に100m進んで
④右に300m進んで
⑤左に200m進んで
⑥正門をくぐってそのまま昇降口に進んで

今回の例はかなり省略しょうりゃくしていますが上のように命令を出すと思います。この場合①~⑥全体を指して命令と言えますが①だけでも命令と言えますよね。つまり、①~⑥全体はそれぞれ6つの命令が集まったものと考えることができます。

これをプログラミングで考えたとき、それぞれ6つの命令のことをといいます。また、文の集まりをプログラムといいます。

多くの言語では文の終わりにセミコロンをつけて1つの文をわかりやすくしていますが、Lua言語には文の終わりを示す記号がありません。そのため、どれが1つの文なのかを見極みきわめる必要があります。

文の見極め

local num1 = 12
local num2 = 34
local ans = 0
local addNum = 0
local condition = false

ans = num1 + num2
print(ans)
condition = ans > num2 
and num1 < num2
print(condition)
addNum = 1 + 2 + 3 + 4 + 5
         + 6 + 7 + 8 + 9

さて、上のコードを見てどれが文なのかわかりますか?

まず、1~5は変数の宣言せんげん初期化しょきかをしているので宣言文と呼ばれることがあります。
続いて7・8・11行目はそれぞれ代入文printプリントです。
では、9・10行目はどうでしょう?
一見するとどこまでが文かわかりにくいですが、実は9・10行目は合わせて1つの文になっています。これはansアンス > numナム2という条件式とnum1 < num2という条件式をandアンド演算子で繋いだ結果をconditionコンディションに代入しているためです。
同様に12・13行目も1~9までを足した結果をaddNumアドナムに代入しており、合わせて1つの文となっています。

基本的には文は途中とちゅうで改行せずにつなげて書いていきますが、見づらい場合などには今回の例のように改行することもあります。その場合はどこまでが1つの文なのか考えて読みく必要があります。改行のさいには9・10行目の書き方ではなく、12・13行目のようにスペースを空けるようにすると見やすくなります。(Roblox Studioのエディタでは自動でスペースを空けてくれます)

コメントについて

――ある日の会話――

たかし
たかし

これまでプログラムと呼んでいたものは実は文の集まりだったということですね。

先生
先生

ええ、そうなんです。
例えるなら日本語や英語が単語の集まりでできているのと同じですね。

たかし
たかし

その例えはしっくりきました。
それで、コメントの方法はどうするんですか?

解説

ソースコード中にコメントを書きたい場合は次の2つの方法をとることができます。

-- ここから行末までがコメントです。

--[[
複数行をまとめて
コメントにするときは
このように書きます。
]]--

コメントは簡潔に書くのが基本です。例えばその関数の簡単な説明に使われることが多いです。

変数にもコメントを付けたくなる気持ちはわかりますが、あまり好まれません。
それよりも変数の名前で役割が判断できるように名付けましょう。

簡単なデバッグ

print文とコメントを使うことで簡単なデバッグを行なうことができます。
デバッグとはプログラムが予想外の動作をしたときにその原因を調べて修正することです。

-- 例 本当はtrueがでるようにしたい
local a = 1234
local b = 2938
local ans = 0
local flag = false

ans = b - a
flag = ans > a and a + ans > b
print(flag)

この例ではまず、ansの値がどうなっているかprint文を使って調べてみたいと思います。

-- 例 本当はtrueがでるようにしたい
local a = 1234
local b = 2938
local ans = 0
local flag = false

ans = b - a
print("ans = ", ans)
flag = ans > a and a + ans > b
print(flag)

これを実行するとans = 1704であることがわかりました。
flagフラグの値がtrueトゥルーであってほしいのですが、falseフォルスになっていることからflagの計算式に問題があると考えられます。そこで、ans > a と a + ans > b にわけてそれぞれがどうなっているか調べてみましょう。

-- 例 本当はtrueがでるようにしたい
local a = 1234
local b = 2938
local ans = 0
local flag = false

ans = b - a
print("ans = ", ans)
print("ans > a : ", ans > a)
print("a + ans > b : ", a + ans > b)
flag = ans > a and a + ans > b
print(flag)

実行してみるとans > aはtrueでしたが、a + ans > bはfalseでした。and演算子がtrueになるにはどちらの条件式もtrueでなくてはならないのでa + ans > bの条件式が間違っていることになります。例えば、a + ans >= bやa + ans == bのように書き換えるとflagの結果をtrueにすることができます。

今回の例ではprint文を使いましたが、後に出てくる関数などを使う際や実際にコードを試し書きする際にはコメントアウトという手法を使うこともあります。これに関してはまた別の回で紹介したいと思います。

最後に

――ある日の会話――

たかし
たかし

今回はプログラムが文の集まりであることとコメントの書き方を学びました。

先生
先生

特に文はどこからどこまでなのかを見極めるのが重要ですね。

まとめ

  • 文とはプログラムにおける処理の単位
  • 1行だけをコメントにしたい場合 –を先頭につける
  • 複数行をコメントにしたい場合 –[[コメント]]–のようにする
  • デバッグにはprint文やコメントアウトを使う

お疲れ様でした。第5回はここまでです。
次回はオブジェクトとプロパティについて説明します。
次回からいよいよ実践的じっせんてきなプログラムを書いていくので今回までの内容をしっかり復習しておいてくださいね。

コメント

タイトルとURLをコピーしました