Help us understand the problem. What is going on with this article?

Swift基礎構文のメモ(初心者向け) part3

More than 1 year has passed since last update.

【経緯】

社内もくもく会にてSwiftが始まったので復習がてら。この記事のpart3です。

【基礎構文】

■関数と引数(初期値あり)

func printPrice(price: Int = 0, productString: String = "この商品") {
    print("\(productString)\(price)円です")
}

printPrice(price: 150, productString: "PC")
printPrice(price: 6300)
出力
PCは150円です
この商品は6300円です

■関数と戻り値

/* 戻り値のある関数 */
func valueResult(value: Int = 0) -> Int {
    return value / 2
}

/* 戻り値のない関数(省略可能) */
func valueNoneResult(value: Int = 0) -> () {
    print("\(value)\nNot return value.")
}
func valueNoneRes(value: Int = 0) {
    print("\(value)\nNot res value.")
}

/* 複数のreturnがある場合 */
func numberResult(number: Int) -> Int {
    if number > 0 {
        return number * 2
    }
    return number + 10
}

print(valueResult(value: 300))
valueNoneResult(value: 6300)
valueNoneRes(value: 1200)
print(numberResult(number: 5))
print(numberResult(number: -6))
出力
150
6300
Not return value.
1200
Not res value.
10
4

■スコープ
ローカル:関数や制御構文毎のブロックで使用可能
グローバル:関数や制御構文毎のブロックを超えて利用可能

■外部引数名
引数を関数内で別の引数名を用いて値を渡すことが出来る。
また、「_」を使用することで、呼び出し時に引数名を省略することが出来る

func printPrice(num1 price: Int = 0, str1 productString: String = "この商品") {
    print("\(productString)\(price)円です")
}

func add(_ price: Int = 0, _ productString: String = "この商品") {
    print("\(productString)\(price + 100)円です")
}

printPrice(num1: 150, str1: "Windows")
add(150, "Mac")
出力
Windowsは150円です
Macは250円です

■関数のオーバーロード
関数名は変更せずに、引数のデータ型のみ異なる関数を作成したり、引数名や引数の個数が異なる関数を宣言したりすることで実現可能。
上記のように、関数名を変更せずに引数の種類や名前を変更して、同名の関数を呼び出せるようにすることをオーバーロードと言います。

func clAverage(_ a: Int, _ b: Int) -> Int {
    return (a + b) / 2
}

func clAverage(_ a: Double , _ b: Double) -> Double {
    return (a + b) / 2.0
}

print(clAverage(23, 65))
print(clAverage(23.3, 65.2))
出力
44
44.25

■可変長引数の関数
可変長引数は引数の個数を指定しないような関数のこと。可変長引数で宣言された引数は配列として扱われる。

func average(_ numbers: Int...) -> Int {
    var sum:Int = 0

    for number in numbers {
        sum += number
    }

    return sum / numbers.count
}

print(average(60, 95, 77, 83, 52))
出力
73

【所感】

関数をメインに。AndroidやiOSと言ったアプリ系の言語だから当然かもしれないですが、スコープの概念にローカルとグローバルがある方が好きです。第三回までやってきて思いますが、個人的にSwiftはかなり良い所取りしてる扱いやすい言語じゃないかなあと思います。

【参考】

https://qiita.com/makopy_inside/items/e3e73ff10b946be0a1c2

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away