※この記事は会話形式にリライトしました。
こんにちは、ロブスタのハルです!
前回の講座では変数と型、命名規則について説明しました。
今回はプログラムの基本となる演算と演算を行うための演算子について説明したいと思います!
前回の講座を見ていない方はこちらからご覧ください。
前回の宿題
宿題としてスクリプト内で好きな型の変数を定義してください。その後print()の中で変数を呼び出してみてください。
また、以下のコードを実行してみてどこが変わっているのか考えてみてください。
-- 宿題1 local num = 123 print(num) print("num")
https://roblox-starter.com/programing-lua/lua-lesson3-variable-and-type/-- 宿題2 local num = 123 print(num) num = 456 print(num) num = 123 + 456 print(num)
まず、宿題1を実行した結果がこちらになります。

結果から分かるようにprint()で変数の値を表示するには()の中にそのまま変数を入れればいいです。もし、5行目みたいに” “をつけてしまうと文字列として認識されてしまいます。
続いて宿題2を実行した結果がこちらになります。

使っている変数はすべてnumですが、中の値を変えると上から順に変わっていることが確認できます。
演算について
――ある日の会話――

先生、プログラミングで計算ができるって聞いたんですが本当ですか?

ええ、もちろんできます。
というより本来は計算をさせるためにプログラミングが生まれましたからね。
解説
そもそもプログラムとは入力→処理→出力の繰り返しで成り立っています。
そのうちの処理において必要となってくるのが演算です。
例えば、2つの数字を足した結果と引いた結果が欲しい場合は下のようになります。
local resultAdd = 0
local resultSub = 0
resultAdd = 2 + 3
resultSub = 3 - 2
1・2行目でresultAdd = 0, resultSub = 0としているのはresultAddやresultSubのままだと中の値が決まっていないためです。このように変数を定義する際に0を代入することを初期化と呼びます。
プログラミング的な書き方
今回のように簡単な例では上のような書き方でも構いません。しかし、2や3を直接使うと意味がわかりにくくなってしまいますし、変更したいときに面倒になります。
local num1 = 2
local num2 = 3
local resultAdd = 0
local resultSub = 0
resultAdd = num1 + num2
resultSub = num2 - num1
まず、1~4行目では変数を定義しています。
1・2行目では2つの数字をそれぞれ定義しており、3・4行目では結果を入れるための変数resultAddとresultSubを定義して初期化しています。
プログラムの流れとしては上から順に実行されて、6行目でnum1とnum2を足した結果がresultAddに代入されることでresultAddの値が0から5に更新されます。7行目でnum2からnum1を引いた結果がresultSubに代入されることでresultSubの値が0から1に更新されます。
このような書き方をすることで例えば、num1の値を10に変えたいときには2を10に書き換えるだけで済みます。1つ前の書き方だと2箇所を書き換える必要がありますね。
演算子とは
――ある日の会話――

プログラムでも普通の数式と同じように計算ができるんですね。

ええ。実は四則計算だけじゃなく、比較や論理演算、文字列の連結などもできるんですよ。

さすがコンピュータ…
解説
演算子とは何かしらの計算をするための記号と思ってもらって大丈夫です。
具体的には以下のような演算子があります。
- 算術演算子
- 比較演算子
- 論理演算子
- 連結演算子
算術演算子
算術演算子には加算・減算・乗算・除算・累乗・剰余の6つがあります。
数値型に対して使うことができ、結果も数値型となります。
加算(足し算) | + |
減算(引き算) | – |
乗算(掛け算) | * |
除算(割り算) | / |
累乗 | ^ |
剰余 | % |
使用例は以下のようになります。
local num1 = 20
local num2 = 4
local ans = 0
-- 加算
ans = num1 + num2
-- 減算
ans = num1 - num2
-- 乗算
ans = num1 * num2
-- 除算
ans = num1 / num2
-- 累乗
ans = num1 ^ num2
-- 剰余
ans = num1 % num2
加算・減算・乗算・除算はそれぞれ足し算・引き算・かけ算・わり算のことなので大丈夫だと思います。
累乗とは同じものを何回か掛けた結果のことです。例えば、5を3回掛けたとき、5^3と表すことができます。
剰余とは除算をしたときの余りのことです。例えば、21を4で割ると21/4=5余り1となりますが剰余記号%を使うことで21%4=1となり、余りのみを取り出せます。
今はそんな計算があるんだなくらいの認識で大丈夫です。
比較演算子
比較演算子は左の数値と右の数値の大小関係を調べるための演算子です。
数値型に対して使うことができ、結果はboolean型になります。
小さい | < |
大きい | > |
小さいか等しい | <= |
大きいか等しい | >= |
等しい | == |
異なる | ~= |
使用例は以下のようになります。
local leftNum = 3
local rightNum = 5
local ans = false
-- 大きい
ans = leftNum > rightNum
-- 小さい
ans = leftNum < rightNum
-- 大きいか等しい
ans = leftNum >= rightNum
-- 小さいか等しい
ans = leftNum <= rightNum
-- 等しい
ans = leftNum == rightNum
-- 異なる
ans = leftNum ~= rightNum
ポイントとしては比較演算子の左側の数値が右側の数値と比べてどうなるかを比較しているということです。
例えば、leftNum > rightNum と rightNum < leftNum はどちらも同じ結果となります。
比較演算子を使うことで条件式というものを作ることができます。
論理演算子
論理演算子は複数の条件式をつなぐ役割を果たします。
かつ | and |
または | or |
でない | not |
使用例は以下の通りです。
local num1 = 5
local num2 = 12
local num3 = 20
local condition = false
-- and
condition = num1 < num2 and num2 <= num3
-- or
condition = num1 >= num2 or num1 < num3
--not
condition = not(num1 == 5)
論理演算子は少しややこしいですが、よく使うのでちょっとずつ慣れていきましょう。
and演算子の判定
and演算子は両方の条件式とも満たしている(true)のときにtrueを返します。どちらか一方でもfalseの場合はfalseとなります。
条件式1 | 条件式2 | and演算結果 |
true | true | true |
true | false | false |
false | true | false |
false | false | false |
ちなみに条件式を3, 4…と増やしてすべてand演算子で繋いだ場合もすべての条件式がtrueの場合だけtrueとなります。
or演算子の判定
or演算子はどちらか一方でもtrueのときにtrueを返します。
条件式1 | 条件式2 | or演算結果 |
true | true | true |
true | false | true |
false | true | true |
false | false | false |
これも条件式を増やしてすべてor演算子で繋いだ場合もたった1つの条件式がtrueならtrueとなります。また、一番左側の条件式がtrueならそれ以降の条件式は判定されずに全体がtrueとして判定されます。
not演算子の判定
not演算子は条件式がfalseの場合にtrue、trueの場合にfalseとなります。
条件式 | not演算結果 |
true | false |
false | true |
連結演算子
連結演算子は文字列同士を繋ぐための演算子です。基本は文字列を繋ぐことに使いますが、それ以外にも文字列の中に数値を埋め込む際にも使われます。
使用例は以下の通りです。
local string1 = "abc"
local string2 = "def"
local myoji = "田中"
local name = "太郎"
local num = 123
print(string1 .. string2)
print(myoji .. name)
print(string1 .. num .. string2)
演習
それでは手を動かしてみましょう。
スクリプトエディタを開いて次のコードを打ってみましょう。
local num1 = 29
local num2 = 5
-- 算術演算子
print(num1 + num2)
print(num1 - num2)
print(num1 * num2)
print(num1 / num2)
print(num2 ^ 3)
print(num1 % num2)
-- 論理演算子
print(num1 >= 29 and num2 < 10)
print(num1 < 20 or num2 < 5)
print(not(num1 == 29))
print(not(num2 == 1))
-- 連結演算子
print("Hello" .. " world!")
実行すると以下のようになります。

最後に
――ある日の会話――

いっぱい新しいことが出てきて少し大変でしたね。

プログラミングでは四則計算だけでなく、比較や論理演算、連結もできることがわかりました。今回の例で変数の使い方もなんとなくわかってきたような気がします。

それはよかったです。
この調子で頑張りましょうね。
まとめ
- 算術演算には加算・減算・乗算・除算・累乗・剰余がある
- 比較演算は数値同士の大小関係を調べる
- 論理演算は複数の条件式の関係を調べる
- 連結演算は文字列を繋ぐことができる
お疲れ様でした。第4回はここまでです。
次回は文とコメントについて説明します。
コメント