Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
数値.even? / odd? / zero? / between? / clamp
整数・数値が持つ判定メソッドです。偶奇・ゼロ判定・範囲判定など、条件分岐の記述を簡潔にします。
構文
# 偶数かどうかを判定します。 整数.even? # 奇数かどうかを判定します。 整数.odd? # ゼロかどうかを判定します。 数値.zero? # 正の数かどうかを判定します。 数値.positive? # 負の数かどうかを判定します。 数値.negative? # min 以上 max 以下かどうかを判定します。 数値.between?(min, max) # min と max の間に収める(クランプ)。 数値.clamp(min, max) # 無限大かどうかを判定します(Float のみ)。 浮動小数点数.infinite? # NaN(非数)かどうかを判定します(Float のみ)。 浮動小数点数.nan?
メソッド一覧
| メソッド | 概要 |
|---|---|
| even? | 偶数のとき『true』、奇数のとき『false』を返します。整数のみ使用可能です。 |
| odd? | 奇数のとき『true』、偶数のとき『false』を返します。整数のみ使用可能です。 |
| zero? | 値がゼロのとき『true』を返します。整数・浮動小数点数の両方に使えます。 |
| positive? | 正の数のとき『true』を返します(ゼロは含みません)。 |
| negative? | 負の数のとき『true』を返します(ゼロは含みません)。 |
| between?(min, max) | min以上max以下のとき『true』を返します。 |
| clamp(min, max) | 値をmin〜maxの範囲に収めて返します。範囲外なら最も近い端の値を返します。 |
| infinite? | 正の無限大なら『1』、負の無限大なら『-1』、それ以外は『nil』を返します(Floatのみ)。 |
| nan? | NaN(非数)のとき『true』を返します(Floatのみ)。 |
サンプルコード
# even? / odd?
puts 4.even? # true
puts 7.odd? # true
puts 0.even? # true(0は偶数)
# zero? / positive? / negative?
puts 0.zero? # true
puts (-5).negative? # true
puts 3.positive? # true
# between?: 範囲の判定。
puts 5.between?(1, 10) # true
puts 15.between?(1, 10) # false
# clamp: 値を範囲内に収めます。
puts 5.clamp(1, 10) # 5(範囲内なのでそのまま)
puts 0.clamp(1, 10) # 1(最小値に設定)
puts 15.clamp(1, 10) # 10(最大値に設定)
# 実用例: ゲームのHP管理(0〜100の範囲に収める)。
hp = 120
hp = hp.clamp(0, 100)
puts "HP: #{hp}" # HP: 100
# infinite? / nan?: Float 特有の状態チェック。
puts (1.0 / 0).infinite? # 1(正の無限大)
puts (-1.0 / 0).infinite? # -1(負の無限大)
puts (0.0 / 0).nan? # true(NaN)
概要
Rubyの慣例として、真偽値を返すメソッドには末尾に「?」を付けます。これらのメソッドを使うことで、条件式が自然な英語に近い形で書けます(例: 『if n.even?』)。
『clamp』はスライダーUIの値調整やゲームのステータス管理など、値を特定の範囲に制限したい場面で非常に便利です。Ruby 2.7以降では範囲オブジェクトも引数に使えます(例: 『n.clamp(1..10)』)。
『even?』『odd?』は整数(Integer)にしか使えません。浮動小数点数に呼び出すと『NoMethodError』が発生します。型の確認が必要な場合は事前に『Integer(n)』などで変換してください。
整数の反復処理は『数値.times / upto / downto』を、数値の丸め処理は『数値.abs / round / ceil / floor』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。