【Lua言語講座】4.演算と演算子

演算と演算子 Lua言語講座

こんにちは、ロブスタのハルです!
前回の講座では変数と型、命名規則めいめいきそくについて説明しました。
今回はプログラムの基本となる演算えんざんと演算を行うための演算子について説明したいと思います!
前回の講座を見ていない方はこちらからご覧ください。

前回の宿題

宿題としてスクリプト内で好きな型の変数を定義してください。その後print()の中で変数を呼び出してみてください。また、以下のコードを実行してみてどこが変わっているのか考えてみてください。

-- 宿題1
local num = 123

print(num)
print("num")
-- 宿題2
local num = 123

print(num)
num = 456
print(num)
num = 123 + 456
print(num)
https://roblox-starter.com/programing-lua/lua-lesson3-variable-and-type/

まず、宿題1を実行した結果がこちらになります。

宿題1

結果から分かるようにprintプリント()で変数の値を表示するには()の中にそのまま変数を入れればいいです。もし、5行目みたいに” “をつけてしまうと文字列として認識されてしまいます。

続いて宿題2を実行した結果がこちらになります。

宿題2

使っている変数はすべてnumナムですが、中の値を変えると上から順に変わっていることが確認できます。

演算について

それでは今回の内容に入っていきます。

そもそもプログラムとは入力→処理→出力の繰り返しで成り立っています。
そのうちの処理において必要となってくるのが演算です。

例えば、2つの数字を足した結果と引いた結果が欲しい場合は下のようになります。

local resultAdd = 0
local resultSub = 0

resultAdd = 2 + 3
resultSub = 3 - 2

1・2行目でresultリザルトAddアド = 0, resultリザルトSubサブ = 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箇所を書き換える必要がありますね。

演算子とは

演算子とは演算をするための記号と思ってもらって大丈夫です。
具体的には以下のような演算子があります。

  1. 算術演算子さんじゅつえんざんし
  2. 比較演算子ひかくえんざんし
  3. 論理演算子ろんりえんざんし
  4. 連結演算子れんけつえんざんし

算術演算子

算術演算子には加算かさん減算げんざん乗算じょうざん除算じょざん累乗るいじょう剰余じょうよの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条件式2and演算結果
 true true  true
 true false  false
 false true  false
 false false  false
and演算子の判定

ちなみに条件式を3, 4…と増やしてすべてand演算子で繋いだ場合もすべての条件式がtrueの場合だけtrueとなります。

or演算子の判定

orオア演算子はどちらか一方でもtrueのときにtrueを返します。

条件式1条件式2or演算結果
 true true  true
 true false  true
 false true  true
 false false  false
or演算子の判定

これも条件式を増やしてすべてor演算子で繋いだ場合もたった1つの条件式がtrueならtrueとなります。また、一番左側の条件式がtrueならそれ以降の条件式は判定されずに全体がtrueとして判定されます。

not演算子の判定

notノット演算子は条件式がfalseの場合にtruetrueの場合にfalseとなります。

条件式not演算結果
true  false
false  true
not演算子の判定

連結演算子

連結演算子は文字列同士をつなぐための演算子です。基本は文字列を繋ぐことに使いますが、それ以外にも文字列の中に数値を埋め込む際にも使われます。

使用例は以下の通りです。

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回はここまでです。
次回は文とコメントについて説明します。

コメント

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