[Swift]関数を理解してください!


この本は『swift programming』を勉強した上で書いたものです。

n.関数


基本関数の定義と呼び出し

  • SWIFTで関数を定義するキーワードはfuncです.
  • SWIFT関数は、基本的に関数の名前やパラメータ、戻りタイプなどを使用して関数を定義します.
  • 関数の基本形状
    func 함수이름(매개변수...) -> 반환타입 {
    	실행 구문
        	return 반환 값
    }
  • 関数内のコードが1行のみで示され、その欠落値のタイプが関数の戻りタイプと同じである場合、returnキーワードを省略することができる.
  • func introduce(name: String) -> String {
    	"안녕하세요, 저의 이름은 " + name + "입니다."
    }

    パラメータ

  • パラメータを必要としない場合は、パラメータの位置を空白にすることができます.
  • 複数の
  • パラメータが必要な関数は、カンマ(,)を使用してパラメータを区切ります.
  • 関数を呼び出すと、パラメータに名前を付けてコロン(:)を書き、伝達パラメータを送信します.
  • が呼び出されると、パラメータの名前をパラメータ名と呼びます.
  • //매개변수가 없는 경우
    func helloWorld() -> String {
    	return "Hello, world!"
    }    
    
    //매개변수가 여러 개인 경우
    func sayHello(myName: String, yourName: String) -> String {
    	return "Hello \(yourName)! My name is \(myName)"
    }
    print(sayHello(myName: "zooneon", yourName: "Mike"))	//Hello Mike! My name is zooneon

    パラメータ名と伝達パラメータラベル

  • 伝達パラメータラベルとパラメータ名を別々に指定することで、パラメータの外部での役割をさらに明確にすることができます.
  • を使用してパラメータラベルを渡す場合は、パラメータ名の前にスペースを残して指定するだけです.
  • func 함수 이름(전달인자 레이블 매개변수 이름: 매개변수 타입, 전달인자 레이블 매개변수 이름: 
    		매개변수 타입) -> 반환 타입 {
        실행 구문
        return 반환 값
    }
  • 関数の内部で伝達パラメータラベルを使用することはできません.関数を呼び出すときにパラメータ名を使用することはできません.
  • func sayHello(from myName: String, to yourName: String) -> String {
    	return "Hello \(yourName)! My name is \(myName)"
    }
    print(sayHello(from: "zooneon", to: "Mike"))	//Hello Mike! My name is zooneon
    ファクタラベルを
  • で渡したくない場合は、ワイルドカードを使用します.
  • func sayHello(_ myName: String, _ yourName: String) -> String {
    	return "Hello \(yourName)! My name is \(myName)"
    }
    print(sayHello("zooneon", "Mike"))	//Hello Mike! My name is zooneon

    パラメータデフォルト

  • パラメータごとにデフォルト値を指定できます.
  • パラメータが渡されていない場合は、デフォルト値が使用されます.
  • func sayHello(_ name: String, _ times: Int = 2) -> String {
    	var result: String = ""
        
        for _ in 0..<times {
        	result += "Hello \(name)!" + " "
        }
        
        return result
    }
    print(sayHello("zooneon"))	//Hello zooneon! Hello zooneon!
    print(sayHello("zooneon", 3))	//Hello zooneon! Hello zooneon! Hello zooneon!
    デフォルト値のないパラメータは、デフォルト値のあるパラメータの前に使用することが望ましい.
  • のデフォルト値があるかどうかにかかわらず、重要なパラメータは前に置くことが望ましい.
  • 可変パラメータ

  • パラメータの値が何個あるか分からない場合は、可変パラメータを使用します.
  • 可変パラメータは0以上の値を受け入れることができ、入力されたパラメータ値は配列のように使用することができる.
  • 関数には可変パラメータが1つしかありません.
  • func deliciousFood(_ foods: String...) -> String {
        var result: String = ""
        
        for food in foods {
            result += "I like \(food). "
        }
        
        return result
    }
    print(deliciousFood("pizza", "sushi", "steak"))    //I like pizza. I like sushi. I like steak.

    I/Oパラメータ

  • I/Oパラメータは、非値参照を渡すために使用されます.
  • 関数外部の値がどのような影響を及ぼすか分からないため,関数型プログラミングモードでは回避モードである.
  • 参照inoutパラメータで伝達される変数または定数の前に和(&)を付けて表す.
  • I/Oパラメータはデフォルト値ではなく、可変パラメータとして使用できません.
  • 定数は変更できませんので、I/Oパラメータの伝達因子としては使用できません.
  • var numbers: [Int] = [1, 2, 3]
    
    func referenceParameter(_ arr: inout [Int]) {
        arr[1] = 1
    }
    
    referenceParameter(&numbers)
    print(numbers[1])	//1

    戻り関数なし


    関数が
  • を返す必要がない場合、戻りタイプはVoidまたは省略としてマークすることができる.
  • func helloWorld() {
        print("Hello, world!")
    }
    helloWorld()	//Hello, world!

    データ型の関数として

  • swiftの関数は、データ型として使用できる1級オブジェクトです.
  • 角関数は、パラメータタイプおよび戻りタイプからなるタイプとして使用することができる.(매개변수 타입의 나열) -> 반환 타입
  • typealias Sentence = (String, String, String) -> String
    
    func sentenceFunction(_ a: String, _ b: String, _ c: String) -> String {
        return a + b + c
    }
    
    var makeSentence: Sentence = sentenceFunction
    print(makeSentence("I ", "love ", "sushi"))    //I love sushi