[iOS 8] Android脳に効く!新言語「Swift」超入門 #3 制御構造

swift_with_android

とりあえず覚えておくといいこと

Swiftは…

  • 条件式に括弧をつけなくてもいい

if文

Javaと違うところと言えば条件式に括弧をつけなくてもいいところくらいで、まったく抵抗無く理解できると思います。

Swift Code

var age: UInt = 27

if age < 6 {
    print("義務教育前です。")
} else if 6...12 ~= age {
    print("小学生")
} else if 13..<16 ~= age {
    print("中学生")
} else {
    print("義務教育を終了しています。")
}

CHECK!
サンプルコード中のハイライトに注目して下さい。 この条件式には範囲演算子パターンマッチを行う比較演算子が含まれています。範囲演算子...で終端を含む範囲、..〈で終端を含まないを表します。パターンマッチでは~=を使って左辺の範囲内に右辺がマッチする場合にtrueを返します。

switch文

文法自体は非常に見た慣れたものですが、switchに使うbreakdefaultの扱い方にJava(Java 6)との違いがあります。

Swift Code

var event = "会議"

switch event {
case "休日":
    print("家族サービス")
case "勉強会", "セミナー": // 複数の条件をカンマ区切りで指定可能
    print("名刺残数を確認")
case "会議":
    print("会議後は恒例の飲み会")
    fallthrough
case "飲み会":
    print("二日酔いに注意")
default:
    print("予定がありません")
}
// 会議後は恒例の飲み会二日酔いに注意

まず、それぞれのcasebreakがありません。Swiftでは暗黙的にbreakしてくれるのでbreakを書く必要はありません。また、Javaでは省略可能であったdefaultが必須になります。

[7行目]にfallthroughというものがあります。ここでは、event会議だった場合に飲み会も実行されます。つまり、fallthroughがあれば次のcaseも実行されるということです。

Android開発者が魅力に感じる最大のポイントは、評価に使えるオブジェクトの種類が豊富ということではないでしょうか。Android開発ではswitchの評価に使うのはほとんどの場合int型で利用シーンも少なかったと思います。しかし、サンプルコードでもわかりますが文字列を評価に使うこともできます。Swiftでswitchは間違いなくできるやつになっています。

for文

for

Java、Swiftのfor文は非常に似ていますね。繰り返し中のインデックスを使用するような場合には次のような書き方をすると良いと思います。

Java Code

final String[] platforms = {"iOS", "Android", "WindowsPhone"};

for (int i = 0; i < platforms.length; i++) {
    System.out.println(platform[i] + "に対応!");
}

// iOSに対応!
// Androidに対応!
// WindowsPhoneに対応!

Swift Code

let platforms = ["iOS", "Android", "WindowsPhone"]

for var index = 0; index < platforms.count; index++ {
    println("\(platforms[index])に対応!")
}

// iOSに対応!
// Androidに対応!
// WindowsPhoneに対応!

for-in

for-in文を使って繰り返し処理を書く事ができます。Javaのfor-each文と同様のものです。

Java Code

final String[] platforms = {"iOS", "Android", "WindowsPhone"};

for (String platform: platforms) {
    System.out.println(platform + "に対応!");
}

// iOSに対応!
// Androidに対応!
// WindowsPhoneに対応!

Swift Code

let platforms = ["iOS", "Android", "WindowsPhone"]

for platform in platforms {
    println("\(platform)に対応!")
}

// iOSに対応!
// Androidに対応!
// WindowsPhoneに対応!
CHECK!

var blogName = "Developers.IO"
println("クラスメソッドのブログ\(blogName)!みんな見てね!!")
// クラスメソッドのブログDevelopers.IO!みんな見てね!!

SwiftではJavaと同様に+等で文字列の連結が可能ですが、\(式)を用いて文字列リテラルに式を埋め込む事ができます。

while文

while、do-while文はJavaとの違いはほとんどありません。

Swift Code

var num1 = 5
while num1 < 8 {
    println("num1: \(num1)")
    num1++
}
// num1: 5
// num1: 6
// num1: 7

var num2 = 10
do {
    println("num2: \(num2)")
    num2++
} while num2 < 5
// num2: 10

まとめ

ここまで、SwiftとJavaを比較しながら制御構造について書いてきました。それぞれの文法はほぼ同じといっていいでしょう。しかし、Swiftの制御構造の方が少し賢いような印象を受けました。評価に使えるオブジェクトや条件の書き方等をおさえておくと、Swiftの理解に役立つのではないかとおもいます。

次回は、関数とクロージャについてです。

バックナンバー

[iOS 8]Android脳に効く!新言語「Swift」超入門 #1 変数の宣言と型
[iOS 8]Android脳に効く!新言語「Swift」超入門 #2 Optional基礎
[iOS 8]Android脳に効く!新言語「Swift」超入門 #3 制御構造
[iOS 8]Android脳に効く!新言語「Swift」超入門 #4 関数とクロージャ
[iOS 8]Android脳に効く!新言語「Swift」超入門 #5 クラスとストラクチャ