tldr
困ったこと
- TS, Scala, Kotlinっぽくジェネリクス(型引数)を書いたら意味不明なエラーが出る(UndefVarErrorとか言うから使う側のエラーかと思ってた)
- そもそもジェネリクス相当の機能の名前がわからなかった
答え
Parametric Methodというらしい。
宣言の前半にジェネリクス宣言をする言語が多いので、珍しい後置型の宣言だ。
function first(v::Vector{T})::T where {T}
慣れ親しんだ諸言語での書き方
Javaの総称型(Generics)
初めて触ったジェネリクスはこれ。久々なので、文法が怪しかった。
参考 https://www.ne.jp/asahi/hishidama/home/tech/java/generics.html#h2_method_T
public static <T> T first(T[] arr) {
Scalaの型パラメーター(Type Parameter)
型パラメーターは引数らしい語順で宣言するので、一番しっくり来る気がする。[]
を使うのが独特。
def first[T](arr: Array[T]): T =
Kotlinのジェネリック関数
fun <T> first(arr: Array<T>): T {
Typescriptのジェネリック関数
意外にもScalaとそっくりな語順になっている。
function first<T>(arr: Array<T>): T {
無名関数(ラムダ式)にもジェネリクスがつけられるのが、地味にありがたい。
const first = <A>(a: A[]): A => a[0]
その他の言語
有名所ではRustのジェネリクス、C++のテンプレート、Haskellの型引数などがあります。
(困っている人に見つけられるように類義語を列挙しています)