質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

2600閲覧

Rubyのループ処理(for, while以外)の存在価値

FujinamiYuki

総合スコア16

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

2クリップ

投稿2015/02/25 00:57

Rubyではtimesやらuptoやら他の言語で見かけない独特のループ処理が存在していますが、実際によく使われ、しっかりと覚えておく必要があるものなのでしょうか?

当方、プログラミング言語におけるループといえば一般的に「for,while」を使うという認識であるため、可読性もそこまで向上しないように感じます。
というか上記の前提に基づくならばforやwhile使う方が可読性が高い気がしますが…

Ruby精通している皆様の意見を聞きたいです。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Ruby ではブロックでループ処理を行う事が一般的です。
0. ループする集合を用意する
0. 集合の要素を逐次引き出してブロックで実行する
繰り返し処理を行うための Enumerable モジュールのメソッドが充実していることからもそのことが分かるかと思います。

さて。 Integer#times メソッドや Integer#upto メソッドを使うようなループ回数を指定するだけの処理の場合には、たしかに for 文と変わらないように思えます。ですが、ブロックを使うので、普段の書き方と変えずにループを行えるのでとても楽に書けます(個人の意見です)。

Ruby は書く人が書きたいように書けることを目的にしている(と思っている)言語ですので、

しっかりと覚えておく必要がある

とは思いません。単純なループが Integer#times メソッドでも for 文でも書けることが Ruby のメリットだと思います。
ただし、 Rubyist の大半は for 文が書けないと思います(おそらく)。私も引数の順番が分かりませんw
また、 while 文よりも、 Kernel.#loop メソッドとそこから抜け出す break を組み合わせて使うことが私個人は多いです。

投稿2015/02/25 05:18

riocampos

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FujinamiYuki

2015/02/25 07:30

ご回答ありがとうございます。 他言語でもよくある制御構造はもちろん抑えつつも、(慣れれば)より簡潔に記載できますよって感じですね。
guest

0

Rubyでの.upto.timesといったブロックを取るループ処理は、数値オブジェクトから生えているただのメソッドなので、言語仕様の一部ではなく、極論を言えば自分で同様のメソッドを実装することも可能です。

Rubyは組みやすさを重視した言語ですので、自分でforループを書きたければそれでも構いませんし、定型的な処理なら標準ライブラリに用意してあるメソッドを使うことも可能、というスタンスではありますが、メソッド一発で実行できるようなループについてforwhileを使って自前で制御するのはあまり好まれない傾向にあります。

投稿2015/02/25 01:05

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FujinamiYuki

2015/02/25 01:14

ご回答ありがとうございます。 > Rubyでの.uptoや.timesといったブロックを取るループ処理は、数値オブジェクトから生えているただのメソッドなので upto, timesはメソッドだったんですね…よく理解しておりませんでした。 > メソッド一発で実行できるようなループについてforやwhileを使って自前で制御するのはあまり好まれない傾向にあります。 なるほど、使えるものは使おうぜ、というスタンスですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問