Rubyにgotoがない理由

大域脱出としてのgotoはcatchthrowで置き換えるようになっているから。

maxnum = 9
for x in 3..maxnum do
  catch :not_prime do
    for y in 2..x - 1
      handan = x.modulo(y)
      if handan == 0
        print x
        puts ":素数ではありません"
        throw :not_prime
      end
    end
    print x
    puts ":素数です"
  end
end

*1

RubyにはGoto文がありませんでした。Cとか多くの言語にあるのですが。素数かどうか判断のときに、言語の微妙さが出たようです。この他にもやり方は有るのかもしれませんが。

http://pub.ne.jp/isamrx72/?entry_id=1822436

「言語の微妙さ」に大人気なく反応してみた。コメントが書けなかったのでトラックバックっぽいURLに。届くかわかんないけど。

*1:久々にRubyでfor文書いたんでかなり違和感。自分ならRange#eachで書くところ。