[Swift] 関数・メソッドの宣言

関数やメソッドの宣言方法についてまとめてみました。

 

関数の基本形は下記みたいな感じです

引数は 名称:型 で指定
戻り値の型を “->” で指定


func laughText(text:String) -> String {
    return text + "(笑)"
}

// 引数も戻り値も無い時
func logNow() {
    NSLog("現在時刻:%@",NSDate.date())
}

 

パラメータ名の宣言ってのも出来ます


// 外部パラメータ名(下記だとvalueFirst,valueSecond)と
// 内部パラメータ名(下記だとvalue1,value2)をそれぞれ個別に宣言。
func calcPair(valueFirst value1:Double ,valueSecond value2:Double ) -> Double {
    return value1 + value2
}

// これを呼び出すときには
let v = calcPair(valueFirst: 1, valueSecond: 50)

objective-cのメソッド呼び出しのようですね。
 

ちなみに内部と外部で同じ名前とする場合には#(シャープ)を指定すればOK


// この場合は内部・外部ともに同じ名前が使われる
func calcPair2( #valueFirst:Double , #valueSecond:Double ) -> Double {
    return valueFirst + valueSecond
}

 

In-Outパラメータ
引数のポインタ渡し的なやつ


func arrangeTwo(inout largeVal:Int ,inout smallVal:Int){
    if (largeVal < smallVal){
        let t = smallVal
        smallVal = largeVal
        largeVal = t
    }
}

//呼び出すときは&を付けて変数を引き渡します
var valA:Int = 50
var valB:Int = 70
arrangeTwo(&valA,&valB)
NSLog("valA\(valA) valB:\(valB)")

 

可変長パラメータ
型の後ろに “…” と余韻(?)を残すことで可変長引数になる


func totalNumbers(numbers:Double...) -> Double {
    var result:Double = 0
    for v in numbers {
        result += v
    }
    return result
}

//呼び出し方
let totalnum = totalNumbers(1,2,3,4,5,6,7,8,9)
NSLog("total:\(totalnum)")

  

 
Swiftは関数もscala等と同様にfirst-classなので引数に直接渡せちゃいます。


// 引数 calcFunc -- Doubleを2つ引数で受け取りってDoubleを返すメソッド
// 引数 v1,v2  -- 計算対象のDouble値
func logCalcResult(calcFunc:(Double,Double) -> Double   ,v1:Double,v2:Double) {
    // v1,v2を引数として関数(calcFunc)を実行
    let calcResult = calcFunc(v1,v2)
    NSLog("calcResult \(calcResult)")
}


//呼び出し方
logCalcResult(calcPair,12,33)

 

同様に戻り値として関数を返す事もできます


func goodmorning(l:String) -> (String)->(String) {
    
    func sayEnglish(name:String) -> String {
        return "Good morning,\(name) "
    }
    func sayJapanese(name:String) -> String {
        return "\(name) おはよ〜 "
    }
    
    // 戻り値として関数sayEnglish or sayJapanese を返す
    if (l == "english"){
        return sayEnglish
    }
    else {
        return sayJapanese
    }
}

// 使い方
// 戻り値の関数を変数に格納
var speakfunc = goodmorning("english")
// 実行
NSLog(speakfunc("たろう"))
// ・・・ Good morning,たろう

 
関数型言語のように関数が通常の変数同様の扱いとなっているのが今風で良いですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です