
前回のおさらい
前回は、Goをインストールして、Hello, World! という文字を画面に表示するところまでやりました。
今回は、プログラムの中で「データを扱う方法」と「処理の流れをコントロールする方法」を学びます。具体的には、
- 変数(データに名前をつけて保存する箱)
- 型(データの種類)
- if文(条件によって処理を分ける)
- for文(処理を繰り返す)
- switch文(たくさんの選択肢から選ぶ)
の5つです。この5つを覚えると、簡単なプログラムはほとんど書けるようになります。
変数ってなに?
プログラムの中では、いろいろな「データ」を扱います。たとえば、名前、年齢、点数、金額などです。
こうしたデータを一時的に保存しておく場所のことを、変数(へんすう) と呼びます。変数は、「名前が書かれた箱」だとイメージするとわかりやすいです。
たとえば、「age」という名前の箱を用意して、その中に「14」という数字を入れておく、というイメージです。あとから箱の中身(値)を確認したり、別の値に入れ替えたりすることができます。
Goで変数を作るときは、次のように書きます。
var age int = 14
これを日本語に直すと、こんな感じです。
var→ 「変数を作りますよ」という宣言(variableの略)age→ 箱の名前int→ 箱の種類(あとで説明する「型」です)= 14→ 箱に「14」という値を入れる
もう少し短く書ける方法もあります。Goでは、:= という記号を使うと、var や型を省略して書けます。
age := 14
これは var age int = 14 とほぼ同じ意味になります。Goが「14という値なら、int型の箱だな」と自動で判断してくれるためです。実際のGoのコードでは、こちらの := の書き方がよく使われます。
型ってなに?
先ほど出てきた int という言葉について説明します。
箱にもいろいろな種類がありますよね。液体を入れる箱(コップ)、本を入れる箱(本棚)のように、入れるものに応じて適した箱の形が違います。
プログラミングにおける 型(かた) も同じです。「この箱には、どんな種類のデータが入るか」を決めるものです。Goでよく使う型には、次のようなものがあります。
型 | 説明 | 例 |
|---|---|---|
| 整数(小数点のない数字) |
|
| 小数(小数点のある数字) |
|
| 文字列(文字のあつまり) |
|
| 真偽値(正しいか、正しくないか) |
|
bool(ブール型)だけ少し馴染みがないかもしれません。これは「はい」か「いいえ」、「正しい」か「正しくない」だけを表す型です。テストの◯✕問題のようなものだとイメージしてください。true が◯、false が✕です。
Goは「型にとても厳格な言語」です。たとえば int 型の箱に、あとから string(文字列)を入れようとすると、エラーになります。
age := 14 // ageはint型
age = "14歳" // エラー!int型の箱にstring型は入れられない
「なんでそんな厳しいルールがあるの?」と思うかもしれませんが、これはプログラムのミスを防ぐためです。「数字が入っているはずの箱に、間違って文字を入れてしまった」というバグ(プログラムの不具合)を、Goがプログラムを実行する前に見つけて教えてくれます。
実際にコードを動かして確認してみましょう。次のコードを main.go に書いて、go run main.go で実行してみてください(前回作った hello-go フォルダを使い回してOKです)。
package main
import "fmt"
func main() {
name := "太郎"
age := 14
height := 160.5
isStudent := true
fmt.Println(name)
fmt.Println(age)
fmt.Println(height)
fmt.Println(isStudent)
}
実行結果は次のようになります。
太郎
14
160.5
true
このように、fmt.Println() のかっこの中に変数の名前を書くと、その変数に入っている値が表示されます。
if文: 条件によって処理を分ける
ここからは「処理の流れをコントロールする方法」を学びます。まずは if(イフ)文です。
if 文は、「もし〇〇だったら、△△をする」という処理を書くためのものです。日常生活でも、「もし雨が降っていたら、傘を持っていく」のように、条件によって行動を変えることがありますよね。それと同じことをプログラムでも行います。
package main
import "fmt"
func main() {
score := 85
if score >= 80 {
fmt.Println("よくできました!")
} else {
fmt.Println("もう少しがんばろう")
}
}
このコードは、「もし score(点数)が80以上だったら『よくできました!』と表示する。そうでなければ(else)『もう少しがんばろう』と表示する」という意味です。
score := 85 なので、80以上という条件に当てはまり、実行結果は次のようになります。
よくできました!
score の値を 70 に変えて実行し直すと、今度は もう少しがんばろう と表示されるはずです。ぜひ実際に数字を書き換えて試してみてください。
条件の書き方(比較演算子)には、次のようなものがあります。
記号 | 意味 |
|---|---|
| 等しい |
| 等しくない |
| より大きい |
| より小さい |
| 以上 |
| 以下 |
= が1つの = ではなく、== と2つ重なっている点に注意してください。1つの = は「代入(値を入れる)」、2つの == は「比較(等しいか確認する)」という、まったく違う意味になります。
for文: 処理を繰り返す
次は for(フォー)文です。for 文は、「同じ処理を、指定した回数だけ繰り返す」ためのものです。
たとえば、「1から5までの数字を、順番に表示する」というプログラムを考えてみましょう。for 文を使わないと、こう書くことになります。
fmt.Println(1)
fmt.Println(2)
fmt.Println(3)
fmt.Println(4)
fmt.Println(5)
同じような命令を5回も書くのは大変ですし、「100回繰り返したい」となったら100行書かなければいけません。ここで for 文の出番です。
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
}
実行結果は次のようになります。
1
2
3
4
5
for i := 1; i <= 5; i++ { ... } は、3つの部分に分かれています。
i := 1→ 「iという名前の変数を用意して、1を入れる」(最初の1回だけ実行される)i <= 5→ 「iが5以下である間、繰り返す」(この条件がfalseになったら繰り返しをやめる)i++→ 「1回繰り返すごとに、iに1を足す」(i++はi = i + 1の省略形です)
つまり、「iは1からスタートして、5以下の間は繰り返して、1周するたびにiを1ずつ増やしていく」という意味になります。i は1, 2, 3, 4, 5と変化していき、i が6になった時点で条件(5以下)を満たさなくなるので、繰り返しが終わります。
i のような、繰り返しのたびに変化していく変数のことを、慣習的にカウンター変数と呼びます。i という名前は「index(添字、番号)」の頭文字から来ていて、多くのプログラミング言語で「とりあえずの繰り返し変数の名前」としてよく使われます。
switch文: たくさんの選択肢から選ぶ
最後に switch(スイッチ)文です。if 文でも複数の条件を書くことはできますが、選択肢がたくさんある場合は、switch 文を使うとすっきり書けます。
package main
import "fmt"
func main() {
weekday := "火曜日"
switch weekday {
case "月曜日":
fmt.Println("週の始まりです")
case "火曜日", "水曜日", "木曜日":
fmt.Println("平日です")
case "金曜日":
fmt.Println("もうすぐ週末です")
default:
fmt.Println("休日です")
}
}
switch weekday { ... } は、「weekday の値をチェックして、一致する case(ケース)の処理を実行する」という意味です。case "火曜日", "水曜日", "木曜日": のように、カンマで区切って複数の値を1つのcaseにまとめることもできます。どのcaseにも当てはまらなかった場合は、default(デフォルト)の処理が実行されます。
weekday := "火曜日" なので、実行結果は次のようになります。
平日です
もし if 文だけでこれを書こうとすると、if weekday == "月曜日" { ... } else if weekday == "火曜日" || weekday == "水曜日" { ... } ... のように長くなってしまいます。選択肢が多いときは switch 文を使うと、コードが読みやすくなります。
まとめ
今回は、以下のことを学びました。
- 変数は「名前つきの箱」で、
:=を使ってデータを保存できる - 型は「箱の種類」で、
int(整数)、float64(小数)、string(文字列)、bool(真偽値)などがある if文は「もし〇〇なら」で処理を分岐させるfor文は「〇〇の間」処理を繰り返すswitch文は「たくさんの選択肢から選ぶ」ときに使う
これらは、どんなプログラミング言語を学ぶ上でも土台になる、とても大切な考え方です。ここまでのコードは、実際に自分のパソコンで書いて、数字や条件を変えながら動かしてみることを強くおすすめします。
次回は、「同じ処理をまとめて名前をつける」ための仕組みである関数と、コードを整理するためのパッケージについて学んでいきます。
次回:「Go言語入門③関数とパッケージ編」お楽しみに。


