Go言語のwhile的なforループの使い方!条件式ループの基本を解説
生徒
「Go言語ではwhile文って使えないんですか?」
先生
「いい質問ですね。実はGo言語にはwhile文はないんですが、for文を使って同じことができますよ。」
生徒
「じゃあ、Goでwhileみたいな繰り返しをしたいときはどう書けばいいんですか?」
先生
「それでは、Go言語のfor文を使った条件式ループの書き方を、わかりやすく説明していきましょう!」
1. Go言語にはwhile文がない?
多くのプログラミング言語には「while(ワイル)」という繰り返し処理のための文があります。たとえば、「ある条件がtrue(真)の間、ずっと処理を繰り返す」というときに使います。
ですが、Go(ゴー)言語にはwhileという文法が存在しません。その代わりに、for文という命令だけで、すべての繰り返し処理を表現します。つまり、Goではforだけでwhileもforも両方の役割を果たせるのです。
2. Go言語でwhile的な繰り返しをする基本の形
Goで「ある条件を満たす間、処理を繰り返す」ためには、次のように書きます:
for 条件式 {
// 条件式がtrue(真)の間、ここが何度も実行されます
}
この書き方は、他の言語におけるwhile文とほぼ同じ働きをします。
3. 実際に書いてみよう!数字をカウントする例
ここでは、1から5までの数字を1つずつ表示するプログラムを作ってみましょう。
package main
import "fmt"
func main() {
count := 1
for count <= 5 {
fmt.Println(count)
count++
}
}
このプログラムでは、countという変数が1から始まり、5以下の間は繰り返し処理を行い、毎回countの値を1ずつ増やしています。
出力結果は以下のようになります:
1
2
3
4
5
4. 条件式ループの注意点
for文で条件式だけを使う場合、ループの終了条件を忘れてしまうと、永遠に終わらない「無限ループ」になる危険があります。
たとえば、次のように書くと危険です:
for count <= 5 {
fmt.Println(count)
// count++ を忘れてしまった!
}
このコードはcountの値が増えないため、ずっとcount <= 5のままで、繰り返しが止まりません。
5. 条件式ループを使った応用例:ユーザーの入力を待つ
Goではfor文を使って、ユーザーから正しい入力があるまで繰り返すという処理もできます。
例として、「ユーザーが数字を5と入力するまで繰り返す」プログラムを作ってみましょう。
package main
import (
"fmt"
)
func main() {
var input int
for input != 5 {
fmt.Print("5を入力してください: ")
fmt.Scan(&input)
}
fmt.Println("正解です!")
}
このプログラムは、ユーザーが5と入力するまでfor文の中を繰り返します。fmt.Scanという命令を使って、キーボードからの入力を受け取っています。
6. なぜGoはwhileを使わないの?
Go言語は、なるべくシンプルに、読みやすく、間違いにくくするために設計されています。whileという命令を使わずに、forに統一しているのはそのためです。
つまり、forだけで色々な繰り返し処理ができるようにして、初心者でも理解しやすいように作られているのです。
7. Go言語のfor文のバリエーション
Goのfor文には、3つの使い方があります。その中の1つが今回紹介した「条件式ループ」です。
- ① 初期化・条件式・後処理を使った基本のforループ
- ② 条件式だけを使ったwhile的なループ(本記事の内容)
- ③ 条件もなしの無限ループ
今回学んだ②の形は、何回繰り返すかわからないときにとても便利です。
まとめ
ここまで、Go言語の条件式だけを使ったfor文、いわゆるwhileのように使う書き方を学んできました。多くのプログラミング言語にはwhile文がありますが、Go言語にはwhileという文法が存在しません。その理由は、Goが複雑な文法を増やさず、読みやすくて安全なコードを書けるように設計されているからです。わざわざ同じ意味の書き方を増やすより、for文に統一することで、初心者でも迷わずに繰り返し処理を記述できます。条件だけを書くforは、まさにwhileと同じ役割を果たすため、他の言語から移ってきた人も安心して使えます。
とくに、Go言語のforループは、何回繰り返すかわからない場面でとても役立ちます。たとえば、正しい入力が得られるまで待つ処理や、ゲームのようにユーザーが行動するまで繰り返す処理、ネットワークの通信を確認し続ける処理など、実用的な活用方法が数多くあります。プログラムを現場で動かすと、必ず予想できない状況や、いつ終わるかわからない処理に出会うものです。そうした場面で、条件式付きのforは素直で読みやすく、あとから見た人にも意図が伝わりやすい書き方になります。
もう一つ覚えておきたい大切なポイントは、「終了条件に近づける処理を忘れない」ということです。たとえば、変数を増やしたり減らしたりする操作を入れ忘れると、ループが永遠に止まらず、無限に実行されてしまいます。これは、プログラミング初心者が最初に経験しやすいトラブルのひとつです。無限ループは、画面が止まったり、CPUを使い続けたり、最悪の場合プログラムが動かせなくなることもあるため、実践で気をつけなければいけません。
しかし、基本さえ押さえていれば怖くありません。「初期化」「条件」「更新」という三つの流れが矛盾せず、きちんと先へ進むように書かれていれば、while的なfor文は安全に使えます。たとえば数がだんだん減っていくときは、条件式と更新処理の向きがちゃんと合っているかを確認するだけで、想定通りに動きます。増えるときは増える方向、減るときは減る方向、それがひと目で理解できる書き方が、読みやすいGo言語のスタイルと言えるでしょう。
プログラミング未経験の方にとっては、最初のうちは「条件だけを書くforは特別な書き方なのかな?」と感じるかもしれません。しかし実際には難しい仕組みはなく、「条件を満たす限り繰り返す」というシンプルな考え方さえ覚えれば困ることはありません。他の言語と比べても覚える文法は少なく、書き方を統一できるため、エラーの原因や読み間違いを減らす効果もあります。
実際の現場では、ユーザーに誤った値を入れられたときに繰り返し聞き返す処理、ネットワークからの応答を待つ処理、ファイルが存在するかを確認し続ける処理などで条件式のfor文が多く使われます。さらに、条件がそろった瞬間に処理が終わるため、無駄なCPUの消費も抑えられます。このように、whileを置き換える形でforを使うのは、Go言語らしい美しい考え方でもあるのです。
ここまで読んで「なんとなくわかったけれど、自分で書けるか不安」という方のために、簡単なサンプルをもう一つ紹介します。たとえば、ユーザーが0を入力したら繰り返しを止める小さなプログラムは、次のように書けます。
package main
import (
"fmt"
)
func main() {
var num int
for num != 0 {
fmt.Print("数字を入力してください(0で終了): ")
fmt.Scan(&num)
}
fmt.Println("終了します")
}
このプログラムは、ユーザーが0を入力するまで何度でも数字を聞き続けます。難しい特別な命令は使っていませんが、「条件式だけのfor」が自然にwhileのような役割を果たしていることがわかります。こういった地味な処理が書けるようになると、プログラミングで作れる幅がどんどん広がります。とくにGo言語は、シンプルで読みやすく、安全で理解しやすいという特徴を持っているため、初心者が最初に習う言語としても向いています。
まとめとして、Go言語で繰り返し処理を書くときは、まず「forで考える」というクセをつけてみるとよいでしょう。回数が決まっているときは基本のfor、回数が決まっていないときは条件式だけのfor、永久に回したいときは条件も初期化も何も書かないfor。この三つの形を知っておくだけで、さまざまな処理に対応できます。特別な書き方を覚えなくても、forひとつで自由に応用できるのが、Goが持つ大きな魅力のひとつです。
生徒
「先生、Go言語ってwhile文がないのに、ちゃんと同じことができるんですね!」
先生
「そうなんです。forに一本化されているので、覚える文法が少なくて済みます。」
生徒
「条件だけ書くforがwhileの代わりになるって聞いて、最初は不思議でしたけど、実は仕組みはシンプルなんですね。」
先生
「その通りです。条件がtrueの間だけ回り続けるので、動きをイメージしやすいでしょう?」
生徒
「はい!入力を待つプログラムとか、数を数えるプログラムを書いてみたら、ちゃんと理解できました!」
先生
「慣れてくると、forだけで色々な書き方ができるのが楽しくなりますよ。これからも練習してみましょう!」