2015年9月26日土曜日

【Xcode / Swift入門】条件分岐とループ制御について

本稿では、Swiftの条件分岐とループ制御、つまりif文、switch文、for文、while文、について説明していきます。


if文

if文はSwiftを含め他のプログラム言語でも非常によく使用される条件分岐の構文です。日本語訳と一緒で、「もし〜だったら◯◯」といった使い方をし、下記のように記述します。

if 条件{ ◯◯ }

上記の場合は、”もし条件が正しければ、◯◯を実行する”という意味になります。

ifとセットになって必要になるのが、elseです。elseも日本語訳通り、「その他の」といった使い方をし、下記のように記述します。

    
if 条件1 {
    もし条件1が正しい場合、ここに記載された構文を実行する
} else if 条件2 {
    もし条件2が正しい場合、ここに記載された構文を実行する
} else {
    上のどの条件にも当てはまらない場合、ここに記載された構文を実行する
}

ここで、注意が必要なのですが、ifの後ろの”条件”には、正しいか正しくないか判断する構文を記載する必要があります。つまり、ifの後ろはtrue or false で返すBool型である必要があります。

また条件には、&&や||の記号を使用することにより、複数の条件をANDやORで連結することも可能です。
    
if 条件1 && 条件2 {
    もし条件1と条件2が正しい場合、ここに記載された構文を実行する
} else if 条件3 || 条件4 {
    もし条件3もしくは条件4が正しい場合、ここに記載された構文を実行する
} else {
    上のどの条件にも当てはまらない場合、ここに記載された構文を実行する
}

それでは、Playgroundにて下記のようなソースコードを記述してみます。

var result2:Int = 0

var time : Int
time = 25
if time < 5 {
    print("もう\(time)時だ。早く寝よう。")  
}else if time < 10 {  
    print("\(time)時ですね。おはようございます")
}else if time < 15 {  
    print("\(time)時ですね。こんにちは")
}else if (time < 17) {   
    print("\(time)時ですね。お疲れ様です")
}else if (time < 24) {
    print("おやすみなさい")
}else {
    print("エラー:そんな時間はありません")
}



結果を見てわかる通り、timeの値により条件分岐されています。







※C言語やJavaなどでは、if の後ろの条件式は、()をつけるする必要がありますが、Swiftでは、()は不要です。もちろんつけても問題ないです。


switch文

switch文は値によってコードを切り替えてくれる、つまりスイッチしてくれる条件分岐の構文になります。 casedefaultという値を使って、下記のように記述します。
    
switch 比較する変数や定数 {
case 値1:
    比較する変数や定数が値1と一致する場合の処理
case 値2:
    比較する変数や定数が値2と一致する場合の処理
case 値3,値4:
    比較する変数や定数が値3もしくは値4と一致する場合の処理
 default:
    どれとも一致しなかった場合の処理
}


また、caseは、範囲指定も可能です。範囲指定する場合は、値と値の間を「...」で結びます。

例えば、1〜10と範囲指定したい場合は、
case 1...10:
と記述します。

それでは、if文のときと全く同じ結果になるようにSwitch文でも記述したいと思います。

var time : Int

time = 17
switch time {
case 0...5:    
    print("もう\(time)時だ。早く寝よう。")    
case 6...10:   
    print("\(time)時ですね。おはようございます")
case 11...15:   
    print("\(time)時ですね。こんにちは")   
case 16...17:   
    print("\(time)時ですね。お疲れ様です")   
case 18...24:   
    print("おやすみなさい")
default:
    print("エラー:そんな時間はありません")
}

下記の結果をみてわかる通り、timeの値によって、表示する文字列が分岐(スイッチ)されていることがわかると思います。




for文

for文は、繰り替え処理を実行することができるループ制御の構文です。記述方法として、下記2種類あります。
    
①
for 変数定義 in スタート値...終了値 {
    繰り返し実行する処理
}

②
for 初期処理(変数定義など);  繰り返し条件(どういう場合に繰り返すのか); 後処理(変数値を増やすなど) {
    繰り返し実行する処理
}

①の場合、forの後に定義した変数にスタート値〜終了値までを代入し、その回数分、処理を繰り返します。
例えば、
for index in 1...10{
処理1
}
と記述した場合は、
indexに”1”を代入し処理1を実行、indexに”2”を代入し処理1を実行・・・indexに"10"を代入し、処理1を実行、終了
という動作をします。

②の場合、初期処理にて定義した変数を用いて、その変数が繰り返すための条件を記載し、
例えば、
for var i = 0; i<10; i++{
処理1
}

と記述した場合、
iが10より小さい場合は、処理1を実行し、処理1が終われば、i++(iを1増加)させる
という処理になります。

では、実際にPlaygrundでどういう動きをするか見てみましょう。
2つのパターンで、1〜10の足し算をしてみたいと思います。

下記のように記載してください。
    
var result1:Int = 0
for index in 1...10{   
    result1 = index + result1
}
print(result1)
var result2:Int = 0
for var i = 0; i <= 10; i++  {    
    result2 = i + result2
}
print(result2)

どちらのコードも、数字を1ずつ増やしそれを足していっていることがわかると思います。
また、結果を見てもわかる通り、どちらも1〜10が足されて、55が出力されていることが確認できると思います。


while文

While文はfor文と同じく繰り返し処理を行うループ制御の構文です。While文はfor文と違い繰り返し回数が不明の場合(何回繰り返すかわからない、もしくは決まっていない場合)、使用します。記述方法としては、以下の2種類があります。

①繰り返し条件を始めに記載する方法
 ※繰り返し条件に一致しない場合、何も実行されない

    
while 繰り返し条件{
 繰り返す処理
}

②繰り返し条件を終わりに記載する方法
 ※繰り返し条件に一致しない場合、repeatに記載がある処理を1回だけ実行される

    
repeat{
    繰り返す処理
} while 繰り返し条件

※Swift2.0よりdoではなく、repeatを使うようになっています。

では、実際にPlaygrundでどういう動きをするか見てみましょう。
こちらでもfor文と同じく1〜10の足し算について、ソースコードを記述したいと思います。
    
var result1:Int = 0
var i:Int = 1
while i <= 10 {
    result1 = i + result1
    i++
}
print(result1)
var result2:Int = 0
var j:Int = 1
repeat {
    result2 = j + result2
    j++
} while j <= 10
print(result2)



条件分岐とループ制御については、以上です。
次回は、配列(Array)とディクショナリーについて説明したいと思います。




0 件のコメント:

コメントを投稿