ブログ

読んで思い出す。忘れるために書く

sorbet gem でメソッドの入出力型をチェックする

公式ドキュメントの 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.

Links