今回はノンジャンルで試してみます。
literal Expression
- 行数とかがわかります。
literalExpression
import Foundation
func literalExpression() {
print("__FILE__",__FILE__)
print("__LINE__",__LINE__)
print("__COLUMN__",__COLUMN__)
print("__FUNCTION__",__FUNCTION__)
}
literalExpression()
結果
__FILE__ <EXPR>
__LINE__ 5
__COLUMN__ 24
__FUNCTION__ literalExpression()
-
__FILE__
は、praygroundで実行してるからでしょうか?
参照渡し
- 個人的にはどこがどう変わったかわかりづらいので、いざというとき以外はあんまり使わないですけどね。
参照渡し
func callByReference(inout a: Int) {
a += 10
}
var a = 1
print("before:",a)
callByReference(&a)
print("after:",a)
- inoutというのが参照渡しですよっていうことらしいです。
結果
before: 1
after: 11
- 参照渡しですよって明示するほうがfinalとかより良いと思います。
ジェネリクス
総称型ってやつですね。
GenericFunction
func swapVal<T>(inout a: T, inout _ b: T) {
let temp = a
a = b
b = temp
}
if true {
var a = 123;
var b = 789;
swapVal(&a, &b);
print(a,b)
}
if true {
var a = "abc";
var b = "xyz";
swapVal(&a, &b);
print(a,b)
}
結果
789 123
xyz abc
- まぁふつーですかね。
値の比較が可能 Comparable
- ジェネリクスの型の絞込ってことなんですかね?
- Tが比較可能なものという縛りをかけられます。
値の比較が可能
func genericCompare<T:Comparable> (a:T,_ b:T)->T {
let c:T = a > b ? a : b
return c
}
print(genericCompare(10,10))
print(genericCompare(1,2))
print(genericCompare(1.0,-2.0))
print(genericCompare("abc","bcd"))
結果
10
2
1.0
bcd
値の==が可能 Equatable
- Tが==のチェック可能なものという縛りをかけられます。
値の==が可能
func genaricSame<T:Equatable> (a:T,_ b:T)->T {
let c = (a == b) ? a : b
return c
}
print(genaricSame(10,10))
print(genaricSame(1,2))
print(genaricSame(1.0,-2.0))
print(genaricSame("abc","bcd"))
結果
10
2
-2.0
bcd
- Comparable,Equatableの他にはなにかあるんでしょうか??
まとめ
- ジェネリクスは宿題が多くありそうです。
- ジェネリクスにwhereとかもあるようで
- Comparable,Equatableのような〜ableな指定があるかどうかも調べなきゃ...
今日はここまで
- 次はジェネリクスをもうちょっと調べるつもりです。