御参拝、誠に有難う御座います。住職(管理人)の修羅観音です。
Rubyというプログラミング言語では、同じ処理でも書き方が違う、という事がよくあります。
例えば、この寺院(ブログ)でも、繰り返し処理を行う場合、times文やwhile文を用いてきましたね。
以前お伝えした事も御座います「十念プログラム」や「三唱礼・一千礼拝プログラム」は、回数が決まっている繰り返し処理で、time文でもwhile文でも書くことが出来ます。
Rubyでプログラミングを行う際、while文と共に違いを説明されたり、紹介される繰り返し処理文に、「for文」が御座います。
私もwhile文とfor文の違いや使い所を、Progate等で学んだもので御座います。
今回は、配列の中をwhile文とfor文を使って繰り返し処理を行い、その書き方の違いや使い方を学ぶ事と致しましょう。
どちらもきちんと学んでおけば、便利に使いこなす事が出来るかと存じます。
Contents
Rubyで仏教:while文とfor文でお世話になる配列「正信偈の七高僧」
今回、繰り返し処理を書く時に、Rubyでもよく用いられるwhile文とfor文ですが、配列を使って解説していくにあたりまして。この場で使わせて頂く配列は、以前もお伝えした事のある、真宗・浄土真宗の勤行で称えられる「正信念仏偈(正信偈)の七高僧」配列です。
Rubyで仏教プログラミングシリーズの、配列を解説したときに、七高僧の方々にご登場頂きましたね。
配列は、「変数 = []」という形式で書きまして、[]の中にデータを入れていく、という書き方でした。
「配列ってなんだっけ、書き方はどうだったかな?」と、忘れてしまわれた方は、再度過去の記事をお読み頂ければ、思い出されるかと存じます。
参照記事:「Rubyで仏教プログラミング|配列を使って高僧を表示・出力していく」
忘れてしまっても大丈夫、何度も繰り返して手を動かして頂ければ、身と意識で覚えてゆかれる事で御座いましょう。
配列の中のデータ、つまり今回の場合は七高僧ですが、七高僧はこの七名です。
[龍樹菩薩、天親菩薩、曇鸞大師、道綽大師、善導大師、源信和尚、法然上人]
今回は、「syoushinge」という変数に配列を代入する形で、while文とfor文の違いを学ぶ事と致します。

Rubyで繰り返し仏教プログラムを書く:while文とfor文について
今回は、以前に配列について学んだときに使いました、「正信偈の七高僧」配列を用いて、繰り返し処理であるwhile文とfor文を用いて、七高僧にご登場頂くプログラムを完成させます。そのために、まずは以前に勉強したwhile文のおさらいと、新しく覚えるfor文について、解説していきます。
while文は、こちらでまずは復習して頂くと致しましょうか。
参照記事:「Rubyで仏教プログラミング|while文で三唱礼・一千礼拝行を表現する」
はい、お帰りやす。
while文は、配列や決まった回数の繰り返し処理にも使えますし、どれくらい繰り返されるのか分からない場合でも使える、便利な繰り返し処理の文です。
以前のwhile文についての解説記事では、三唱礼を一千回繰り返す処理を書きました。

抽象度を上げた基本的なwhile文の書き方は、以下の通りです。
一方、for文は、主に配列やハッシュの中を繰り返し出力する時等で使われる繰り返し処理文です。
配列やハッシュの繰り返し処理と言いますと、each文に似ていますね。
for文の基本的な書き方は、以下の通りです。
このfor文を解説致しますと。
具体例では、forの後に変数iを使っており、inの後で繰り返す範囲を指定しています。
この場合、「1から10」を指定していますから、iに「1から10」の数が順繰りに入っていく、つまりinしていく、という意味です。
そして、for文の次の行で、putsメソッドを使って表示しています。
for文も、endで閉じます。
実行すると、こんな感じです。

while文との違いは、範囲を予め指定しておりますから、無限ループにならない事があげられます。
while文ですと、比較演算子の書き方を間違えたり、うっかり加算していく処理を書き忘れると、無限ループに陥ります。
また、配列の中身を出力するプログラムを書く場合、while文でも書けますが、for文の方がすっきり書けるというのが、私の体感として御座います。
上のwhile文とfor文の「#:具体例:」を比較して頂くと分かりますが、for文の方がwhile文よりも2行少なく書けていることからも、把握して頂けるかと存じます。
これを踏まえた上で、次はいよいよwhile文版とfor文版の「正信偈七高僧プログラム」を、完成させましょう。
Rubyで仏教プログラミング「正信偈七高僧プログラム」:while文版
それでは、これから実際にRubyで「正信偈七高僧プログラム」を完成させましょう。今回は、配列に七高僧の名前をデータとして入れておき、七高僧に正信偈の順番通りに登場して頂くプログラムを作ります。
先に、while文から書いていきましょうか。
題して「正信偈七高僧プログラムwhile文版」です。
まず、配列を用意します。
配列が用意出来たら、次は繰り返し処理を書いていくのですが、ここで配列の数だけ繰り返したいということで、配列の数を確認しておきましょう。
「length」メソッドを使うと、配列の中の数を表示させたり、その数を使う事が出来ます。
while文で配列を最後まで順繰りに出力する場合、このlengthメソッドが使えます。
次に、出力処理で用いる変数を用意して、その変数に配列の中身が代入されていく処理をwhile文の条件式と共に書きます。
ここでは「i」を変数とします。
配列は「0」から始まりますから、「i」には[i = 0」と、0を代入しておきます。
配列と繰り返し処理に用いる変数が用意できたら、while文を書いて条件を整えていきます。
while文では、「iが配列の数よりも小さい内は繰り返し処理を行う」という式を書きます。
そして、配列を出力するために「putsメソッド」を使って表示・出力します。
putsの後に「syoushinge[i]」と書くと、「配列のi番目」を出力します。
変数iには0が代入されていますから、1週目はデータ0、つまり「龍樹菩薩」が表示・出力されます。
その後で、無限ループに陥らないために、「i += 1」と加算して、比較演算子の条件から抜けるための条件式を書いておきます。
これで、変数iは「0、1、2・・・」と加算されていき、七人目の「法然上人」まで繰り返したら、繰り返し処理を抜けます。
以上の事をプログラミング・コードとして書くと、以下のようになります。

これで、配列が0番目から、つまり先頭から末尾まで表示されます。
実行すると、こうなります。

ここで「i += 1」を書き忘れると、延々と龍樹菩薩が出力され続ける無限ループにはまりますから、くれぐれも書き忘れないように注意しましょう。

Rubyで仏教プログラミング「正信偈七高僧プログラム」:for文版
それでは、for文を用いて「正信偈七高僧プログラムfor文版」を作りましょう。まずはwhile文と同じように配列を用意して、次にfor文を書いていきます。
while文では、変数iに0を代入するという定義付けが必要でしたけれども、ここではそれを書かなくてもプログラムを作る事が出来ます。
配列を用意した次の行で書くfor文で、「変数に配列のデータを繰り返し入れていく」という処理を書きます。
そして、それを表示・出力する処理をputsメソッドで用意したら、完成です。
実際に書くと、このようになります。

実行すると、このように表示・出力されます。

わかりやすく、while文とfor文を同時にプログラミング・コーディングして、出力させてみます。


出力結果は同じですが、for文の方が書く分量が短くてスマートな感じが致します。
配列を順繰りに出力させる繰り返し処理の場合は、while文よりもfor文の方がすっきるする事が把握出来ますでしょうか。

プログラミングする際、同じ出力や処理でも上手に使いこなすことが肝要である
今回は、正信偈に登場する七高僧に配列の中に入って頂き、順番に登場して頂く「正信偈七高僧プログラム」を作りながら、Rubyでよくつかわれる繰り返し処理「while文」と「for文」を学びました。while文もfor文も、Rubyではよく見かけるものであり、よく使われます。
どちらも繰り返し処理という共通点はありますが、使い勝手が違っており、それぞれの特徴を把握して使い所を見極めると、短い分量で効率良くプログラムを書く事が出来ます。
と、偉そうに言っている私ではありますが、今も全然使い所で使いこなせておりませんがね、精進の日々で御座います。
今回と関連する事柄として、timesメソッドについてもお伝えしております。
参照記事:「Rubyで仏教|timesとifで「十念」をプログラミングしてみた」
どの場面ではどの繰り返し処理が、一番書きやすくて効率良くプログラミング・コーディングできるか。
それを考えながらプログラミング学習をする、実際にコードを書いてみる事も、プログラミング独学習をして上達していく上で、大切な要素の一つであろうかと存じます。
while文やfor文、times文等の違いを、色々実験しつつ比較検証しながらコードを書いてみる事は、それぞれの特徴を把握出来る具体的な方法ですし、上達も早まる事でありましょう。
while文、for文、times文の他にもある繰り返し処理文を学び、色々と試しながら、プログラミングスキルを上達して頂ける一助として頂けましたら、嬉しゅう御座います。
合掌、礼拝