【Swift】switch文

switch文とは、変数や定数の値によって処理を分岐したい場合に使う制御構文です。
基本的にはif文で同じ処理を実装する事ができますが使いわけとしては、
複雑な条件分岐であればif文の方が適していますが、単純な条件や分岐が多い場合はswitch文が適しています。

前回は guard文 について書きました。

今回は switch文 について書いていこうと思います。

switch文とは

switch文 とは、変数や定数の値によって処理を分岐したい場合に使う制御構文です。
基本的には if文 で同じ処理を実装する事ができますが使いわけとしては、
複雑な条件分岐であれば if文 の方が適していますが、単純な条件や分岐が多い場合は switch文 が適しています。

switch文の書式

 switch 値または式{
 case 値1: 処理1
 case 値2: 処理2
 .
 .
 .
 default: デフォルトの処理
 }

switch キーワードを書いた後に値、または式を書きます。
{ } の中に case キーワードを書いて、値 1 だった場合は処理 1 、値 2 だった場合は処理 2 のように分岐を必要な分、箇条書きします。
値と処理は : で区切ります。
default には、どの case にも当てはまらない場合に実行される処理を書きます。

switch文を使った例

let hp = [50, 75, 100, 125, 150]
let result = Int.random(in: 0 ..< hp.count) //0~4
func strategy(HP: Int){
    switch HP{
    case 50:
        print("めいれいさせろ")
    case 75:
        print("いのちだいじに")
    case 100:
        print("いろいろやろうぜ")
    case 125:
        print("バッチリがんばれ")
    case 150:
        print("ガンガンいこうぜ")
    default:
        print("パルプンテ")
    }
}
strategy(HP: hp[result])

配列hp を定義して、Int型 の値( 要素 )を複数代入します。
定数result には 0 ~ 4 の整数がランダムに代入されるようにして、インデックス番号として使います。
この 定数resulthp[ result ] として、 配列hp の 0 ~ 4 番目の中からランダムで要素にアクセスします。
ランダムに選択された要素の値によって処理を分岐して、値と一致した case があれば、その case の処理を実行します。
値がどの case にも当てはまらない場合は、default の処理が実行されます。
関数strategy の引数に hp[ result ] を指定して実行すると、ランダムに選択された値によって switch文 で処理を分岐します。

switchコードimg

範囲演算子を使った switch文 の例

switch文case に範囲演算子を使うことで、値がその範囲に含まれているかどうか判定することができます。

let hp = [50, 75, 100, 125, 150]
let result = Int.random(in: 0 ..< hp.count) //0~4
print(result)
func strategy(HP: Int){
    switch HP{
    case 0...50: //0~50
        print("めいれいさせろ")
    case 51...75: //51~75
        print("いのちだいじに")
    case 76...100: //76~100
        print("いろいろやろうぜ")
    case 101...125: //101~125
        print("バッチリがんばれ")
    case 126...150: //126~150
        print("ガンガンいこうぜ")
    default: 
        print("パルプンテ")
    }
}
strategy(HP: hp[result])

case に範囲演算子を使って、値がどの case の範囲に当てはまるか判定して、当てはまった case の処理を実行します。

範囲演算子 についてはこちらの記事で紹介しています。

switchコードimg2

上の例では 関数strategy の引数を Int型 で指定していますが、FloatDouble型 を指定すると、FloatDouble型 の値を判定することもできます。

let hp:[Float] = [50.0, 75.0, 100.0, 125.0, 150.0]
let result = Int.random(in: 0 ..< hp.count) //0~4
print(result)
print(hp[result])

func strategy(HP: Float){
    switch HP{
    case 0.0...50.0: //0.0~50.0
        print("めいれいさせろ")
    case 51.0...75.0: //51.0~75.0
        print("いのちだいじに")
    case 76.0...100.0: //76.0~100.0
        print("いろいろやろうぜ")
    case 101.0...125.0: //101.0~125.0
        print("バッチリがんばれ")
    case 126.0...150.0: //126.0~150.0
        print("ガンガンいこうぜ")
    default:
        print("パルプンテ")
    }
}

strategy(HP: hp[result])
switchコードimg3

これと同じ処理は if文 でも書くことができますが、else if をいくつも重ねて書くことになると思います。 条件や分岐の数によっては読みづらいコードになることもあると思うので、こういった単純な条件で分岐が多い場合などは switch文 で書いた方が可読性は高いかもしれません。
以上 switch文 についてでした。

次回は class について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

【Swift】for文と範囲演算子

for文とは繰り返し構文のことで、for-in文とも言います。
指定した回数分の処理を繰り返す事ができる構文です。同じ処理を複数回ループさせたい時に使います。
範囲演算子とはfor文と一緒に使うことが多い演算子で、開始値から終了値までの範囲を決めるときに使います。
まずはよく使う範囲演算子からみていきましょう。

前回は if文 と if-else文 について記事を書きました。

今回は for文 と範囲演算子について書いていこうと思います。

for文と範囲演算子とは

for文 とは繰り返し構文のことで、for-in文 とも言います。
指定した回数分の処理を繰り返す事ができる構文です。同じ処理を複数回ループさせたい時に使います。
範囲演算子とは for文 と一緒に使うことが多い演算子で、開始値から終了値までの範囲を決めるときに使います。
まずはよく使う範囲演算子からみていきましょう。

範囲演算子の種類

範囲演算子意味
終了値を含む
..<終了値を含まない

この 2 種類がよく使われる範囲演算子だと思います。

for文の書式

for 定数名 in 整数A 範囲演算子 整数B {
 繰り返したい処理
 }

for文 は頭に for キーワードを付けます。
定数名は何でもいいですが、基本 ij とすることが多いと思います。
整数 A より、整数 B の方が大きい整数でなければエラーになります。

for文 の書き方

//for文の書き方例1
for i in 1 ... 10 {
    print(i)
}

この例は print( i ) を 10 回ループさせる例です。
範囲演算子の は、終了値を含む演算子なので 1 ~ 10 回目までループします。

※コードの流れ
i には最初 1 が代入される

print( i ) を実行

for文 の閉じかっこ } まで処理が来たら一度破棄される

戻って次は i2 が代入される

また print( i ) を実行、、、
という流れで回数分コードが読まれていきます。

//for文の書き方例2
for i in 1 ..< 10 {
    print(i)
}

この例は上の例 1 と似ていますが、範囲演算子が から ..< に変わっています。
この ..<終了値を含まない演算子なので、ループする回数は 1 ~ 9 回目までとなります。

for-inコードimg

Int型 の変数や定数であれば、範囲の所を a ba ..< b のような書き方も出来ます。

var a = 1
var b = 10

for i in a ... b {
    print("\(i)回目")
}

for i in a ..< b {
    print("\(i)回目")
}
for-inコードimg2

インクリメントとデクリメント

インクリメントとは、何かの数字に 1 足すことをインクリメントと言います。
デクリメントはその逆で、何かの数字から 1 引くことをデクリメントと言います。

例えば 1 を 10 回インクリメントしたい時、for文 を使わず書くとこうなります。

var a = 0
a = a + 1
a = a + 1
a = a + 1
a = a + 1
a = a + 1
a = a + 1
a = a + 1
a = a + 1
a = a + 1
a = a + 1
print(a) //10

1 行 1 行インクリメントしていかないと 10 回足せません。
これを for文 で書きます。

var a = 0

for _ in 1 ... 10 {
    a = a + 1
}
print(a) //10

結果は同じで、コードが短くなりました。可読性も向上したと思います。

for文 の定数名の所がアンダーバー _ になっていますが、これは for文 の中の処理で使わない場合に、アンダーバー _ として省略になっています。
以上 for文 と 範囲演算子 についてでした。

次回は 複合代入演算子 について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

【Swift】if文とif-else文

if文とは、条件式によって処理を分岐したい場合に使う構文で、もし〇〇だったらこの処理、もし〇〇じゃなかったら別の処理、どっちにも当てはまらない場合はこの処理、のように処理を分岐させたい場合に使う構文です。
条件式がtrueであれば、if文の処理が実行されて、falseであればそのif文の処理はスキップされます。

前回は 論理演算子 について記事を書きました。

今回は if文 と if-else文 について書いていこうと思います。

if文とは

if文 とは、条件式によって処理を分岐したい場合に使う構文で、もし〇〇だったらこの処理、もし〇〇じゃなかったら別の処理、どっちにも当てはまらない場合はこの処理、のように処理を分岐させたい場合に使う構文です。
条件式が true であれば、if文 の処理が実行されて、false であればその if文 の処理はスキップされます。

if文の書式

if文 は、もしそうであれば( Bool値true であれば )この処理を実行します。という構文です。
Bool値false だった場合 if文 はスキップされます。

 if Bool値、または条件式 {
     Bool値、条件式の結果がtrueであればこの中の処理が実行される
     trueでなければこのif文はスキップされる
 }

if文 は頭に、if キーワードを付けます。

if文のを使った例

//if文の書き方例
var a:Bool = true
var b:Bool = false

if a {
    print("あいうえお") //aはtrueなのでこのif文の処理が実行されます
}

if b {
    print("かきくけこ") //bはfalseなのでこのif文はスキップされます
}
if-elseコードimg

比較演算子を使った if文

書式

var a = 1
var b = 2

if a > b {
    aとbの条件式の結果がtrueであればここの処理が実行されます
}

比較演算子 についてはこちらの記事で紹介しています。

比較演算子を使った if文 の例

//比較演算子を使ったif文の例
var HP:Int = 30 //好きな整数を代入してください

//もしHPが80より大きかったらこのif文は実行されます(80は含まれない)
if HP > 80 {
    print("ガンガンいこうぜ")
}

//もしHPが60以上であればこのif文は実行されます(60も含まれる)
if HP >= 60 {
    print("じゅもんつかうな")
}

//もしHPが30以下であればこのif文は実行されます(30も含まれる)
if HP <= 30 {
    print("いのちだいじに")
}

Int型変数HP には 30 が代入されています。
1 つ目の if文 の条件は HP80 より大きかったら実行されます。( 80 は含まれない )
2 つ目の if文 の条件は HP60 以上であれば実行されます。( 60 も含まれる )
3 つ目の if文 の条件は HP30 以下であれば実行されます。( 30 も含まれる )
変数HP の値には 30 が代入されているので、当てはまっている 3 つ目( 1 番下 )の if文 のみ実行されて、他 2 つの if文 はスキップされます。

if-elseコードimg

if-else文

if-else文 は、if文Bool値 、または条件式が false だった場合 if文 の処理はスキップして、else文 の処理を実行するという構文です。

if-else文 の書式

if Bool値、または条件式 {
    Bool値、または条件式がtrueであればここの処理が実行されます
} else {
    Bool値、または条件式がfalseであればここの処理が実行されます
}

else文 は、else キーワードを書いて中括弧 { } の中に処理を書きます。

if-else文 を使った例

//if-else文の書き方例
var a:Bool = false

if a { //aがtrueであればこのif文の処理が実行されます
    print("aの値はtrueです")
} else { //aがtrueでなければこのelse文の処理が実行されます
    print("aの値はfalseです")
}
if-elseコードimg3

比較演算子を使った if-else文

書式

var a = 1
var b = 2

if a > b {
    aとbの条件式がtrueであればここの処理が実行されます
} else {
    aとbの条件式がfalseであればここの処理が実行されます
}

比較演算子 についてはこちらの記事で紹介しています。

比較演算子を使った if-else文 の例

//比較演算子を使ったif-else文の例
var point:Int = 99 //好きな整数を代入してください

//もしpointの値が100以上であればこのif文が実行されます
if point >= 100 {
    print("レベルが1上がった!")
//そうでなかったら(pointの値が99以下だったら)このelse文が実行されます
} else {
    print("\(point)の経験値をかくとく!")
}

Int型変数point には 99 が代入されています。
point の値が 100 以上であれば true になり、if文 の処理が実行されます。
99 以下であれば false になるので、else文 の処理が実行されます。
上の例では print(\(point)の経験値をかくとく!”) が実行されます。

if-elseコードimg5

point の値を 100 以上に変えると if文 の条件式は true になるので、
if文print(“レベルが1上がった!”) が実行されます。

else-if

分岐を増やしたい場面もよく出てくると思います。
そんな時は else-if を使うことで分岐を増やすことが出来ます。
if文 の後に else if キーワードを書いて その後に条件式を書き、{ } の中に処理を書きます。

書式

var a = 1
var b = 2

if a > b {
    aとbの条件式がtrueであればここの処理が実行されます
} else if a < b {
    上の条件式がfalseであれば、次にこのelse-if文が判定され、もしtrueであればここの処理が実行されます
} else {
    上の条件式がどれもfalseであればここの処理が実行されます
}

else-if で分岐を増やす例

//else-ifで分岐を増やす例
var jp = 3
var us = 2

if jp > us { //jpの値がusより大きかったら
    print("Japan Winner!")
    
} else if jp < us { //jpの値がusより小さかったら
    print("USA Winner!")
    
} else { //上の条件式がどれもfalseであれば
    print("Draw!")
}

まず最初の if文 の条件式が判定されて、false であれば次の else-if文 の条件式が判定されます。そして else-if文 の条件式も false だった場合に else文 が実行されるという流れになります。

jp の値が us の値より大きければ print(“Japan Winner!”)
jp の値が us の値より小さければ print(“USA Winner!”)
上の 2 つの条件式が false つまり同じ値であれば print(“Draw!”)
が実行されます。

上記の例では 変数 jp3変数us2 が代入されています。
最初の if文 の条件式で true になるので print(“Japan Winner!”) が実行されます。

if-elseコードimg4

これで分岐を増やす事ができましたが、分岐の数が 3 つや 4 つ、またはそれ以上になってくるととても読みづらくなってきます。そういう場合は if文 とは別に Switch文 という条件分岐出来る構文があるので、そっちの方がいい場合もあります。
Switch文 についてはまた今度書こうと思います。

比較演算子と論理演算子を使った if文

書式

var a = 1
var b = 2
var c = 3

//&&(and、かつ)
if a < b && b < c {
   aがbより小さい かつ bがcより小さい場合にここの処理が実行される
}

//||(or、または)
if a > b || a < c {
    aがbより大きい または aがcより小さい場合にここの処理が実行される
}

&& (and、かつ)演算子は、左辺と右辺の値がどっちも true の時のみ実行されます。
|| (or、または)演算子は、左辺と右辺の値どちらかが true であれば実行されます。

比較演算子 についてはこちらの記事で紹介しています。

論理演算子 についてはこちらの記事で紹介しています。

比較演算子と論理演算子を使った if文 の例

//比較演算子と論理演算子を使ったif文の例
var kokugo = 60
var eigo = 80

//&&
if kokugo >= 80 && eigo >= 80 { //kokugoが80以上かつ、eigoが80以上であればここの処理が実行されます
    print("合格!")
} else { //上の条件から外れた場合はここの処理が実行されます
    print("不合格!")
}

//||
if kokugo >= 80 || eigo >= 80 { //kokugoが80以上または、eigoが80以上であればここの処理が実行されます
    print("合格!")
} else { //上の条件から外れた場合はここの処理が実行されます
    print("不合格!")
}

変数kokugo60eigo80 が代入されています。


上の if文 は、kokugo の値が 80 以上かつ、eigo の値が 80 以上であれば実行されます。
&& は左辺と右辺の両方の値が true でなければ実行されないので、この if文 はスキップされて、else文 が実行されます。

下の if文 は、kokugo の値が 80 以上または、eigo の値が 80 以上であれば実行されます。
|| は左辺と右辺どちらかが true であれば実行されるので、この if文 の処理が実行されて、else文 はスキップされます。

if-elseコードimg6

以上 if文 と if-else文 についてでした。結構よく使う構文なので押さえておきたいポイントだと思います。

次回は for文 について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/