見出し画像

#5 「条件分岐」Swiftを分かりたい(プログラミング素人の備忘録)

どうも。
久しぶりにプログラミングをやっていこうと思います。ケッシテC#ニアキタワケデハナイデスヨ。

注意

この記事(今シリーズ)は初心者がSwiftをかじりながら、備忘録のような形で投稿していく予定です。
そのため、今シリーズ全体を通して信憑性は非常に低いです。
また専門の方などから見れば、無茶苦茶なこと、おかしなことをしているかもしれませんがご容赦ください。

前回


条件分岐

プログラミングでは変数などの条件によって動作を変えることができます。これを条件分岐と言いそう。

if文

もし~なら~すると言った構文です。条件式の()は省略可能なようですが、自分の場合は()ありのほうが慣れてるのでつけてます。

if

条件に合った場合にブロック内の処理を実行する。合わない場合はスルーされる。

if(条件式){
    //条件に合う場合は実行される
}


hogeが0以上の場合に"hoge >= 0"を表示する。hogeは1行めで0が代入されるため常時表示される。

var hoge = 0

if(hoge >= 0){
    //hogeが0以上の場合の処理
    print("hoge >= 0")
}
//結果
hoge >= 0

if else

if文に「~でないなら」という条件を追加したもの。

if(条件式){
    //条件に合う場合
}else{
    //条件以外の場合
}


hogeが0以上出ない場合(すなわちhoge < 0)に"hoge < 0"を表示する。ただ1行目で0を代入しているため絶対にelse内のコードは実行されない。

var hoge = 0

if(hoge >= 0){
    //hogeが0以上の場合の処理
    print("hoge >= 0")
}else{
    //それ以外の場合の処理
    print(hoge < 0)
}
//結果
hoge >= 0

else if

上の条件に合わないかつ別の条件に合う場合。

if(条件式1){
    //条件式1にあう場合
}else if(条件式2)
    //条件式1に合わなかったかつ条件式2に合う場合
}else{
    //それ以外
}

 例
hogeが0以上の場合"hoge >= 0"、hogeが-10以上0未満の場合"-10 <= hoge < 0"、hogeが-10未満の場合"hoge < -10"と表示する。

var hoge = 0

if(hoge >= 0){
    //hogeが0以上の場合の処理
    print("hoge >= 0")
}else if(hoge >= -10){
    //hogeが0より小さく-10以上の場合の処理
    print("-10 <= hoge < 0")
}else{
    //上記以外の場合
    print("hoge < -10" )
}
//結果
//hoge >= 0

複数の条件式

論理演算子を利用して複数の条件を設定することもできます。これらの演算子を複数の式の間に挟むことでそれらの式を複数設定できます。

かつ(&&)

条件式と条件式2が共に満たされた場合。

if(条件式 && 条件式2){
    //双方の条件式が満たされた場合に実行される
}

hogeが0以上10以下のときに"0 <= hoge <= 10"を表示するプログラムです。

if(hoge >= 0 && hoge <= 10){
    //hogeが0以上10以下のとき実行される
    print("0 <= hoge <= 10")
}

または(||)

条件式の内いずれかが満たされた場合。

if(条件式 || 条件式2){
    //条件式か条件式2のどちらかが満たされた場合に実行される
}

hogeが10以上もしくは0以下の場合に"hoge >= 10 hoge <= 0"を表示する。

if(hoge >= 10 || hoge <= 0){
    //hoge10以上もしくは0以下の場合
    print("hoge >= 10 hoge <= 0")
}

でない(!)

値のtrue,falseを反転させる。これは複数の条件ではないですが論理演算子繋がりで。また!を使用できるのはbool値のみです。

ちょっとよく分かってません。おそらくelseなしでif elseを使用できるといったところでしょうか。

//bool値はtrue
if(!bool値){
    //bool値がfalseだった場合
}

ちなみにこれにelseを入れるとtrueだった場合もかけます。普通のifをひっくり返しただけですね。

var hoge = true

if(!hoge){
    print("hoge = false")
}else{
    print("hoge = true")
}
//結果
//hoge = true

if文のネスト(入れ子)

if文の中にifを入れれば条件1と条件2を共に満たした場合に実行することができます。論理演算子とは違ってあるif文内で条件1を満たすが条件2には満たさないものも書きたいときに使えます。

if(条件1){
    //条件1を満たす場合
    if(条件2){
        //条件1を満たした上で条件2も満たす場合
    }
}


hogeが10も超えた場合は"hoge >= 10"と表示する。("hoge >= 0"も表示される)

var hoge = 0

if(hoge >= 0){
    //hogeが0以上の場合の処理
    print("hoge >= 0")
    if(hoge >= 10){
        //hogeが0以上かつ10以上の場合
        print("hoge >= 10")
    }
}
//結果
hoge >= 0
hoge >= 10

nil判定

ifを使ってnilを安全に判定できます。詳細は#2「オプショナル型」を参照してください。

var str: String? = "hello"
if let s = str {
    print(s)
}else{ //これはなくてもいい
    print("nilです")
}

Switch文

switch文では複数の条件を並行に設定できる文です。case文の最後に:をつけるのを忘れないように。以上とか以下とかではなくifでいう「==」しかできないです。

ちなみにcaseをインデントするかどうかはどちらでも動作はしそうです。言語ごとにも宗派のようなものがあったりして、好きでいいんじゃないって感じです。

case

switch(条件に使う値){
case 条件:
    //条件を満たす場合
case 条件2:
    //条件2を満たす場合
default:
    //それ以外の場合
}


hogeが0の場合"hoge = 0"、hogeが1の場合"hoge = 1 "、それ以外は"hoge"を表示します。

var hoge = 0

switch(hoge){
case 0:
    print("hoge = 0")
case 1:
    print("hoge = 1")
default:
    print("hoge")
}

break

breakとは繰り返しなどから意図的に抜ける処理です。swiftではcase内になんらかの処理があればbreakはいらないようです。

var hoge = 0

switch(hoge){
case 0:
    print("hoge = 0")
case 1:
    print("hoge = 1")
case 2:
    break //2だった場合はswitch文の外に出る
default:
    print("hoge")
}

複数の場合

複数の場合はcase文にて,を挟んで設定します。

var hoge = 0

switch(hoge){
case 0:
    print("hoge = 0")
case 1:
    print("hoge = 1")
case 2, 3:
    //hogeが2か3だった場合
    print("hoge = 2 or 3") 
default:
    print("hoge")
}

まとめ

今回は条件分岐でした。
一応構文を…

if(条件式1){
    //条件式が満たされた場合
    if(条件式2){
        //条件式1を満たすかつ条件式2も満たす場合
}else if(条件式3){
    //条件式1を満たさないかつ条件式3を満たす場合
}else{
    //上記以外の場合
}
if(条件式1 && 条件式2){
    //条件式1を満たすかつ条件式2も満たす場合
}
if(条件式1 || 条件式2){
    //条件式1を満たすまたは条件式2を満たす場合
}
if(!bool値){
    //bool値がfalseの場合
}
switch(条件に使う値){
case 条件:
    //条件を満たす場合
case 条件2:
    //条件2を満たす場合
case 条件3, 条件4:
    //条件3を満たすまたは条件4を満たす
default:
    //それ以外の場合
}

次回

繰り返しかなぁ~

参考


この記事が気に入ったらサポートをしてみませんか?