読者です 読者をやめる 読者になる 読者になる

Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Ruby | Collecting Inputs | Define your own conversion protocols

Confident Ruby Ruby

概要

Define your own conversion protocols

前提

Confident Rubyではメソッド内の処理を次のように分類しています。
・Collecting Inputs(引数チェック、変換など)
・Performing Work(主処理)
・Delivering Output(戻り値に関わる処理)
・Handling Failure(例外処理)

当記事は上記のうち、Collecting Inputsに関する話です。

詳細

状況

コンテキスト特定のセマンティクスの型の入力を確認する必要がある

概要

Rubyの組み込み変換手続きをまねた、新たな変換手続きを定義する

理由

第三者のオブジェクトのために、メソッドが必要とする形式の型に変換するための変換手続きを公開することによって、
メソッドをよりオープンに拡張できる。

サンプルコード仕様

フルネームを返却するメソッドを実装します。
引数には、first_name/lastnameの配列
または
内部にfirst_name/lastnameフィールドを持つPersonクラスを指定できるようにします。

サンプルコード

class Person
  attr_reader :first_name, :last_name, :age
  def initialize(first_name, last_name, age)
    @first_name, @last_name, @age = first_name, last_name, age
  end

  def to_full_name
    [first_name, last_name]
  end
end

def print_fullname(names)
  names = names.to_full_name if names.respond_to? :to_full_name
  puts "あなたは#{names.join(' ')}さんですね"
end

tanaka = Person.new("田中", "一郎", 43)

print_fullname ["佐藤", "太郎"]
print_fullname(tanaka)

出力

あなたは佐藤 太郎さんですね
あなたは田中 一郎さんですね