[Swift] 関数定義

Swiftでも関数とオブジェクトはもちろんあります。 関数定義はfuncキーワードから始まります。 ```swift `gutter:true; // 関数宣言はfuncから始まる。戻り値は -> の後に記載 func greet(person: String, day: String) -> String { return "Hello \(person), today is \(day)." } // call する時にはラベルの記載は必須 // 関数宣言の際に、_を書いておくと呼び出す時にラベルを省略できる // (外部引数名を省略する場合は"_"を書く) print(greet(person:"Alice", day:"Monday")) // 関数はタプルを返すことも可能 func calclateStatistics(scores: [Int]) -> (min:Int, max:Int, sum: Int) { var min = scores[0] var max = scores[0] var sum = 0 for score in scores { if min > score { min = score } else if max < score { max = score } sum += score } return (min, max, sum) } let statistics = calclateStatistics(scores: [5, 7, 13, 2, 17]) print(statistics.max) print(statistics.2) ``` 関数を定義して、callする時にはラベルも記述する必要があります。 明らかにラベルが不要な場合は定義する時に_キーワードを使うと使うときに省略する事ができます。 タプルを返す事もできるので、複数の値を返したいときに使えます。 ### 関数を返す関数 また、関数を返す関数を定義する事もできます。 ```swift `gutter:true; // 関数はfirst-classタイプなので、関数が関数を返すことも可能 func makeIncrementer() -> ((Int) -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne } var increment = makeIncrementer() print(increment(7)) // 引数として関数を受けることも可能 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] print(hasAnyMatches(list:numbers, condition: lessThanTen)) // true ``` 関数はclosureの特別ケースらしいので、リストに対して処理するmap関数などに渡せます。 この辺りはpythonとかrubyとかと似ています。 ```swift `gutter:true; // 関数はclosureの特別ケースでもある let tmpNumbers = numbers.map({ (number: Int) -> Int in let result = 3 * number return result }) print(tmpNumbers) // Closureのタイプなどが決まっている場合は簡潔に書くことも可能 let mappedNumbers = numbers.map({number in 3 * number}) print(mappedNumbers) ``` map関数などが使えるのは嬉しいです。

0 件のコメント :

コメントを投稿