この記事はScala Advent Calendar 2022の19日目です.
Scalaではジェネリック型の変性(variance)は+
や-
で指定しますが, 他の言語(たとえば, C#, Kotlin)ではout
やin
だったりします. この記事では変性の意味を整理して, なぜScalaでは+
/-
の記号を使うのか説明します.
- 追記
- ただし, ここで説明している内容は基本的にC#やKotlinでも成立する(はずな)ので「なぜこれらの言語では
+
/-
の記号を使わないのか」を説明するものではありません. 個人的には+
/-
の方がわかりやすいと思うし,out
/in
の記法は扱っている概念が簡単であるかのような誤解を生む(悪く言えば騙す)のでどちらかと言うと嫌いです.