公式ドキュメントの sigs の部分だけ触ってみた
他に NAMES = T.let(["Nelson", "Dmitry", "Paul"], T::Array[String])
といった書き方もできる のでヨサソウ
何千行, 何万行とコードを書いて混沌としてきたコードベースに秩序をもたらすことができる...?
詳細は 公式ドキュメント 参照のこと
書いたコードと実行結果
say(message)
, message_length(message)
を持つ Hello
クラスに Sorbet のシグネチャ機能を導入してみる
# typed: true require 'sorbet-runtime' class Hello extend T::Sig # say メソッド: # message 引数の値が String で来て # メソッド 実行結果が String で返ることを期待 sig do params( message: String ).returns( String ) end def say(message) "Hello, #{message}" end # 上と同様 ここでは message_length メソッドの定義 sig do params( message: String ).returns( Integer ) end def message_length(message) message.length end end # クラスのインスタンス生成 hello = Hello.new # 以下 実際に値を渡して試してみる # # 例外発生でエラーになる # hello.say(10) # => Parameter 'message': Expected type String, got type Integer with value 10 (TypeError) hello.message_length(100) # => Parameter 'message': Expected type String, got type Integer with value 100 (TypeError) # # 正常実行できる # puts hello.say('World.') # => Hello, World.