StrongTypingを使用することで、Railsアプリのモデルのインターフェイスなどに手軽に強い型付けを導入できる。またその結果、メソッドの仕様をコード中にドキュメント的に記述しておくことができる。
StrongTypingのインストール
Gemfile に以下を記述して bundle install を実行。
gem 'strongtyping'
セットアップ
強い型付けを導入したいクラスにStrongTyping
モジュールをインクルードしておく。
class Person
include StrongTyping
引数が期待している型をドキュメント的に記述する
StrongTyping
をインクルードすることで、#expect
で引数が期待している型をチェックできるようになる。
class Person
include StrongTyping
...
def name=(name)
expect(name, String)
@name = name
end
...
こう記述することで、引数name
にString
オブジェクト以外が渡された場合にArgumentTypeError
が投げられるようになる。
> person = Person.new
=> #<Person:0x0000010cd7a980>
> person.name=1
StrongTyping::ArgumentTypeError: Expecting String as argument 1, got Fixnum
> person.name="takkanm"
=> "takkanm"
複数の型が渡ってくることを許す場合には、以下のように配列で許容する型のリストを指定することができる。
def foo(a)
expect(a, [Integer, String])
...
また、引数が複数ある場合には、以下のような感じで記述する。
def foo(a, b)
expect(a, String, b, [String, NilClass])
...
チェックしてくれるのはもちろん、それぞれの引数に何が入ってくることを期待しているかを他の開発者に伝えるときにも便利。