戻り値
戻り値とは、関数の出力を表す値です。
戻り値の型は関数の宣言時に定義します。
関数の呼び出し元は、定義された戻り値の型の値を出力として受け取ります。
戻り値の存在しない関数
関数を宣言する際に戻り値の定義は必須ではありません。
なので、戻り値が不要な場合は定義を省略できます。
message( )関数を作ってみました。
こちらは、print( )関数で文字を出力するだけの機能を持っていて
戻り値を定義していないので関数の呼び出し元には何も値を返しません。
func message(name: String) {
print("\(name)さんこんにちは")
}
message(name: "Tanaka")
実行結果
Tanakaさんこんにちは
戻り値のチェック
関数宣言で定義されている戻り値の型と実際の戻り値の方が一致するかは、
コンパイラによってチェックされています。
定義された戻り値の型と戻り値の値が一致しない場合はコンパイルエラーになり、
戻り値が定義通りの値を返すことはコンパイル時に保証されます。
当然ですが、Int型を戻り値としているにも関わらず、
戻り値の型をInt型以外にしているとコンパイルエラーになります。
func test() -> Int {
let string = "眠いです。"
return string // コンパイルエラー
}
test()
エラー内容:Cannot convert return expression of type 'String' to return type 'Int'
和訳:タイプ 'String'の戻り値の型をリターンタイプ 'Int'に変換できません
戻り値の型をInt型に指定している状態で、
戻り値をOptional<Int>型にしている場合もコンパイルエラーになります。
func test() -> Int {
let string = "110"
return Int(string)
}
test()
エラー内容:Value of optional type 'Int?' must be unwrapped to a value of type 'Int'
和訳:オプションタイプ「Int?」の値 タイプ「Int」の値にアンラップする必要があります
こちらの場合は、コンパイルエラーをなくすには、
アンラップをするか戻り値の型をInt?型にすることで解決できます。
暗黙的なreturn
関数の実装が戻り値の返却のみで実装されている場合は、
returnキーワードを省略することができます。
この仕様のことを暗黙的なreturnと言います。
戻り値の返却のみで実装されている関数はこのような関数になります。
func test() -> Int {
1 + 1
}
print(test())
実行結果
2
今回は、1 + 1
の結果が返却できる型の値、かつ、別の処理が書かれていないので、
暗黙的なreturnが行われています。
1 + 1
以外に別の処理を書いてしまうとreturnキーワードが必要になります。
以上、関数における戻り値の説明でした!
【Swift】関数の使い方〜その1〜 と
【Swift】関数の使い方〜その2〜 もございますので
ぜひそちらもご覧いただければと思います。