2015年06月

関数は、"func 関数名(引数リスト)->戻り値型{...}"で定義する。引数リストは、"変数名:型"をカンマ区切りで指定する。

func plus(num1:Int, num2:Int) -> Int {
    return num1 + num2
}

println("1+1=\(plus(1,1))")     // "1+1=2"と表示

可変引数は、"nums:Int..."のように指定する。numsは配列になっていて次のように引数を扱える。

func printNums(nums:Int...)->Void {
    for num in nums {
        println(num)
    }
}

printNums(1,2,3,4,5)
// 1
// 2
// 3
// 4
// 5
// って表示される

関数はファーストクラスオブジェクトで数値と同じように関数の戻り値や引数に指定できる。

// plus関数を返す関数を定義
func makePlus()->((Int, Int)->Int) {
    func plus(num1:Int, num2:Int)->Int {
        return num1 + num2
    }
    return plus     // 関数を返す。
}
var plus = makePlus()

println("1+1=\(plus(1,1))")     // "1+1=2"と表示

関数に引数で関数をわたす例

func plus(num1:Int, num2:Int)->Int {
    return num1 + num2
}

func reduce(nums:[Int], calc:((Int,Int)->Int))->Int? {
    if nums.count == 0 {
        return nil
    }
    var ret = nums[0]
    for var i = 1; i < nums.count; i++ {
        ret = calc(ret, nums[i])
    }
    return ret
}

var sumOpt = reduce([1,2,3,4,5,6,7,8,9,10], plus)
if let sum = sumOpt {
    println("1~10の合計:\(sum)")       // "1~10の合計:55"と表示
} else {
    println("エラー")
}

そーいや、↑で使ったがOptional型についてまだ書いてないな。


このエントリーをはてなブックマークに追加
ブログランキング・にほんブログ村へ
にほんブログ村

忘れっぽい人のための正規表現チートシート - Qiita

これは、いいかも。
正直、たまにしか使わないから、きっちり覚えてないのよね。

このエントリーをはてなブックマークに追加
ブログランキング・にほんブログ村へ
にほんブログ村

switch文もC言語なんかと似ている。次のような感じだ。

let hoge = 10
var msg:String

switch hoge {
case 1:
    msg = "hogeは1"
case 10:
    msg = "hogeは10"
default:
    msg = "hogeは1,10以外"
}

println(msg)    // "hogeは10"と表示

if文とかと同様に、switch文の後の()はいらない。case文の最後のbreakは必要ない。(書いてもいい)あと、文字列変数でも条件わけできる。
C言語でbreakを書かなかった場合と同じ動作をするには、fallthroughを書く。
こんな感じだ。

let hoge = 10
var msg:String

switch hoge {
case 1:
    println("hogeは1")
    break   // ←書いてもいい
case 10:
    println("hogeは10")
    fallthrough
default:
    println("hogeは1,10以外")
}

// これを実行すると、
// hogeは10
// hogeは1,10以外
// と表示される。

caseで複数条件を指定するには、","で区切って指定する。

let hoge = 10
var msg:String

switch hoge {
case 1, 10:
    msg = "hogeは1または10"
case 2:
    msg = "hogeは2"
default:
    msg = "hogeは1,2,10以外"
}

println(msg)    // "hogeは1または10"と表示

whereを使ってパターンマッチも可能。

let hoge = 6
var msg:String

switch hoge {
case let x where x < 5:
    msg = "hogeは5未満"
case let x where x >= 5 && x < 10:
    msg = "hogeは5以上,10未満"
default:
    msg = "hogeは10以上"
}

println(msg)    // "hogeは5以上,10未満"と表示

いったんletで指定した変数に代入して、その変数で比較するような感じだ。

あと、Swiftのswitch文は、条件の網羅性のチェックが行われる。例であげたソースのdefault部分をコメントアウトするとエラーになる。


このエントリーをはてなブックマークに追加
ブログランキング・にほんブログ村へ
にほんブログ村

↑このページのトップヘ