今回はSwiftの関数についての記事です。Javaなどをやられてた方は、違和感があると思います(私もありました)。そのような方々の助けに少しでもなればと思います。
関数の基本
関数の定義
まず定義は以下のような形で記述します。
func メソッド名(引数1:引数1の型, 引数2: 引数2の型) -> 戻り値{
メソッド呼び出し時に実行される処理
}
具体的なコードは以下のような形になります。
func addDouble(num1: Int, num2: Int) -> Int{
return (num1 + num2)*2
}
少しクセがあるのが、引数を「引数名:引数の型」と記述しないといけないと部分です。ですがよりクセがあるのが関数の利用時です。
関数の利用
関数の利用時は以下のように呼び出します。
var 戻り値を格納する変数 = メソッド名(引数ラベル1:メソッドに渡す値1, 引数ラベル2:メソッドに渡す値2)
具体的なコードは以下のようになります。
let result = addDouble(num1:1, num2:2)
Swiftでは関数を呼び出すときに、引数ラベルというものをつけなくてはなりません。JavaなどではaddDouble(1,2)に呼び出せたので、少しめんどくさく感じます….
実際に関数の定義から利用までの流れは以下のようなコードになります。
func addDouble(num1: Int, num2: Int) -> Int{
return (num1 + num2)*2
}
let number1:Int = 1
let number2:Int = 2
let result = addDouble(num1:number1, num2:number2)
print(result) //6
Swiftで関数を呼び出す時の引数ラベルは、メソッドを定義したときに記述した引数名になります。この場合だとfunc addDouble(num1: Int, num2: Int) のnum1、num2が引数ラベルになります。引数ラベルを記載する理由としては、可読性の向上が挙げられます。引数ラベルを記載することによって、引数が何を意味するのかを明確にすることができるということです。
実はこの引数ラベルは、省略することも可能です。
引数ラベルの省略
引数ラベルを省略する場合は、関数の定義時にアンダースコア(_)をつけることによって省略できます。
定義方法
定義の仕方は以下のようになります。
func メソッド名(_ 引数1:引数1の型, _ 引数2: 引数2の型) -> 戻り値{
メソッド呼び出し時に実行される処理
}
具体的なコードは以下のような形になります。
func addDouble(_ num1: Int,_ num2: Int) -> Int{
return (num1 + num2)*2
}
引数ラベルを省略した関数の利用
利用方法は以下のようになります。Javaなどで利用するように記載すれば関数を利用できます。
var 戻り値を格納する変数 = メソッド名(メソッドに渡す値1, メソッドに渡す値2)
具体的なコードは以下のようになります。
let result = addDouble(1, 2)
なぜこのような書き方ができるかというと、Swiftの機能である内部引数と外部引数という特性によってこのような書き方ができます。
内部引数と外部引数
内部引数
関数を定義するときに利用する引数のことです。通常関数を定義するときに利用する引数のことを内部引数と呼びます。関数定義時に処理を記述はこの引数を利用します。今まで出てきた「func addDouble(num1:Int, num2:Int)」関数の引数num1、num2は内部引数ということになります。
外部引数
関数を呼び出す際に、引数ラベルとして利用できる引数になります。この引数は関数の定義時に、外部引数として定義をしなくてはなりません。外部引数を定義することによって、関数を利用する側が関数の引数が何を表しているのかが分かりやすくなるというメリットがあります。
内部引数と外部引数の使い方
内部引数と外部引数の利用方法について説明します。定義・利用方法は以下になります。
func メソッド名(外部引数名1 内部引数名1: 引数1の型, 外部引数名2 内部引数名2: 引数2の型) -> 戻り値{
メソッドの処理
}
////////メソッド呼び出し箇所///////////////////
let 戻り値を格納数変数 = メソッド名(外部引数名1: 引数1の値, 外部引数名2: 引数2の値)
通常の定義と違い、引数の定義時に内部引数と外部引数を定義する必要があります。利用時は引数ラベルを外部引数名で記載します。
実際のソースコードは以下のようになります。
func addDouble(number1 n1: Int,number2 n2: Int) -> Int{
return (n1 + n2)*2
}
let num1:Int = 1
let num2:Int = 2
let result = addDouble(number1:num1, number2:num2)
print(result) //6
ここで引数ラベルを省略できる話に戻ります。気づいた方もいらっしゃると思いますが、引数ラベルを省略するために関数の定義時アンダースコア(_)を記載しました。Swiftでアンダースコアは、省略を表します。実際にアンダースコアで戻り値を省略すると、利用すると以下のような形になります。
_ = methodA()
このように外部引数もアンダースコアを使うことで、記述を省略できます。なので、引数ラベルを記述せずにメソッドを利用できるということです。
注意していただきたいのが、アンダースコアを利用して引数ラベルを省略出来ますが可読性は落ちるます。引数ラベルを利用しなくても十分に分かりやすいメソッドでのみ、利用するように制限をかけるのがよいと思います。
関数については以上です!最後まで読んでいただいてありがとうございました!