3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Juliaでのジェネリクス的な関数の書き方(Parametric Methods)

Posted at

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の型引数などがあります。
(困っている人に見つけられるように類義語を列挙しています)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?