あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

型推論

基本的な(明示的に型を宣言しなくてもコンパイラが型を推論してくれる)型推論の内容のまとめ

  • 型宣言を省略できる場合
    1. 変数宣言時の型の指定
    2. 関数の戻り値の型の指定

関数の戻り値の型指定で例外として以下の場合は型の指定が必要になる。

    1. 関数内部で再帰呼び出ししている関数
    2. 関数内部で return で値を返している関数

あと、関数定義での引数の型指定も省略できない。

関数から返す値の型が違う場合は、各値の共通のスーパータイプになる。
String と Int を返す場合は、関数の戻り値の型は Any になる。
(普通はこんな変な書き方はしない。)

scala> def foo(bar: Int) = if (bar == 0) "zero" else bar
foo: (bar: Int)Any

戻り値が List 等の場合に型パラメータの型が違う場合も同様

scala> def foo1(bar: Int) = if (bar == 0) List("zero", "bar") else List(1, 2)
foo1: (bar: Int)List[Any]