概要
Use built-in conversion functions
前提
Confident Rubyではメソッド内の処理を次のように分類しています。
・Collecting Inputs(引数チェック、変換など)
・Performing Work(主処理)
・Delivering Output(戻り値に関わる処理)
・Handling Failure(例外処理)
当記事は上記のうち、Collecting Inputsに関する話です。
詳細
状況
元の型がなんであれ、coreな型に変換したい場合。
例えばどのような入力でもIntegerを強要したい。
Float,nil,16進数の文字列など。
概要
RubyのCapitalizeされた変換関数を利用する。
例えばKernel#Array, Kernel#Integer
理由
メソッド内でcoreな型を利用する場合、変換関数を事前に利用すると最大のflexibillityをもたらす。
Capitalizeされた変換関数の特徴
・冪等性(idempotent)がある。対象の型でなければ変換結果を返却する。対象の型であれば元のオブジェクトをそのまま返却する。
・to_xxx系の変換メソッドよりも対応範囲が広い
サンプルコード仕様
様々な入力を変換関数で配列に変換して、各要素に-hogeを追加して標準出力する。
サンプルコード
require 'pp' def each_hoge(arrayify) array = Array arrayify puts "@@@@@@@@@@#{arrayify.class}@@@@@@@@@@@@" array.each do |value| puts "#{value}-hoge" end puts "@@@@@@@@@@#{arrayify.class}@@@@@@@@@@@@@" end class Numbers def initialize(*args) @nums = args end def to_a @nums end end each_hoge([*1..3]) each_hoge("test") each_hoge({key1: :value1, key2: :value2}) each_hoge(Numbers.new(1, 2))
出力
@@@@@@@@@@Array@@@@@@@@@@@@ 1-hoge 2-hoge 3-hoge @@@@@@@@@@Array@@@@@@@@@@@@@ @@@@@@@@@@String@@@@@@@@@@@@ test-hoge @@@@@@@@@@String@@@@@@@@@@@@@ @@@@@@@@@@Hash@@@@@@@@@@@@ [:key1, :value1]-hoge [:key2, :value2]-hoge @@@@@@@@@@Hash@@@@@@@@@@@@@ @@@@@@@@@@Numbers@@@@@@@@@@@@ 1-hoge 2-hoge @@@@@@@@@@Numbers@@@@@@@@@@@@@