みなさんこんにちは。
段々と寒さが増してきましたね。
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool{
for item in list{
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition: lessThanTen)
これは10より小さい値の数が”numbers”に含まれているときにTrueを返すプログラムでしょうか。
“if condition(item)”がいまいちピンとこないです。
“func lessThanTen”のところで10と比べて小さい値があるときにTrueを返すというのはなんとなくわかります。
このコードが意味するのはfunctionがclosureの役割を果たすということらしいです。
ここで深追いしすぎると先に進まなくなってしまいそうなのでこれぐらいにしておきます。
func hasAnyMatches(list: [Int],condition:(Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition: lessThanTen)
numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result
})
closureをもっと簡潔に書く方法があるらしいです。
もしclosureの型がすでに分かっている場合、パラメーターの型と返り値の型のどちらか、もしくはその両方を省略することができます。
一文だけのclosureは暗黙的に値を返してくれます。
//よくわからん。
func hasAnyMatches(list: [Int],condition:(Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition: lessThanTen)
let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)
とても短いclosureに対して特に役に立つのが、パラメーターの番号の代わりにパラメーター名で参照することだそうです。
closureがfunctionに対して一つのアーギュメントだというときには完全にカッコ()を省くことができるそうです。
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition:lessThanTen)
let sortedNumbers = numbers.sorted { $0 > $1 }
print(sortedNumbers)
$マークが出てきたり.mapとか見たことない記述が出てきて厄介ですね。
だんだんわけがわからなくなってきましたがこれはとりあえずSwift Tourだということなので適当に見ていきましょう。
こんかいのまとめは、ざっくりとfunctionはクロージャーの役割をはたすことと、その記述をするときにもっと簡単な書き方がありますよーていうことですかね。
そのうち意味がわかるようになると思うのでここで諦めず進んでいきましょう。