概要
Represent failure with a benign vlaue
前提
Confident Rubyではメソッド内の処理を次のように分類しています。
・Collecting Inputs(引数チェック、変換など)
・Performing Work(主処理)
・Delivering Output(戻り値に関わる処理)
・Handling Failure(例外処理)
当記事は上記のうち、Delivering Outputに関する話です。
サンプルコード仕様
姓名をメンバにもつPersonクラスを作成します。
fullnameメソッドにより姓名を取得できます。
サンプル1は姓名どちらかがnilの場合に、fullnameメソッドはnilを返却します。
この場合、利用側が毎回nilチェックをする必要があります。
サンプル2は姓名どちらかがnilの場合に、fullnameメソッドは空文字を返却します。
この場合、利用側特別なチェックは必要ありません。
サンプルコードその1
class Person attr_reader :firstname, :lastname def initialize(firstname, lastname) @firstname, @lastname = firstname, lastname end def fullname return nil if firstname.nil? return nil if lastname.nil? "#{firstname} #{lastname}" end end [ {firstname: "太郎", lastname: "田中"}, {firstname: "一郎", lastname: "鈴木"}, {firstname: nil, lastname: nil}, ].each do |names| person = Person.new(names[:firstname], names[:lastname]) puts person.fullname.nil? ? "" : person.fullname end
出力
太郎 田中 一郎 鈴木
サンプルコードその2
class Person attr_reader :firstname, :lastname def initialize(firstname = '', lastname = '') @firstname, @lastname = firstname, lastname end def fullname "#{firstname} #{lastname}" end end [ {firstname: "太郎", lastname: "田中"}, {firstname: "一郎", lastname: "鈴木"}, {firstname: nil, lastname: nil}, ].each do |names| person = Person.new(names[:firstname], names[:lastname]) puts person.fullname end
出力
太郎 田中 一郎 鈴木