概要
Use built-in conversion protocols
前提
Confident Rubyではメソッド内の処理を次のように分類しています。
・Collecting Inputs(引数チェック、変換など)
・Performing Work(主処理)
・Delivering Output(戻り値に関わる処理)
・Handling Failure(例外処理)
当記事は上記のうち、Collecting Inputsに関する話です。
詳細
状況
coreな型を利用した入力を確認したい。
例えばStringの入力を期待するメソッドを書く場合。
概要
Rubyの変換手続きを利用する。to_str,to_path.to_aryなど。
理由
提供するメソッドが受け入れることのできる入力の型をよりフレキシブルにする。
サンプルコード仕様
文字列に「だぜ!」を追加して標準出力する。
クラス固定でチェックした場合のサンプルコード
Stringクラスでチェックすると、Stringクラスでしか利用できません。
class Mrだぜ def だぜ(text) fail TypeError , "不正なデータ型 #{text.class}" unless text.is_a? String print "#{text}だぜ!" end end Mrだぜ.new.だぜ("田中") class Person attr_reader :name, :age def initialize(name, age) @name, @age = name, age end end tanaka = Person.new("tanaka", 43) # TypeErrorが発生 # Mrだぜ.new.だぜ(tanaka)
出力
田中だぜ!
ビルトインの変換メソッドでチェックした場合のサンプルコード
変換メソッドのto_strを利用することで、to_strさえ実装していれば
「だぜ」メソッドを利用できます。
class Mrだぜ def だぜ(text) text = text.to_str puts "#{text}だぜ!" end end Mrだぜ.new.だぜ("田中") class Person attr_reader :name, :age def initialize(name, age) @name, @age = name, age end def to_str @name end end tanaka = Person.new("tanaka", 43) Mrだぜ.new.だぜ(tanaka)