69488


Swift に限らずですが `<T>` のような ジェネリック型？ の意味がさっぱりわからないのですが いつ使うのですか？


CC BY-SA 4.0
2020-08-12T08:24:34.557
69478
2020-08-12T11:21:16.510
2020-08-12T11:21:16.510
19110
39481
question
swift
Swift の <T> のような記法はいつ使うものですか？


配列(Array)がもっともわかりやすい例だと思います。

Swiftは静的型付けですので、型を書いてやらなければなりません（一部`型推論`が効くので型を書くことを省略できる場合もあります）。

ここで配列を定義したいとします。  
配列は`Array`という`型`です。  
はい！型が決まったのでめでたしめでたし！ **とはなりません** 。

配列というものは内部にデータを持ちます。このデータの型を決めてやることが重要となります。

内部に`Int`型しか持たない配列を作るとなるとこの型は `Array<Int>`です。

でも、ちょっと待ってください。別の`Array型`の変数は`Int`の集合ではなく`Double`の集合として定義したいかもしれません。そういうときの型は
`Array<Double>` となります。

さて、上記は、`Array型`を使う側の目線で書いています。`Array型`自体を作る人はどのように`Int`でもいいし`Double`でもいいしというようなことをプログラム上で表現すればよいのでしょうか？
ここで登場するのが`ジェネリクス`です（多くの場合は `<T>`
として表されていますが、`T`でなくてもかまいません）。`Array型`自体を作る人は、`ジェネリクス`として型はなんでもこい！ということを表現しておくのです。

ジェネリクスの `<>` で囲まれた部分は `Type Parameters` です。

`Hoge<T>` と `Hoge<Int>` は、関数でいうところの、仮引数と実引数の対応と似たようなものと考えることができます。

コメントを受けての追記:

> ありがとうございます ちなみに[Int]とのちがい Tはなんですか？

プログラムの世界には、シンタックスシュガーと呼ばれるものがあります。  
`Array<Int>`のシンタックスシュガーが`[Int]`です。

シンタックスシュガーというのは、長いものを短くかける手法です。（`[Int]`のほうが、`Array<Int>`よりもプログラマーが文字を打つ量が減ってうれしいということです。書くだけでなく文字数が少ないほうが、読み手も楽であるという考え方もあります。結局、`Array<Int>`と`[Int]`は同じ意味です）


CC BY-SA 4.0
2020-08-12T10:25:42.050
69488
2020-08-12T10:50:01.893
2020-08-12T10:50:01.893
9008
9008
69478
answer