はじめに
プログラミング言語でデータを変数に保存した後、どのように処理すればよいでしょうか。
このとき、保存されたデータに対して計算を行うために 演算子 が必要になります。このセクションでは、以下のことを学びます。
学習項目:
- 算術演算子
- 比較演算子
- 論理演算子
- 代入演算子
プログラミング言語でデータを変数に保存した後、どのように処理すればよいでしょうか。
このとき、保存されたデータに対して計算を行うために 演算子 が必要になります。このセクションでは、以下のことを学びます。
学習項目:
算術演算子は最も基本的な演算子で、基本的な計算方法を表します。
演算子 | 機能 |
---|---|
+ |
加算 |
- |
減算 |
* |
乗算 |
/ |
除算 |
% |
剰余算 |
home/project/
ディレクトリに opePractice.go
という名前のファイルを作成します。
cd ~/project
touch opePractice.go
その中に次のコードを書きます。
package main
import "fmt"
func main() {
a := 10
b := 3
fmt.Println("a =", a, "b =", b)
fmt.Println("-----")
// 加算、減算、乗算
fmt.Println("a + b =", a+b)
fmt.Println("a - b =", a-b)
fmt.Println("b - a =", b-a)
fmt.Println("a * b =", a*b)
// 除算
// Go言語では、整数を除算する場合、切り捨てられます。
fmt.Println("a / b =", a/b)
// ただし、浮動小数点数を除算する場合は、そのような問題はありません。
fmt.Println("10.0 / 3 =", 10.0/3)
// 剰余算:一般的な形式
fmt.Println("a % b =", a%b)
// 負の数を使った剰余算
// 計算方法:余り = 被除数 - (被除数 / 除数) * 除数
fmt.Println("10 % -3 =", 10%-3)
fmt.Println("-10 % 3 =", -10%3)
fmt.Println("-10 % -3 =", -10%-3)
}
コードを実行し、負の余りの計算方法に特に注意してください。
cd ~/project
go run opePractice.go
a = 10 b = 3
-----
a + b = 13
a - b = 7
b - a = -7
a * b = 30
a / b = 3
10.0 / 3 = 3.3333333333333335
a % b = 1
10 % -3 = 1
-10 % 3 = -1
-10 % -3 = -1
Go言語では、
++
(インクリメント)と--
(デクリメント)は独立した文であり、独立してのみ使用できます。演算子ではありません。
次のコードは誤りです。
var a int = 5
var i int = 0
a = i++ // 誤った使用方法。インクリメントは独立してのみ使用できます
a = i-- // 誤った使用方法。デクリメントは独立してのみ使用できます
a = ++i // 誤った使用方法。Go言語には前置インクリメントはありません
a = --i // 誤った使用方法。Go言語には前置デクリメントはありません
正しい構文は次の通りです。
var i = 0
i++
i++
fmt.Println(i)
opePractice.go
に次のコードを書きます。
コードを完成させます。インクリメント演算子を使って変数 i
の値を変更し、変数 a
の値が 16 になるようにします。
package main
import "fmt"
func main() {
var a int = 15
var i int = 0
/* 以下にコードを記述 */
a = a + i
fmt.Println(a)
// コードを完成させて、aの出力が16になるようにします
}
比較演算子とは何か。
比較演算子は比較の一種で、2つの値の関係を表します。2つの値が等しいか、一方が他方より大きいか小さいかを判断します。
演算子 | 関係 |
---|---|
== |
等しい |
!= |
等しくない |
> |
より大きい |
>= |
以上 |
< |
より小さい |
<= |
以下 |
上記の演算子は、条件が成立する場合は
true
を返し、それ以外の場合はfalse
を返します。
opePractice.go
に次のコードを書きます。
package main
import "fmt"
func main() {
// 比較演算子の使用
var a int = 7
var b int = 6
// 等しいかどうかを確認
fmt.Println(a == b) //false
// 等しくないかどうかを確認
fmt.Println(a!= b) //true
// aがbより大きいかどうかを確認
fmt.Println(a > b) //true
// aがb以上であるかどうかを確認
fmt.Println(a >= b) //true
// aがbより小さいかどうかを確認
fmt.Println(a < b) //false
// aがb以下であるかどうかを確認
fmt.Println(a <= b) //false
// 1が1と等しいかどうかを確認
judgeValue := 1 == 1 //true
fmt.Println(judgeValue)
}
コードを実行します。
cd ~/project
go run opePractice.go
上記のコードでは、変数 a
と b
に基づいて比較を行いました。
学生は変数の値を変更して比較結果を変え、比較演算子をより深く理解することができます。
論理演算子とは何か。
論理演算子は、比較演算子の高度な形態です。主に比較演算子を組み合わせて、さらなる評価に使用されます。
演算子 | 関係 | 説明 |
---|---|---|
&& |
かつ | 両オペランドが true の場合、結果は true |
|| |
または | どちらかのオペランドが true の場合、結果は true |
! |
ではない | 条件が false の場合、結果は true |
opePractice.go
に次のコードを書きます。
package main
import (
"fmt"
)
func main() {
// 論理積演算子 && の示し方
var age int = 18
if age > 15 && age < 30 {
fmt.Println("Age is between 15 and 30")
}
if age > 30 && age < 80 {
fmt.Println("Age is between 30 and 80")
}
// 論理和演算子 || の示し方
if age > 15 || age < 30 {
fmt.Println("Age is greater than 15 or less than 30")
}
if age > 30 || age < 40 {
fmt.Println("Age is greater than 30 or less than 40")
}
// 論理否定演算子! の示し方
if age > 30 {
fmt.Println("Age is greater than 30")
}
if!(age > 30) {
fmt.Println("Age is not greater than 30")
}
}
上記のコードでは、変数 age
の値が 18
であることに基づいて、一連の論理評価を行いました。
コードを実行します。
cd ~/project
go run opePractice.go
学生は、年齢変数の値を変更してコードを実行し、出力の変化を観察することができます。
論理積と論理和演算子を使用する際、Go言語は演算子の両側のブール値を判断する必要があります。しかし、どちらの側が最初に評価されるのでしょうか。
一緒にこれを調べてみましょう。
opePractice.go
に次のコードを書きます。
package main
import "fmt"
func leftFunc(flag bool) bool {
fmt.Println("Left function is called!")
return flag
}
func rightFunc(flag bool) bool {
fmt.Println("Right function is called!")
return true
}
func main() {
if leftFunc(true) && rightFunc(true) {
fmt.Println("Evaluation is complete")
}
}
コードを実行します。
cd ~/project
go run opePractice.go
Left function is called!
Right function is called!
Evaluation is complete
論理積演算では、左オペランドが最初に評価され、その後右オペランドが評価されることがわかります。
論理和演算はどうでしょうか。opePractice.go
に次のコードを書きます。
package main
import "fmt"
func leftFunc(flag bool) bool {
fmt.Println("Left function is called!")
return flag
}
func rightFunc(flag bool) bool {
fmt.Println("Right function is called!")
return true
}
func main() {
if leftFunc(true) || rightFunc(true) {
fmt.Println("Logical OR evaluation is complete")
}
}
コードを実行します。
cd ~/project
go run opePractice.go
Left function is called!
Logical OR evaluation is complete
論理積と論理和演算の評価順序はともに左から右です。
ただし、論理和演算では、左オペランドが true
の場合、右オペランドは評価されません。
したがって、実際の開発では、論理和演算子の左側により真になりやすい条件を置くことで、プログラムの実行時間を短縮することができます。
以前の実験では、代入演算子を頻繁に使用してきました。代入演算子の核心機能は、式の値を代入演算子(=)の左辺のオペランドに代入することです。
左辺のオペランド:代入演算子(=)の左側の式または変数で、書き込み可能なもの。
実際の開発では、変数同士の加算や減算が必要なことがよくあります。
これまで学んだことを元に、次のようなコードを書くことができます。
x = x + 1
しかし、この種のコードは実際の開発で非常に一般的なため、短縮形を用意しています。
x += 1
同様に、一般的な代入演算子には以下のものがあります。
演算子 | 説明 |
---|---|
= |
基本的な代入演算子 |
+= |
加算して代入 |
-= |
減算して代入 |
*= |
乗算して代入 |
/= |
除算して代入 |
%= |
剰余を求めて代入 |
opePractice.go
に次のコードを書きます。
package main
import "fmt"
func main() {
x := 11
fmt.Println("xの初期値:", x)
x += 5 // x = x + 5
fmt.Println("x += 5の後の値:", x)
x -= 5 // x = x - 5
fmt.Println("x -= 5の後の値:", x)
x *= 5 // x = x * 5
fmt.Println("x *= 5の後の値:", x)
x /= 5
fmt.Println("x /= 5の後の値:", x)
x %= 3
fmt.Println("x %= 3の後の値:", x)
}
上記のコードでは、変数 x
に初期値 11
を代入し、基本的な算術演算(加算、減算、乗算)、除算、剰余計算を行っています。
コードを実行します。
cd ~/project
go run opePractice.go
変数の値を変更して、代入演算子がどのように機能するかを確認することができます。
この実験で学んだことを振り返りましょう。
この実験では、Go言語で演算子をどのように使用するかについて説明しました。様々な演算子とその使い方を示しました。