楽水

人々の創造が自由に表現できる舞台づくり

Swift

Swiftの関数【Swiftの関数の書き方をわかりやすく解説】

投稿日:2020年8月23日 更新日:


Swiftの関数は、特定のタスクを実行する独立したコードブロックです。
Swiftの関数は、パラメータ名の無いシンプルな C スタイルの関数から、パラメータごとにローカルと外部のパラメータ名がある複雑な Objective-C スタイルのメソッドまで表現することができます。
ここでは、

  • 関数の定義と呼び出し方法
  • 関数のパラメータと戻り値によるさまざまな関数の書き方

について解説します。
参考本
[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus

関数の定義と呼び出し

関数を定義するとき、関数が入力値として取る 1 つ以上の名前と型を持つパラメータを任意に定義することができます。
また、関数が完了したときに、関数が出力として返す値の型を、戻り値の型として任意に定義することもできます。

func sayHello(personName: String) -> String {
 let greeting = “Hello, ” + personName + “!”
 return greeting
}

丸括弧内に String の引数値を渡して、sayHello(“Anna”) のようにして関数 sayHello(_:) を呼び出します。この関数は String の値を返すため、文字列を出力する関数 print(_:separator:terminator:)に sayHello(_:) を渡すことができます。
関数は参照型なので、この場合、printにsayHelloの参照が渡されます。

print(sayHello(“Anna”))
// “Hello, Anna!” と出力

関数のパラメータと戻り値によるさまざまな関数の書き方

パラメータが無い関数の書き方

入力パラメータは、関数の定義に必須ではありません。

func sayHelloWorld() -> String {
 return “hello, world”
}

複数のパラメータがある関数の書き方

関数の丸括弧の中に、カンマ区切りで複数の入力パラメータを記述することができます。

func sayHello(personName: String, alreadyGreeted: Bool) -> String {
 if alreadyGreeted {
  return sayHelloAgain(personName)
 } else {
  return sayHello(personName)
 }
}

戻り値が無い関数の書き方

戻り値の型は、関数の定義に必須ではありません。

func sayGoodbye(personName: String) {
 print(“Goodbye, \(personName)!”)
}

戻り値の型がオプショナルである関数の書き方

関数が返す型に値が無い可能性がある場合、戻り値の型にオプショナルを使用することができます。

func sayHello(personName: String) -> String? {
 let greeting = “Hello, ” + personName + “!”
 return greeting
}

オプショナルについては
Swiftのオプショナル
という記事を参照してください。

複数の戻り値がある関数の書き方

関数が複数の値で構成される戻り値を返すための型として、タプル型を使用することができます。

func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
 for value in array[1..<array.count] {
  if value < currentMin {
   currentMin = value
  } else if value > currentMax {
   currentMax = value
  }
 }
 return (currentMin, currentMax)
}

戻り値の型がオプショナルなタプルである関数の書き方

関数が返すタプル型にタプル全体の値が無い可能性がある場合、タプル全体が nil になりえることを反映するため、戻り値の型にオプショナルなタプルを使用することができます。

func minMax(array: [Int]) -> (min: Int, max: Int)? {
var currentMin = array[0]
var currentMax = array[0]
 for value in array[1..<array.count] {
  if value < currentMin {
   currentMin = value
  } else if value > currentMax {
   currentMax = value
  }
 }
 return (currentMin, currentMax)
}

以上、今回は、Swiftの関数の定義と呼び出し方法、および、関数のパラメータと戻り値によるさまざまな関数の書き方について解説しました。

-Swift
-, , ,

執筆者:

関連記事

Swiftのクラスと構造体をわかりやすく解説

Swiftを学ぶ過程で、クラスと構造体は何が違うのか知りたいと考える人もいると思います。 そこで、今回は、以下の観点でSwiftのクラスと構造体について解説します。 クラスと構造体の定義 クラスと構造 …

Swiftのプロパティ【プロパティオブザーバーなどをわかりやすく解説】

プロパティは値と特定のクラスや構造体、列挙型を結び付けます。 Swiftのプロパティには、値を保持するプロパティだけではなく様々な種類のプロパティがあります。 今回は、Swiftのプロパティについて以 …

Swiftのデイニシャリゼーションについてわかりやすく解説

Swiftでは、インスタンスが必要でなくなったとき、リソースを解放するために、自動参照カウント (ARC) という方法でインスタンスの割り当てを解除します。 インスタンスの割り当て解除が行わ …

Swiftのオプショナル【?や!をわかりやすく解説】

Javaでプログラムを書いたことがあるプログラマーであれば「NullPointerException」というエラーで悩まされた方もいらっしゃるのではないでしょうか。 これは、オブジェクトに対する参照が …

Swiftの列挙型をわかりやすく解説

プログラムを作成するとき、曜日(月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日)やカードのスート(スペード、クラブ、ダイヤ、ハード)のように決まった範囲の要素(種類)を持つ集合を扱う場合がある …