Ruby 2.6先行チェック: rangeの終端をnilまたは省略できる(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Ruby 2.6先行チェック: rangeの終端をnilまたは省略できる(翻訳)

Ruby 2.6シリーズの記事です。Ruby 2.6.0-preview2は最近リリースされました

Ruby 2.6より前は、無限ループでインデックスを使いたいときはuptoRangeFloat::INFINITYを使うか、Numeric#stepを使う必要がありました。

Ruby 2.5.0の場合

irb> (1..Float::INFINITY).each do |n|
irb*   # ここにロジックを置く
irb> end
irb> 1.step.each do |n|
irb*   # ここにロジックを置く
irb> end

Ruby 2.6.0の場合

Ruby 2.6では、無限ループのrangeでこれまで必須だった第2引数を省略可能にしたことで読みやすさを向上させました。rangeの第2引数が指定されていない場合はnilと解釈されるので、(0..)(0..nil)はRuby 2.6で同じ意味になります。

Ruby 2.6で無限ループをrangeで書く

irb> (0..).each do |n|
irb*   # ここにロジックを置く
irb> end
irb> (0..nil).size
=> Infinity
irb> (0..).size
=> Infinity

Ruby 2.5ではrangeの引数にnilを取れないので、(0..nil)ArgumentErrorになります。

irb> (0..nil)
ArgumentError (bad value for range)

関連記事

Ruby 2.6先行チェック: `String#split`がブロックを取れる(翻訳)

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ