ProgateでSwiftを学ぶ【コース3は関数関係】

progateでswiftコース3

progate Swiftコース3

Progateはプログラミング学習サービスになります。前回と前々回の内容はこちらにまとめています↓

コース2は結構ボリュームがありました。オプショナル型という他の言語にはあまりみられない型もありました。今回はコース3です。それではまとめていきたいと思います。

関数

関数とは処理をひとまとめにしたもので、いろんなところで使えるようにしたものですが、言葉ではわかりにくいので実際のコードを。自分で関数定義する以外にもあらかじめ用意されている関数などがあります。以下は最小値を取得するmin()と最大値を取得するmax()です。

print(min(29, 17, 31))//17
print(max(29,17,31))//31

関数を自作する

関数は自分で自作することができます。自作の関数定義は
【 func 関数名(){} 】のようにします。

自作した関数を呼び出すことで処理を行うことができます。呼び出し方は
【 関数名() 】のように関数名に()かっこをつけて呼び出します。

func printPrice(){
    print("PCは92000円です")
}
printPrice();//92000円です

引数ありの関数

引数とは関数にもたせることができるデータでそのデータを関数の中で使用することができます。といっても文章ではよくわからない可能性が高いのでコードを見てもらったほうがいいかと思います。Swiftの関数は引数にもデータ型を指定してやる必要があります。
引数ありの関数の書き方は
【 func 関数名(引数名: 型, 引数名: 型) 】のように引数とデータを宣言しカンマ区切りでいくつも引数をもたせることができます。

Swiftの関数は関数呼びだしのときも引数名を指定してやります。
【 func 関数名(引数名: 引数の値) 】

func printPrice(price: Int) {
    print("PCは\(price)円です")
}
printPrice(price:120000)//PCは120000円です
printPrice(price:78000)//PCは78000円です

引数に初期値がある関数

引数に初期値がある関数を定義することもできます。引数に初期値がある場合は場合は関数の呼び出し側では引数を省略することも可能です。省略可能ですが呼び出し側で引数をもたせることも可能です。

func printPrice(price: Int, productName: String = "この商品") { //初期値をもった引数
    print("\(productName)は\(price)円です")
}
printPrice(price: 46000);//この商品は46000円です
printPrice(price: 40000, productName: "激安PC");//この商品は40000円です

戻り値ありの関数

戻り値とはなにかというと関数の処理結果を値としてうけとることができるものです。処理結果をうけとるにはreturnキーワードをつかいます。またSwiftの場合は戻り値の型も指定してやる必要があります。書き方は以下のようになります。

【 func 関数名() -> 戻り値の型{} 】のように書きます。実は戻り値なしの関数は、戻り値の型の部分はVoidというものになっているのですがこれは省略できるので書いていません。Voidは覚えてもしょうがないので覚えなくてもよいでしょう。

func halfPrice(price: Int) -> Int{
    return price / 2
}
print("タブレットは46000円です")
let tabletHalfPrice: Int = halfPrice(price: 46000);
print("タブレットの半額は\(tabletHalfPrice)円です")//タブレットの半額は23000円です

複数のreturn

複数のreturnとはなにかというとreturnが一回でも呼び出されると関数の処理が終わるというものです。たとえば条件分岐で複数のreturnキーワードがある場合はどちらか一回でも呼ばれると関数の処理は終わりreturnが呼ばれた値を受け取るということです。

func difference(price1: Int, price2: Int) -> Int {
    if price2 > price1 {
        return price2 - price1;
    }
    return price1 - price2
}
print(difference(price1: 48000, price2: 17000))//31000
print(difference(price1: 17000, price2: 48000))//31000

引数名を省略した関数と外部引数名をもった関数

引数名を省略する関数定義の仕方は以下のようなものです。
【 func hello(_ name: String){} 】_ アンダーバーを記述することによって関数の呼び出し側では引数を省略することができます。【 hello(“tanaka”) 】なお外部の引数の省略で _ アンダーバーを使った場合呼び出し側で引数名を省略しなかった場合はエラーになります。

外部引数をもった関数はややこしいので説明を省略します。ただこういうのは良い部分があるから存在する機能であることが多く、あとからその良さにきづくことがおおいです。とりあえずコードだけのせておきます。

// 引数名を省略するための関数定義 _ 記号を用いる
func average(_ a: Int, _ b: Int) -> Int {
    return (a + b) / 2
}
// 引数名を省略した関数呼び出し
print(average(23, 65))//44
//外部引数名を使った関数定義
func average2(number1 a: Int, number2 b: Int) -> Int {
    return (a + b) / 2
}
print(average2(number1: 23, number2: 65))//44

関数のオーバーロード

オーバーロードとはなにかというと引数の数や引数のデータ型の違いによって 同じ名前の関数 を定義できるというものです。

func average(_ a: Int, _ b: Int) -> Int {
    return (a + b) / 2
}
print(average(23, 65))//44
//関数のオーバーロード↓同盟の関数
func average(_ a: Double, _ b: Double) -> Double{
    return (a + b) / 2.0
}
print(average(23.3, 65.2))//44.25

可変長引数の関数

可変長引数の関数は引数の数が定まっていないときにいくつでも引数を記述できるようにしたものです。
Switf 可変長引数の関数

引数の型の後…ピリオド3つをつけているのがポイントですね。あとは引数のところにアンダーバーがあるのは先ほどの関数呼び出し時に引数名を省略できるようにした関数定義の仕方ですね。可変長引数は配列になっていることもポイントですね。

func average(_ numbers: Int...) -> [Int] {
    return numbers
}
print(average(60, 95, 77, 83, 52))//[60, 95, 77, 83, 52]

可変長引数をひとつひとつ取り出す

可変長引数は配列になっているのでそれをfor文で取り出してやればひとつひとつ処理できますね。次に示す例は可変長引数の配列を取り出して加算し平均を求める関数ですが、そこでcountプロパティを使用します。配列に対してcountプロパティを使うと配列の要素数を取得することができます。

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))

Progate Swiftコース3まとめ

ProgateのSwiftに関してはなんとコース3で終わりになります。今回学んだのは関数関係ですね。Swiftは関数の引数にも型指定をしたり戻り値の型指定が他のプログラミング言語と比べると特殊な感じがします。そこは人によるとおもうのでなんともいえないですが、根本的にやっていることは他の言語とあまり大佐はないですね。

SwiftにもクラスとかがあるとおもうのですがProgateさんもコースを誠意作成中なのかもしれませんね。以上。


Warning: Undefined array key "thumbnail_url" in /home/users/1/boy.jp-rolpop/web/skc/wp-content/themes/godios/inc/schema-org.php on line 49

Warning: Undefined array key "thumbnail_url" in /home/users/1/boy.jp-rolpop/web/skc/wp-content/themes/godios/inc/schema-org.php on line 78