みなさんこんばんは!!プログラミングしてますか?
今日は昨日のfunctionの続きです。
いつもの通り和訳しながらまとめてるので間違った解釈があるかもしれませんのでご指摘お待ちしております。
そういえば前回まで"argument"をカタカナでオーギュメントって書いてましたけど、発音を調べてみたらどっちかというとアーギュメントだったので今回からそう書きます。
まずはタプル(tuple)からいきましょう。
あの最近よく広告が出てくるマッチングアプリじゃないですよー。
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
}else if score < min{
min = score
}
sum += score
}
return (min, max, sum)
}
let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9])
print(statistics.sum)
// Prints "120"
print(statistics.2)
// Prints "120"
コードの1行目の"(min: Int, max: Int, sum: Int)"の部分がタプルですね。
タプルを使うと複数の値をまとめる事ができます。
ファンクションから複数の値を返してもらいたいときに便利ですね。
タプルを使ってパラメーター名(アーギュメントラベル)とその型を書くときは(scores: [Int])のように書くようですね。
で、その後に今回の目玉タプルがきてますね。
普通に変数を宣言するときは"var min = 0"のように宣言しますが、今回は"var min = scores[0]"となってますね。
その後にfor-in構文でアーギュメント"scores"が"score"に代入されて、maxとscoreを比べてscoreのほうが大きければmaxにscoreの値が代入されるというのを繰り返して、もしscoreのほうが小さければminにscoreを代入するんですね。
更にその後にsum += scoreでscoreの合計を出して、最後にmin,max,sumの値を返します。
タプルの中の値には左から0,1,2,3...と番号が割り振られていてこの場合"min"が0、"max"が1、"sum"が2です。
タプルの中の値を使いたいときは、"min"とか"max"とか"sum"のような名前で扱う事もできますし、この番号でも扱う事ができます。
次はネスト(nest)です。
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
これは僕的にまだわからない概念ですが、functionはネスト(nest)される事ができます。
ネストされたfunctionは外側のfunctionの中で宣言されたアクセスするための変数を持っています。
functionの中にfunctionを書けるってことなのかな。わかんない。
今回はfunctionを宣言するときにパラメーター名とかがなくて()になってますね。
返り値の型はIntですね。
最初のfunctionで関数yを最初の値を10で宣言して、そのfunctionの中にaddという名前のfunctionを宣言してyに5を足してyにその値を代入するという命令を書いてますね。
で、addを実行してyの値を返しなさいというコードを書いて最後にreturnFifteenを実行すると"15"という値が返ってくるわけですね。
Apple曰くfunctionはファーストクラスな型らしいです。
func makeIncrementer() -> ((Int) -> Int)
{
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
これはfunctionは他のfunctionをそのファンクションの値として返すことができるかららしいです。
((Int) -> Int)ってなんだ?ここに書かれるのは返り値の型ではないのか?
makeIncrementerの型がIntで返す値もIntって意味か?
makeIncrementerの中のfunction"addOne"は前回やった形ですね。
1 + numberをしてmakeIncrementerにaddOneを返すという命令を書いて、関数incrementを宣言してincrementにmakeIncrementerを代入してますね。
で最後にincrementは7という値を持ってるというと1を足して値を返してくれるわけですね。
だんだん難解になってきましたが、ここを乗り越えればきっと温かい春がやってきます。
諦めずに理解していきましょう。
次回も引き続きfunctionについてです。
おやすみなさい。