[swiftベース]関数
swiftの関数は1級オブジェクトであり、データ型として使用できます.関数はデータ型として使用できます.これは、関数を伝達パラメータとして受信したり、戻り値を返したりできることを意味します.
毛教授が言ったように、C言語は一般宣言と関数宣言の継続であり、一つのプログラムは大きな関数と言える.
💡 関数とメソッド
基本的には,関数自体は変化しないが,場合や位置によっては異なる用語で呼ぶ.関数-全モジュールのグローバル使用可能関数 メソッド-構造体、クラス、列挙タイプを含む特定のタイプに関連付けられた関数 💡 関数の定義と呼び出し
条件文または繰返し文でカッコを省略できるのとは異なり、関数でカッコを省略することはできません.
swiftの関数は、再定義(override)と重複定義(overload)の両方をサポートします.すなわち、異なるタイプのパラメータを持つ同名の関数と、異なる数のパラメータを持つ同名の関数を作成することができる.
関数の基本形式は以下の通りです.
複数のパラメータが必要な場合は、パラメータをカンマで区切って複数のパラメータを定義できます.
関数を呼び出すときにパラメータ名を使用します.また、関数を呼び出すときに使用するパラメータラベルを指定することもできます.
パラメータ名とパラメータラベルを渡す形式を指定します.
C言語のように伝達パラメータラベルを使いたくないなら?
ワイルドカードを使用して関数を呼び出す場合、C言語のように呼び出すことができます.
▼▼▼パラメータデフォルト
パラメータのデフォルト値を指定することもできます.パラメータが渡されていない場合は、デフォルト値が使用されます.
▼▼▼可変パラメータとI/Oパラメータ
パラメータの値が分からない場合は、可変パラメータを使用します.このとき得られる範囲は0個以上である.
C言語のポインタのように値タイプデータの参照を伝達パラメータとして送信する場合は、関数の内部で参照して元の値を変更します.参照inoutで変数として渡される変数または定数の前に&表示を付けます.
値を返す必要のない関数がよくあります.この場合、戻りタイプをvoidと表記するか、戻りタイプ表憲を省略する.
パラメータタイプと戻りタイプからなるタイプとして使用できます.
関数のオーバーラップは、関数に関数を追加できることを意味します.これまでの例は、モジュールの任意の場所で使用できるグローバル関数です.ただし、関数内の関数によって実現される重畳関数は、親関数のボディブロック内部でのみ関数を使用できます.(もちろん、外部では利用できないわけではありません.)
次の例は、原点0に移動する関数の実装です.
终わらないのは正常に终わらないという意味です.すなわち,エラーや重大なシステムエラーを投げ出したいと報告する方法を非戻り関数または非戻り方法と呼ぶ.
非戻り関数は、戻りタイプをNeverとして指定するだけです.
毛教授が言ったように、C言語は一般宣言と関数宣言の継続であり、一つのプログラムは大きな関数と言える.
💡 関数とメソッド
基本的には,関数自体は変化しないが,場合や位置によっては異なる用語で呼ぶ.
条件文または繰返し文でカッコを省略できるのとは異なり、関数でカッコを省略することはできません.
swiftの関数は、再定義(override)と重複定義(overload)の両方をサポートします.すなわち、異なるタイプのパラメータを持つ同名の関数と、異なる数のパラメータを持つ同名の関数を作成することができる.
関数の基本形式は以下の通りです.
func 함수 이름(매개변수...) -> 반환 타입 {
실행 구문
return 반환 값
}
func hello(name: String) -> String {
return"Hello \(name)"
//"Hello \(name)"
}
let name: String = hello(name: "silverCastle")
print(name)
結果Hello silverCastle
パラメータのない関数// 매개변수가 필요 없는 함수라면 매개변수 위치를 공란으로 비워두자.
func hello() -> String {
return "Hello silverCastle"
}
print(hello())
結果Hello silverCastle
複数のパラメータを持つ関数複数のパラメータが必要な場合は、パラメータをカンマで区切って複数のパラメータを定義できます.
func hello(from myName: String, to yourName: String) -> String {
return "Hello, \(yourName)! I'm \(myName)"
}
print(hello(from: "silverCastle", to: "goldCastle"))
結果Hello, goldCastle! I'm silverCastle
▼▼▼パラメータ名と伝達パラメータラベル関数を呼び出すときにパラメータ名を使用します.また、関数を呼び出すときに使用するパラメータラベルを指定することもできます.
パラメータ名とパラメータラベルを渡す形式を指定します.
func 함수 이름(전달인자 레이블 매개변수 이름: 매개변수 타입, 전달인자 레이블 매개변수 이름: 매개변수 타입...) -> 반환 타입 {
실행 구문
return 반환 값
}
すなわち,関数内部で伝達パラメータラベルを使用することも,関数呼び出し時にパラメータ名を使用することもできない.C言語のように伝達パラメータラベルを使いたくないなら?
ワイルドカードを使用して関数を呼び出す場合、C言語のように呼び出すことができます.
▼▼▼パラメータデフォルト
パラメータのデフォルト値を指定することもできます.パラメータが渡されていない場合は、デフォルト値が使用されます.
▼▼▼可変パラメータとI/Oパラメータ
パラメータの値が分からない場合は、可変パラメータを使用します.このとき得られる範囲は0個以上である.
func hello(me: String, friends: String...) -> String {
var result: String = ""
for friend in friends {
result += "Hello " + friend + "! "
}
return "I'm " + me + result
}
print(hello(me: "silverCastle ",friends: "bronzeCastle","goldCastle","platinumCastle"))
結果I'm silverCastle Hello bronzeCastle! Hello goldCastle! Hello platinumCastle!
値を関数の伝達パラメータとして伝達する場合、通常は値をコピーして伝達しますが、値以外の参照を伝達する場合はI/Oパラメータを使用する必要があります.C言語のポインタのように値タイプデータの参照を伝達パラメータとして送信する場合は、関数の内部で参照して元の値を変更します.参照inoutで変数として渡される変数または定数の前に&表示を付けます.
var numbers: [Int] = [1, 2, 3]
func nonReferenceParameter(arr: [Int]) {
var copiedArr: [Int] = arr
copiedArr[1] = 100
}
func referenceParameter(arr: inout [Int]) {
arr[1] = 100
}
nonReferenceParameter(arr: numbers)
print("참조하지 않은 결과: ", numbers[1])
referenceParameter(arr: &numbers)
print("참조한 결과: ", numbers[1])
結果참조하지 않은 결과: 2
참조한 결과: 100
返されない関数値を返す必要のない関数がよくあります.この場合、戻りタイプをvoidと表記するか、戻りタイプ表憲を省略する.
func hello() {
print("hello, swift world!")
}
hello()
結果hello, swift world!
データ型の関数としてパラメータタイプと戻りタイプからなるタイプとして使用できます.
typealias CaculateTwoInts = (Int, Int) -> Int
func add (a: Int, b: Int) -> Int {
return a+b
}
func multiple (a: Int, b: Int) -> Int {
return a*b
}
var number: CaculateTwoInts = add
print(number(10, 20))
number = multiple
print(number(10, 20))
結果30
200
▼▼重ね合わせ関数関数のオーバーラップは、関数に関数を追加できることを意味します.これまでの例は、モジュールの任意の場所で使用できるグローバル関数です.ただし、関数内の関数によって実現される重畳関数は、親関数のボディブロック内部でのみ関数を使用できます.(もちろん、外部では利用できないわけではありません.)
次の例は、原点0に移動する関数の実装です.
typealias MoveFunc = (Int) -> Int
func moveToZero (_ shouldGoLeft: Bool) -> MoveFunc {
func goRight(_ position: Int) -> Int {
return position + 1
}
func goLeft(_ position: Int) -> Int {
return position - 1
}
return shouldGoLeft ? goLeft : goRight
}
var position: Int = 5
let goZero: MoveFunc = moveToZero(position > 0)
while position != 0 {
print(position)
position = goZero(position)
}
print("원점 도착!")
結果5
4
3
2
1
원점 도착!
▼▼非終端関数终わらないのは正常に终わらないという意味です.すなわち,エラーや重大なシステムエラーを投げ出したいと報告する方法を非戻り関数または非戻り方法と呼ぶ.
非戻り関数は、戻りタイプをNeverとして指定するだけです.
func crash() -> Never {
fatalError("Something wrong!")
}
crash()
結果__lldb_expr_54/MyPlayground.playground:84: Fatal error: Something wrong!
Reference
この問題について([swiftベース]関数), 我々は、より多くの情報をここで見つけました https://velog.io/@eunsung-dev/swift-기초-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol