関数

トップページ » 関数

20 Jun 2014 00:56公開

※「関数」はまだ工事中です。まず「Swiftの全貌を探る」シリーズの記事を参考してください。

関数とクロージャーを紹介します。

関数とクロージャー

funcで関数定義します。

func greet(name: String, day: String) -> String {
 return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")

タプル(tuple)で複数の値を戻り値として返すことはできます。

func getGasPrices() -> (Double, Double, Double) {
 return (3.59, 3.69, 3.79)
}
getGasPrices()

可変数の引数は…で表現します。

func sumOf(numbers: Int...) -> Int {
 var sum = 0
 for number in numbers {
 sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)

関数のネストはできます。

func returnFifteen() -> Int {
 var y = 10
 func add() {
 y += 5
}
 add()
return y
}
returnFifteen()

関数はファーストクラスの型です。つまり、関数がそのものは値として別の関数を返すことができます。

func makeIncrementer() -> (Int -> Int) {
 func addOne(number: Int) -> Int {
  return 1 + number
 }
 return addOne
}
var increment = makeIncrementer()
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]
hasAnyMatches(numbers, lessThanTen)

関数は特殊なクロージャーです。
クロージャーは{ (…) -> … in … return … }で形のコードです。

numbers.map({
 (number: Int) -> Int in
 let result = 3 * number
return result
})

クロージャーの型が推測できるなら、もっとシンプルに書けます。

numbers.map({ number in 3 * number })

パラメータ名を省略して、変わりにパラメータの番号で引用することができます。

sort([1, 5, 3, 12, 2]) { $0 > $1 }

シリーズ

記事のリスト

  • 関数

レーティング

rating: 0+x

コメント

Add a New Comment
当サイトコンテンツライセンスについて個別な指定がなければCreative Commons Attribution-ShareAlike 3.0 Licenseをベースします。転載や引用は大歓迎です。但し、転載・引用・二次利用の場合は当サイト記事へのURLをリンクし出典を明記してください。各作品を大切にして下さい。 また、記事及びコメントを投稿する皆さまも上記のライセンスを理解した上投稿して下さい。 当サイトのコンテンツは皆さまの投稿で作成されますから、当サイトの意思を反映しておりませんが、第三者の知的財産権などの侵害がある場合、当サイトの運営担当にご連絡ください。