概要
Swiftにおける関数はiOS開発において大いに重要です。
今回はその主要な使用方法を今回はまとめました。
随時更新していくため、ブックマークしていただけるとお役に立てると思います。
環境
Xcode : 14.3
Swift : 5.8
目次
- Step 1: 関数の定義
- Step 2: 関数の呼び出し
- Step 3: 複数のパラメータを持つ関数
- Step 4: 関数内での変数と定数の使用
- Step 5: デフォルトパラメータ値
- Step 6: 可変長引数
- Step 7: 複数の返り値を持つ関数
- Step 8 : 返り値を持たない場合
- Step 9 : 引数ラベルの省略
- Step 10 : inoutパラメータ(パラメータを関数を用いて更新する)
- Step 11 : パラメータと異なる変数名を関数内で使用する(Argument Label)
Step 1: 関数の定義
関数は func キーワードを使って定義します。関数名、パラメータ、パラメータの型、戻り値の型が必要です。
func 関数名(name: パラメータの型) -> 戻り値の型 {
return 返り値 //上記で定義した型
}
具体的な関数定義の例
func greet(name: String) -> String {
return "Hello, \(name)!"
}
上記の例では、greet という名前の関数を定義しています。この関数は、String型のnameパラメータを受け取り、String 型の戻り値を返します。
Step 2: 関数の呼び出し
関数を呼び出すには、関数名と括弧内にパラメータを指定します。
この時にパラメータを明示する必要があることに注意してください。
let greeting = greet(name: "Alice")
print(greeting) // "Hello, Alice!"
上記の例では、greet関数にAliceを引数として渡しています。関数の戻り値は、greeting変数に代入され、その後、print関数で出力されます。
この時
greet("Alice")
これはパラメータを明示してないためエラーになります。
Step 3: 複数のパラメータを持つ関数
複数のパラメータを持つ関数を定義するには、パラメータをカンマで区切ります。
func add(a: Int, b: Int) -> Int {
return a + b
}
let sum = add(a: 3, b: 5)
print(sum) // 8
上記の例では、2つのInt型のパラメータaとbを持つadd関数を定義しています。この関数は、aとbの和を返します。
Step 4: 関数内での変数と定数の使用
関数内で 変数や定数を使用することができます。 let を使って定数を定義し、var を使って変数を定義します。
func incrementAndDouble(number: Int) -> Int {
let increment = 1
var result = number + increment
result = result * 2
return result
}
let doubled = incrementAndDouble(number: 4)
print(doubled) // 10
上記の例では、incrementAndDouble関数内で、定数incrementと変数resultを定義しています。
Step 5: デフォルトパラメータ値
関数のパラメータには、デフォルト値を設定することができます。デフォルト値を持つパラメータは、関数呼び出し時に省略することができます。
func createGreeting(name: String, prefix: String = "Hello") -> String {
return "\(prefix), \(name)!"
}
let greeting1 = createGreeting(name: "Alice")
print(greeting1) // "Hello, Alice!"
let greeting2 = createGreeting(name: "Bob", prefix: "Hi")
print(greeting2) // "Hi, Bob!"
上記の例では、createGreeting関数のprefixパラメータにデフォルト値 "Hello" を設定しています。関数呼び出し時にprefix引数を省略すると、デフォルト値が使用されます。
Step 6: 可変長引数(個数が決まっていない場合)
関数のパラメータに ... を使うことで、可変長引数を定義することができます。 可変長引数は、関数呼び出し時に複数の引数を渡すことができます。
func sum(numbers: Int...) -> Int {
var total = 0
for number in numbers {
total += number
}
return total
}
let totalSum = sum(numbers: 1, 2, 3, 4, 5)
print(totalSum) // 15
上記の例では、sum関数に可変長引数numbersを定義しています。関数呼び出し時に複数の引数を渡すことができ、それらの引数は関数内で配列として扱われます。
Step 7: 複数の返り値を持つ関数
関数は、タプルを使用して複数の値を返すことができます。タプルは、カンマで区切られた複数の値を括弧で囲んだものです。
func minMax(numbers: [Int]) -> (min: Int, max: Int) {
var currentMin = numbers[0]
var currentMax = numbers[0]
for number in numbers {
if number < currentMin {
currentMin = number
} else if number > currentMax {
currentMax = number
}
}
return (currentMin, currentMax)
}
let result = minMax(numbers: [2, 4, 1, 8, 3])
print(result.min) // 1
print(result.max) // 8
上記の例では、minMax関数がInt型のタプルを返しています。このタプルは、minとmaxの2つの値を持ちます。
Step 8 : 返り値を持たない場合
返り値を持たない関数は、 -> と戻り値の型を省略して定義できます。このような関数は、副作用のために呼び出されます。
func printGreeting(name: String) {
print("Hello, \(name)!")
}
printGreeting(name: "Alice")
// Allow があっても良い
func printGreeting(name: String) ->(){
print("Hello, \(name)!")
}
上記の例では、printGreeting関数は返り値を持たず、print関数を使って挨拶を表示します。
Step 9 : 引数ラベルの省略
関数の呼び出し時に引数ラベルを省略するには、 _ を使用します。これにより、実行時よりにより簡略化した実行が可能にあります。
func multiply(_ a: Int, _ b: Int) -> Int {
return a * b
}
let product = multiply(3, 4)
print(product) // 12
上記の例では、multiply関数の両方の引数ラベルを省略しています。関数呼び出し時に引数ラベルを指定せずに引数を渡します。
Step 10 : inout(関数内の変更を関数外にも反映させる)
inoutキーワードを使用して、関数内で変更された引数の値が呼び出し元に反映されるようにできます。このような引数は、関数呼び出し時に & を使用して渡す必要があります。
func swapValues(_ a: inout Int, _ b: inout Int) {
let temp = a
a = b
b = temp
}
var value1 = 1
var value2 = 2
swapValues(&value1, &value2)
print(value1) // 2
print(value2) // 1
上記の例では、swapValues関数はinoutパラメータaとbを使用しています。関数内でaとbの値が入れ替えられ、呼び出し元のvalue1とvalue2にも変更が反映されています。
Step 11 : パラメータと異なる変数名を関数内で使用する(Argument Label)
引数ラベルは、関数の呼び出し時に引数の役割を明確にするために使用されます。引数ラベルを使うことで、関数の呼び出し側のコードが自然な言語に近い形で読めるようになり、コードの可読性が向上します。
引数ラベルは、関数の定義時に引数ラベルの前に配置し、スペースで区切ります。以下に例を示します。
func joinStrings(prefix: String, with separator: String, and suffix: String) -> String {
return prefix + separator + suffix
}
let result = joinStrings(prefix: "Hello", with: ", ", and: "World!")
print(result) // "Hello, World!"
上記の例では、joinStrings関数に3つの引数があり、それぞれに引数ラベルが指定されています。関数呼び出し時に、引数ラベルを使用して引数がどのパラメータに対応するかを明確にします。この場合、prefix引数には "Hello" が、separator引数には "," が、suffix引数には "World!" が渡されます。
まとめ
今回は、Swiftにおける。functionの使い方をまとめました。
何かご指摘やアドバイス等あればお待ちしております。
いいね、ブックマーク、フォローしていただけると勉強の励みになりますので是非お願いします。😉
-- 追伸 --
Twitterで日々の学習風景を投稿してます。
https://twitter.com/Ren_yello
参考にさせていただいたサイト様達
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/functions/
https://qiita.com/rei_012/items/57111fdb98ee6ef8c2fc
https://ponsuke-tarou.hatenablog.com/entry/2018/03/23/171557