スタック・オーバーフロー Asked on January 5, 2021
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]
は同じ意味です)
Correct answer by shingo.nakanishi on January 5, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP