ループ処理
ループ処理をする
メニューで「アプリを終了する」を選択するまでプログラムが終了しないような実装は以下のようなイメージとなる。
プログラムを実行してから終わらせないようにするにはループ処理というものを使う。
繰り返し処理
ループ処理は while という文法を使えば実行できる。whileは 繰り返し処理 と呼ばれるものを実行するための文法。
繰り返し処理
繰り返し処理とはある決まった処理を繰り返し行うこと。
決まった回数や条件を満たしている間は処理を繰り返す。
繰り返し処理を行うための文法にはfor、each、whileなどいくつかある。
while文
while(ホワイル)文は繰り返し処理を行う文法の1つ。whileは以下のような文法で繰り返し処理を行う。
1 2 3 |
while 条件式 do
# 処理を実行する
end
|
whileは条件式で繰り返すかどうかを決める。条件式が真(true)のときはずっと処理を繰り返し続ける。
whileで繰り返し処理
「1から10までを順に足し合わせてその都度表示する」は以下のような考え方でアルゴリズムを組み立てていく。
アルゴリズム
アルゴリズムはコンピュータである目的を達成するための処理の手順のこと。
ここでは「1から10までを順に足し合わせてその都度表示する」が目的、もしくは解となりこれを達成するためにどのようにプログラムを組んだらいいか考えることがアルゴリズムを考えることになる。
「1から10までを順に足し合わせてその都度表示する」処理の手順
- 1から10まで1ずつ増えていく変数numberを定義する
- 足し合わせた数値の変数sumを定義する。
- numberが10になるまで処理を繰り返すwhile文を書く
- while文の中に足し合わせる処理を書く
- while文の中に足し合わせた数字を表示させる処理を書く
ループ処理を書いていると条件によってはいつまでも処理が終わらないという無限ループに入ってしまう。そうしたときはターミナルでプログラムを強制終了させる必要がある。強制終了はターミナル画面で「control + c」。
sample.rb
1 2 3 4 5 6 7 |
sum = 0
number = 1
while number <= 10 do
sum += number
puts sum
number += 1
end
|
3行目の「number <= 10」が条件式で「numberが10以下のときは処理を繰り返す」ということ。
ここで+=
という演算子が出てくる。これは自己代入演算子と呼ばれる演算子。
自己代入演算子
自己代入とは、その名の通り自分自身に代入するということ。自己代入演算子は、通常の演算子を用いた書き方に直すことができる。例としてサンプルプログラム6行目のnumber += 1
を通常の演算子+
を使った書き方に直してみる。
【例】
1 |
number += 1
|
この自己代入演算子+=
を使った式は以下のように書き直せる。
【例】
1 |
number = number + 1
|
このソースコードを見るとわかるように自己代入演算子を使った式number += 1
は変数number
に1足した値をnumber
自身に代入するという処理になる。
以下に代表的な自己代入演算子を示す。
自己代入演算子 | 例 | 処理 |
---|---|---|
+= | number += 1 | numberに1足した値をnumber自身に代入 |
-= | number -= 2 | numberから2引いた値をnumber自身に代入 |
*= | number *= 3 | numberに3かけた値をnumber自身に代入 |
/= | number /= 4 | numberを4で割った値をnumber自身に代入 |
このように自己代入演算子を使うと、変数自身にある値を足したり、引いたりすることを簡単に記述することができる。
ループ処理を行う
プログラムを終了させず同じ処理をずっと繰り返すループ処理を行う方法はwhile文の条件式をtrueにしておくこと。
これでwhileが繰り返すための条件が常に真となり、永遠にwhile内の処理が繰り返される。
1 2 3 4 |
while true do
# プログラムは終了せず繰り返し処理が行われる
## 処理
end
|
しかしこれでは無限ループとなり、処理が終わることがない。このループの処理から抜けるためにはexitメソッドを呼び出す。
exitメソッド
exitメソッドはプログラムの処理を強制的に終了させるメソッド。言うならば、実行中のプログラムを強制終了するコマンド「control + c」と同じ役割を持つメソッド。
1 2 3 4 |
while true do
exit # ここでプログラムが終わる
puts "Hello World" # これは呼ばれない
end
|
exitメソッドはプログラム自体を強制終了させるのでexitメソッド以降の処理は行われない。
1 2 3 4 5 6 7 |
while true do
input = gets.chomp # ユーザーの入力
if input == "exit" then # exitと入力されたら
exit # プログラムを終了
end
puts "ループ中"
end
|
これはexitと入力するまでずっと処理を続けるプログラム。このようにwhileの条件式をtrueにすることでexitを呼ぶまで同じ処理を行い続ける。