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

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

ただいまの
回答率

88.10%

Rubyでの繰り返し文

解決済

回答 6

投稿

  • 評価
  • クリップ 0
  • VIEW 944
退会済みユーザー

退会済みユーザー

こんにちは

Rubyで繰り返し文を書きたいのですが
loopやWhileでなく

for(a =0;; a++)のように変数を増やしながらbreak条件を満たすまでループしたいのですが

loop{
 a += 1

}


とするのが現実的なんでしょうか?

よろしくお願いします

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+4

ループ条件が、aと直接関係ないならお書きの物で良いかと思いますが、ループカウンターをメソッドに提供して欲しいなら、

0.upto(Float::INFINITY) do |a|
  ~~~
  break if ~~~
  ~~~
end

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

少しひねった書き方かもしれませんが、こんなこともできます。

# 1つ捨てる必要がある
# (1)は「1から開始」の意味
loop.with_index(1) do |_,i|
 # 中身は省略
end

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

現実的、というのをどう考えるかだと思いますが、例示の loop { ... } も良いと思いますよ。
『Ruby 的なコード』、ということなら、考えている要件を書いてもらうと色々と例示してもらえるのではないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

参考情報

↑の回答の step をつかった例を試してみました。

a.rb

p 1.step.size

0.step do |i|
  puts i
  break if i > 3
end


実行結果

$ ruby a.rb
Infinity
0
1
2
3
4

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

i = 0; loop{ break if i > 9 ; i += 1
    puts i
}
int i;
for ( i = 1; i < 11; i += 1 ) {
    printf("%d \n",i);
}

「forのように」ということでしたら、上のコードのような書き方も可能です。
ただし、カウンタ変数の処理タイミングが、C言語のfor文と異なるので注意してください。
上コードは両方とも1から10まで表示するので、もし実際に使うときは挙動を把握しましょう。

メリットは、カウンタ変数の処理の順番が、C系のforに似ているのと、
ループの処理が一行にまとまっているという点です。
デメリットは、手続き的だとか、マルチステートメントだとか。

まあ、あまりRubyっぽくない微妙な書き方ですが、「だから教えない」ではなく、
回答者の方が取捨選択できるように一応提示しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-3

コンピュータ言語はマニュアルを確認するのが王道です。
Ruby 2.3.0 リファレンスマニュアル > 制御構造 for

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/18 20:05

    Rubyのfor文には、他言語のようなfor(;;)文というのがありません。いわゆる範囲for文のみが存在します(そして、実体はeachが呼び出されるだけです)。マニュアルのfor文の項目をどれだけ読んでも、質問者さんが知りたい回答にはたどり着けないと思います。どうして、マニュアルを読めば答えがわかるのか考えをお聞かせ下さい。この回答では、Rubyにも詳しくなく、参照先のマニュアルも確認せずに、条件反射的にマニュアルを読めと言っているだけです。

    キャンセル

  • 2016/11/20 07:58

    すみません、完全はずしていました。

    キャンセル

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

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る