代々木で働く19歳エンジニアのブログ

思ったこととか、技術的なこと書きます。

Swift ざっくり文法 (3)

  • 関数定義
func dice() -> Int {
    let num = 1 + arc4random_uniform(6)
    return Int(num)
}
 // メソッド定義(戻り値がない関数をメソッドと呼ぶ)
func hello() {
    print("hello")
}

or

func hello() -> Void {
    print("hello")
}
  • guard-else ( 条件を満たさないときに実行される )
func half(num: Double){
-    if (num < 10) {
+    guard num>=10 else {
        return
    }
    let halfNum = num/2
    print("\(num)の半分は\(halfNum)")
}

half(num: 25) // 25.0の半分は12.5
half(num: 9)
half(num: 12) // 12.0の半分は6.0
  • defer statement ( 処理(ブロック)を抜ける前にかならず実行する )
func half(num: Double){
+    defer {
+        print("計算終了")
+    }
    guard num>=10 else {
        return
    }
    let halfNum = num/2
    print("\(num)の半分は\(halfNum)")
}

half(num: 25)
// 25.0の半分は12.5
// 計算終了  
half(num: 9)
// 計算終了 <- half(num: 9)は中断されるが、defer文で書いているので実行される 
half(num: 12)
// 12.0の半分は6.0
// 計算終了
  • 可変長引数
func sum(numbers: Double...) -> Double {
    var total: Double = 0.0
    for num in numbers {
        total += num
    }
    return total
}

print(sum(numbers: 4, 5, 6, 7))
  • default引数
- func pricel(ninzu: Int, tanaka: Int) -> Int {
+ func pricel(ninzu: Int = 1, tanaka: Int = 250) -> Int { 
    let result = tanaka * ninzu
    return result
}

print(pricel(ninzu: 3, tanaka: 1300))
  • Tupleを利用した複数の戻り値
- func pricel(ninzu: Int, tanaka: Int) -> Int {
+ func pricel(ninzu: Int, tanaka: Int, rate: Double) -> (hoge: Int, fuga: Double) {
    let result = tanaka * ninzu
+    let updatedResult = Double(result) * rate
-    return result
+    return (result, updatedResult)
}

- print(pricel(ninzu: 3, tanaka: 1300))
+ print(pricel(ninzu: 3, tanaka: 1300, rate: 1.8).hoge)
  • 関数の多重定義( 同名の関数でも引数名や引数の個数が違うと別の関数として扱われる。)
func calc(a: Int, b: Int) -> Int {
    return a+b
}

func calc (c: Int, d: Int) -> Int {
    return c*d
}

func calc(a: Int, b: Int, c: Int) -> Int {
    return (a+b)*c
}

print(calc(a: 2, b: 3)) // 5
print(calc(c: 2, d: 3)) // 6
print(calc(a: 2, b: 3, c: 4)) // 20
  • 外部引数名
- func pricel(ninzu: Int, tanaka: Int) -> Int {
+ func pricel(hoge ninzu: Int, fuga tanaka: Int) -> Int {
    let result = tanaka * ninzu
    return result
}

- print(pricel(ninzu: 3, tanaka: 1300))
+ print(pricel(hoge: 3, fuga: 1300))
  • 引数名なし
- func pricel(hoge ninzu: Int, fuga tanaka: Int) -> Int {
+ func pricel(_ ninzu: Int, _ tanaka: Int) -> Int {
    let result = tanaka * ninzu
    return result
}

- print(pricel(ninzu: 3, tanaka: 1300))
+ print(pricel(3, 1300))

reference from

https://www.amazon.co.jp/dp/4800711843