はじめに
TODO プランを作成する際、タスクがまだ完了していなければTODOリストに追加され、完了していれば完了アイテムに移動されます。
プログラミングの世界でも、異なる要件に基づいてプログラムの方向を変更する必要があります。次に、フロー制御文である if
分岐文について学びましょう。
ポイント:
if
文if-else
文else-if
文- 書式規則
TODO プランを作成する際、タスクがまだ完了していなければTODOリストに追加され、完了していれば完了アイテムに移動されます。
プログラミングの世界でも、異なる要件に基づいてプログラムの方向を変更する必要があります。次に、フロー制御文である if
分岐文について学びましょう。
ポイント:
if
文if-else
文else-if
文最も一般的に使用される分岐文は if
文で、事前に設定された条件が真であるかどうかをチェックし、その後コードブロックを実行するかどうかを決定します。以下はその形式です。
if condition {
コードブロック
}
条件が真の場合、プログラムはコードブロックを実行します。そうでなければ、コードブロックをスキップします。
実際の例を見てみましょう。if.go
という新しいファイルを作成し、次のコードを記入します。
cd ~/project
touch if.go
package main
import (
"fmt"
)
func main() {
var num = 40
// %を使って2つの数の割り算の余りを取得する
if num % 2 == 0 {
fmt.Println(num, "は偶数です")
}
}
プログラムを実行します。
go run if.go
結果は以下の通りです。
40は偶数です
このプログラムでは、まず整数型の変数 num
を宣言します。その後、if
文で剰余演算子 %
を使って num
を2で割った余りを取得し、等価演算子 ==
を使って余りが0に等しいかどうかをチェックします。もし等しければ、コードブロックが実行され、その数が偶数である旨が出力されます。
if
文の条件が満たされない場合に何か他のことを出力したい場合はどうすればよいでしょうか。この場合、if else
文を使用することができます。if
文の条件が真の場合、if
文のコードブロックが実行されます。そうでなければ、else
文のコードブロックが実行されます。
if else
文の形式は if
文と似ています。
if condition {
コード
} else {
コード
}
例を見てみましょう。以下のプログラムは、今日が平日か休日かを出力します。
cd ~/project
touch if_else.go
package main
import (
"fmt"
"time"
)
func main() {
// 現在の時刻を取得する
t := time.Now()
// 土曜日または日曜日かどうかをチェックする
if t.Weekday() == time.Saturday || t.Weekday() == time.Sunday {
fmt.Println("今日は:", t.Weekday(), "休日")
} else {
fmt.Println("今日は:", t.Weekday(), "平日")
}
}
プログラムを実行します。
go run if_else.go
結果は以下の通りです。
今日は: 月曜日 平日
標準ライブラリの time
パッケージを使用して現在の時刻を取得します。その後、土曜日と日曜日と比較して、休日の場合、if
文のコードブロックが実行されます。そうでなければ、else
文のコードブロックが実行されます。
単一の条件をチェックするだけでなく、複数の条件をチェックするために else if
文を使用することもできます。
その形式は以下の通りです。
if condition {
コード
} else if condition {
コード
} else {
コード
}
分岐文では、複数の else if
文を持つことができますが、if
文は1つだけ、else
文も1つだけです。else if
文は if
文と else
文の間に配置する必要があります。
「if else」のセクションのプログラムを更新して曜日を出力するようにしましょう。
if_else.go
ファイルを更新します。
package main
import (
"fmt"
"time"
)
func main() {
today := time.Now().Weekday()
if today == time.Monday {
fmt.Println("今日は月曜日です")
} else if today == time.Tuesday {
fmt.Println("今日は火曜日です")
} else if today == time.Wednesday {
fmt.Println("今日は水曜日です")
} else if today == time.Thursday {
fmt.Println("今日は木曜日です")
} else if today == time.Friday {
fmt.Println("今日は金曜日です")
} else if today == time.Saturday {
fmt.Println("今日は土曜日です")
} else {
fmt.Println("今日は日曜日です")
}
}
プログラムを実行します。
go run if_else.go
実行後、結果は以下の通りです。
今日は月曜日です
以前のプログラムでは、まず time.Now()
を使って現在の時刻を取得し、その後現在の時刻から曜日を取得していました。このプログラムでは、この2行のコードを1行にまとめています。曜日を取得した後、それを分岐文と照合して曜日を出力しています。
以前の学習では、if
文は1つのパラメータである条件のみを持っていました。
if condition {
コード
}
完全なパラメータには初期化文も含まれており、これはGoにおけるオプショナルなパラメータです。主に一時的な変数の宣言と初期化に使用され、使用する際には初期化文はセミコロンで区切られます。構文は以下の通りです。
if 初期化文; 条件 {
コード
}
「if else」のセクションのプログラムを書き換えました。コードを短縮するために、変数宣言を if
文に初期化文として移動しました。
package main
import (
"fmt"
"time"
)
func main() {
if t := time.Now(); t.Weekday() == time.Saturday || t.Weekday() == time.Sunday {
fmt.Println("今日は:", t.Weekday(), "休日で、勉強して充電します")
} else {
fmt.Println("今日は:", t.Weekday(), "また一生懸命勉強しています")
}
}
プログラムを実行します。
go run if_else.go
正しく動作することがわかります。
今日は: 月曜日 また一生懸命勉強しています
注: 初期化文で宣言された変数のスコープは if
ブロック内のみです。
Go言語を学んでいる皆さんが、if文の際のGoのフォーマット要件にご注意いただいたかどうかはわかりません。
if
、else
、else if
は、右カッコ }
と同じ行にある必要があります。else if
と else
のキーワードも、前の左カッコと同じ行にある必要があります。そうでなければ、コンパイル時にコンパイラが構文エラーを報告します。else
文を次の行に移動した後にプログラムを実行すると、コンパイラが構文エラーを報告します。
この実験では、if
分岐文について解説しました。主なポイントは以下の通りです。
if
分岐コードブロック内には、複数の else if
文があり得ますが、if
文は1つだけ、else
文も1つだけです。else if
文は、if
文と else
文の間に配置する必要があります。if
文で初期化文を使用することで、コードを短縮できます。if
、else
、else if
がカッコと同じ行にあることを強制します。