関数の記述と利用方法
関数の記述と利用方法
プログラムでは、同じ処理のコードがさまざまな箇所に繰り返し出てくることがあります。そういった場合には、同じ処理のコードを関数として記述しておき、プログラム中で必要になるたびにその関数を呼び出して利用します。
共通の処理があった場合、以下のようにまとめられます。
呼び出す時に、関数へ渡す値を「引数」
処理が終わり、呼び出し元に渡したい値を「戻り値」と言います。
関数の宣言 func 関数名(引数名: 型) -> 戻り値の型 { ~処理~ }
関数の記述例として、渡した値を税込にし、その税込の値を返してくれる関数を見てみましょう。
1 2 3 4 5 6 |
// 戻り値付きの関数 func myFunc(value: Int) -> Int { var resultValue: Int = 0 // 結果を入れるための変数を宣言 resultValue = value * 1.08 //渡された値valueを使って計算処理をおこなう return resultValue // return 戻り値 と記述 resultValueが呼び出し元に渡される } |
このまとめた処理を、実際に呼び出して使ってみましょう。
上の関数を書いたらその下に、次のコードを書いてみてください。関数名(引数名: 引数に入れる値)です。
1 2 |
myFunc(value: 100) myFunc(value: 200) |
この、「myFunc(value: 渡す値)」そのものが、戻り値のresultValueの値となっているはずです。
これを、変数に代入したり、そのままprintして使ってみてください。
また、引数や戻り値がない時は省略することができます。
1 2 3 4 5 6 7 8 |
// 戻り値なしの関数 func sayGreeting() { print("こんにちは!") print("今日は良い天気ですね。") } //呼びだし sayGreeting() |
値渡しと参照渡し
引数は関数の中で、基本的に定数として扱われます。
試しに、関数の中のvalueに値を再代入すると、エラーが発生します。
ここで、引数の値を変更したい時に2つの方法があります。
・関数の中で、別の変数に値を移し替える
1 2 3 4 5 6 7 8 9 |
func add10(value: Int) -> Int { var value = value //渡された引数valueを新しいvalueに移し替える value = value + 10 //新しいvalue変数を使って計算と代入 return value //新しいvalueを戻り値として返す } var x = 10 print(add10(value: x)) //戻り値の値を確かめる print(x) //渡す前の値を確かめる |
ここでは関数の書き方、呼び出しの書き方はいつも通りです。
関数の中の書き方を工夫しています。
この時、戻り値と渡す前の値を出力して確かめてみてください。
ここで、関数の呼び出し時に、value: xを渡していますが、これはxの値10をコピーし、その値そのものを渡しています。つまり、通常の関数の書き方では「値渡し」をしています。
そのため、渡す前の値はそのままで、戻り値は関数の処理が行われているので+10されている筈です。
・関数の値の渡し方を変える
1 2 3 4 5 6 7 8 |
func add10(value: inout Int) -> Int { value = value + 10 //新しいvalue変数を使って計算と代入 return value //新しいvalueを戻り値として返す } var x = 10 print(add10(value: &x)) //戻り値の値を確かめる print(x) //渡す前の値を確かめる |
上記、関数の呼び出しをadd10(value: &x) とし、渡す値の前に& をつけています。
受け取る側では、add10(value: inout Int) とし、受け取る変数の型の前にinoutをつけています。
この時、戻り値と渡す前の値を出力して確かめてみてください。
この時、&x と記載してデータを渡すことで、xのメモリの住所を関数に渡しています。
また、受け取る側でもメモリの住所を受け取るためにinoutをつけています。つまり、関数の中ではこの住所データを参照してxの値が格納されたメモリを訪ね、そこの値そのものに+10しています。
これを参照渡しと言います。
直接データが書き換えられたので、渡す前の値も、戻り値と同じく変更されている筈です。
値渡し=コピーデータの値を渡してそれを書き換えるなどして扱う
参照渡し=住所データを渡し、それを参照して値を直接書き換えに行く
という概念を覚えておきましょう。