1. ホーム
  2. ruby

[解決済み] Rubyに「do ... while」ループはあるのか?

2022-03-22 09:33:10

質問

このコードを使って、ユーザーが名前を入力すると、プログラムは空の文字列を入力するまでその名前を配列に保存します(ユーザーは名前を入力するたびにEnterキーを押す必要があります)。

people = []
info = 'a' # must fill variable with something, otherwise loop won't execute

while not info.empty?
    info = gets.chomp
    people += [Person.new(info)] if not info.empty?
end

このコードは、do ... whileループにすると、よりきれいに見えるでしょう。

people = []

do
    info = gets.chomp
    people += [Person.new(info)] if not info.empty?
while not info.empty?

このコードでは、情報をランダムな文字列に割り当てる必要はない。

残念ながら、このタイプのループはRubyには存在しないようです。どなたか、もっといい方法を教えてください。

どのように解決するのですか?

注意事項 :

begin <code> end while <condition> はRubyの作者であるMatzによって否定されています。その代わりに彼は Kernel#loop は、例えば

loop do 
  # some code here
  break if <condition>
end 

ここで メールのやりとり 2005年11月23日の記事で、Matzはこう述べている。

|> Don't use it please.  I'm regretting this feature, and I'd like to
|> remove it in the future if it's possible.
|
|I'm surprised.  What do you regret about it?

Because it's hard for users to tell

  begin <code> end while <cond>

works differently from

  <code> while <cond>

RosettaCode wiki にも似たような話があります。

<ブロッククオート

2005年11月、Rubyの開発者であるまつもとゆきひろ氏は、このループ機能を惜しみ、Kernel#loopの使用を提案した。