ジェネリクス(Generics)の書き方
Genericsってそもそも何?
抽象化されたデータ型
と言われてもよくわかりませんよね・・・
例題
あるデータ(Int, String, Double)を指定数だけ配列化して戻すメソッドを作りなさい。
このような、お題、あなたならどうやって作りますか?
non_generics.swift
func getIntArray(num: Int, count: Int) -> [Int] {
var result = [Int]()
for _ in 0..<count {
result.append(num)
}
return result
}
func getStringArray(num: String, count: Int) -> [String] {
var result = [String]()
for _ in 0..<count {
result.append(num)
}
return result
}
こんな冗長なメソッドを作ってませんか!?
私もそうしてました・・・
でもGenericsなら引数と戻り値を抽象化して簡単に1メソッドで定義できます。
generices.swift
func getArray<T>(num: T, count: Int) -> [T] {
var result = [T]()
for _ in 0..<count {
result.append(num)
}
return result
}
Javaとかでよく見かけますが、今まで抽象化するより型を縛るイメージでした。
他にも色々な使い方があるかもしれません。
ちなみに<T>
はtypeという意味で慣例的に使われてますが、別になんでも良い(<A>,<B>,<C>
)そうです。
今後はバンバンGenerics活用して行きます!