Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

column @discardableResult を追加 #27

Merged
merged 1 commit into from Jan 6, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 10 additions & 6 deletions swift-programming-language.md
Expand Up @@ -595,13 +595,9 @@ func multiply(_ number: Int, by: Int) -> Int {
let fifteen = multiply(3, by: 5)
```

Swift の関数定義は `func` キーワードを用いる。`func 関数名(引数名: 引数型, 引数名: 引数型) -> 返り値型 { 実装 }` が基本的なフォーマットである。呼び出し時には引数にラベルをつける。
Swift の関数定義は `func` キーワードを用いる。`func 関数名(引数名: 引数型, 引数名: 引数型) -> 返り値型 { 実装 }` が基本的なフォーマットである。呼び出し時には引数にラベルをつける。複数の値を返したい場合にはタプルにまとめるとよい。

複数の値を返したい場合にはタプルにまとめるとよい。

引数の名前は外部引数名と内部引数名にわけることができる。

引数名の部分を空白で区切り、外部引数名・内部引数名の順に書く。外部引数名は呼び出し時のラベルになり、内部引数名は実装中で使う名前である。明示的にラベルを省略するには、外部引数名として `_` を使うことができる。
引数の名前は外部引数名と内部引数名にわけることができる。引数名の部分を空白で区切り、外部引数名・内部引数名の順に書く。外部引数名は呼び出し時のラベルになり、内部引数名は実装中で使う名前である。明示的にラベルを省略するには、外部引数名として `_` を使うことができる。

```swift
func multiply(_ number: Int, by: Int) -> Int {
Expand All @@ -614,6 +610,14 @@ let fifteen = multiply(3, by: 5)

関数は、関数名やラベル、引数の型、返り値の型などを合わせてシグネチャを形成する。シグネチャが異なる関数は別な関数となる。このことを利用して、関数名は同じだが引数や返り値の型は異なる関数を定義することができ、これをオーバーロードと呼ぶ。オーバーロードされた関数は、引数や返り値の型から呼び出される関数が決まる。

> #### column `@discardableResult`
> 返り値のある関数の返り値を使用しない場合、警告が表示される。これは例えば、値型の破壊的ではない関数が新しい値を返すような場合に、新しい値を使用しないことが明らかにバグであることから、返した値を使用しないことは基本的には問題があると考えられるからである。
> 関数の返り値を使用しないことを許容したい場合は、関数に `@discardableResult` 属性をつけることができる。
> `@discardableResult` 属性でない関数の返り値は、 `_ =` で明示的に無視することもできる。
> #### Ref.
>
> - [The Swift Programming Language — Language Reference — Attributes](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html#//apple_ref/doc/uid/TP40014097-CH35-ID347)

#### 引数

関数の引数は `let` と同様に通常は変更できないが、`inout` キーワードを使うことで受け取った変数の参照に対して変更を行える。
Expand Down