「プロを目指す人のためのRuby入門」読書メモ #5
配列等をイテレーターでループさせて処理を行う時、ループが入れ子構造になってしまうことがあります。以前ですとループからの脱出方法をbreakしか知らなかった私は入れ子構造を作ることに結構抵抗を感じていました。
しかし本書を読んでthrowとcatchという便利なキーワードを知りました。そもそも入れ子は全体の処理の可読性がかなり下がるので極力使用したくないですが、必要な場合もあります。特に競技プログラミングなどの時間制限が設けられている場合は。試しに使ってみると以下のような感じでしょうか。
outer_array = [1,2,3,4,5]
inner_array = ["a", "b", "c", "d", "f"]
catch :escape do
outer_array.each do |outer_val|
inner_array.each do |inner_val|
puts "#{outer_val}: #{inner_val}"
throw :escape if (outer_val == 4) && (inner_val == "c")
end
end
end
上記では"4 : c" でeachイテレーターを抜けます。ぱっとは思いつきませんが競技プログラミングで使いどころ結構ありそうです。
*
余談になりますが本書の作者の伊藤淳一さん、ブログもやっていらっしゃいまして以下のエントリがとても面白かったのでシェア。
上エントリで詳細に説明されていますのでざっくり言うと「オープンな環境での(仮に基礎的な内容だったとしても)質問はメリットしかない」という内容。また以下のツイートも紹介されていて、なるほどなーと。
質問って私も結構勇気がいるのですが、質問をよくする人って周りでも優秀な人が多い気がします。これは意識の問題だと思いますので、今後はオープンな場所での質問をどんどんしていきたいと思います。
この記事が気に入ったらサポートをしてみませんか?