重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

すみません。「while式の条件にtrueを指定してもbreakを使えば無限ループになるとは限らない」の所で、breakを使っても無限ループが起こる事があるのでしょうか?
という所(サイトから引用)で、

counter = 0
while true
p counter
break if counter < 0
counter += 1
end

というrubyのプログラムに、疑問が2つほどあって、
疑問①プログラムを強制終了するには、ctrl +Cで、いいのでしょうか?
疑問②「関数の戻り値などを受けても同様です。」というのは、どういう意味でしょうか?
以上2点について、教えて頂けると幸いです。よろしくお願いします!
で、例えば、以下のrubyプログラムでは、「関数の戻り値」については、
def test
1
end
puts 0 < test()
では、「関数の戻り値」は、「test()の1」の事でしょうか?教えて頂けると嬉しいです。
追記(説明不足なら参照して下さい。)

「雑ですが、こういうのはbreakがあっても無限ループになりますよね。

counter = 0
while true
p counter
break if counter < 0
counter += 1
end

breakで実質的に終了条件を入れても、その条件を永遠に満たさない可能性があれば、無限ループになります。
今回はcounter < 0にしましたが、関数の戻り値などを受けても同様です。」
という形で書いてありました。質問文を正確に書かなかった事を申し訳なく思います。
で、疑問なのですが、
疑問①の追加質問
一般的に、rubyプログラムを強制終了するためには、どうすればよいのでしょうか?
疑問②の補足
以下の「・・・・」の部分を、補足した上で、改めて「関数の戻り値などを受けても同様です。」というのは、どういう意味でしょうか?という疑問を再度させて頂きます。

質問者からの補足コメント

  • No.2です。
    迅速な回答ありがとうございます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2025/03/23 18:15
  • No.3です。
    迅速な回答ありがとうございます。

    No.3の回答に寄せられた補足コメントです。 補足日時:2025/03/23 19:40

A 回答 (4件)

>「testの戻り値(関数の戻り値)」は、「ret」の事で合っていますか?



回答:
はい、そうです。
    • good
    • 0
この回答へのお礼

迅速な回答ありがとうございました。

お礼日時:2025/03/23 20:09

>疑問③No.2の回答で、


・・途中省略・・
>という様なRubyプログラムを作成すれば良いという事でしょうか?

回答:はい、そうです。


>疑問④「この場合counterの代わりに関数の戻り値を使用しています。」の所を、分かりやすく教えて頂けると嬉しいです。

回答:
元のプログラムは
counter = 0
while true
p counter
break if counter < 0・・・・①
counter += 1
end

となっています

それを
while true
ret = test・・・②
p ret
break if ret < 0・・・・③
end

と書くと
①のcounter が③ではretで置き換わっています。
retは②で
ret=testとなっており
testの戻り値(関数の戻り値)が設定されています。
つまり、③では
①のcounterの代わりにtestの戻り値(関数の戻り値)を使用しています。
この回答への補足あり
    • good
    • 0
この回答へのお礼

つまり、疑問④の追加質問で、

「testの戻り値(関数の戻り値)」は、「ret」の事で合っていますか?

教えて頂けると幸いです。よろしくお願いします。

お礼日時:2025/03/23 19:44

>疑問①の追加質問


>一般的に、rubyプログラムを強制終了するためには、どうすればよいのでしょうか?

回答:
①コマンドプロンプトから実行している場合は、Ctrl+Cで強制終了できます。
②もしくは、コマンドプロンプトも含めて、タスクマネージャーで強制終了します。この場合は、コマンドプロンプトが終了します。

>疑問②の補足
>以下の「・・・・」の部分を、補足した上で、改めて「関数の戻り値などを受けても同様です。」というのは、どういう意味でしょうか?

回答:No1の回答で既に述べていますが、以下のような解釈も可能です。
counter = 0
while true
p counter
break if counter < 0
counter += 1
end
の代わりに

①下記のような関数を作成する
def test
何らかの処理を行う
処理の結果が正常なら、0を返す
処理の結果が失敗なら、-1を返す
end
②whileの式は以下のように書き換える
while true
ret = test
p ret
break if ret < 0
end

上記のように書くとtest内の処理が失敗するまで、繰り返しを行うように
なります。
この場合counterの代わりに関数の戻り値を使用しています。
この回答への補足あり
    • good
    • 0
この回答へのお礼

すみません。疑問が、又、新たに2つほど出来て、
疑問③No.2の回答で、
「①下記のような関数を作成する」と、「②whileの式は以下のように書き換える」の所は、

「def test
何らかの処理を行う
処理の結果が正常なら、0を返す
処理の結果が失敗なら、-1を返す
end
while true
ret = test
p ret
break if ret < 0
end」
という様なRubyプログラムを作成すれば良いという事でしょうか?
疑問④「この場合counterの代わりに関数の戻り値を使用しています。」の所を、分かりやすく教えて頂けると嬉しいです。

以上2点について、よろしくお願いします。

お礼日時:2025/03/23 18:14

以下の質問に関する回答です。


質問開始>>>>
counter = 0
while true
p counter
break if counter < 0
counter += 1
end

というrubyのプログラムに、疑問が2つほどあって、
疑問①プログラムを強制終了するには、ctrl +Cで、いいのでしょうか?
疑問②「関数の戻り値などを受けても同様です。」というのは、どういう意味でしょうか?
以上2点について、教えて頂けると幸いです。よろしくお願いします!
で、例えば、以下のrubyプログラムでは、「関数の戻り値」については、
def test
1
end
puts 0 < test()
では、「関数の戻り値」は、「test()の1」の事でしょうか?教えて頂けると嬉しいです。
<<<<質問終了

>関数の戻り値」は、「test()の1」の事でしょうか?教えて頂けると嬉しいです。
回答:
はい、その通りです。

>疑問①プログラムを強制終了するには、ctrl +Cで、いいのでしょうか?

回答:
はい、それで良いです。

>疑問②「関数の戻り値などを受けても同様です。」というのは、どういう意味でしょうか?

回答:
以下のようなことと考えます。
0の代わりに関数の戻り値を使用する。
def test
0
end
のようになっていた場合
でtest()の結果は、必ず 0になります。

従って
break if counter < 0
と書く代わりに
break if counter < test()
と書いても同じことになります。

又、以下のように書いても同じことになります。
ret = test()
break if counter < ret
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A