読者です 読者をやめる 読者になる 読者になる

iyuichiの私的開発ログ

渋谷で働くWebエンジニアのログ. Java, Android, iOS, Docker, GCP, AWS, ゲーム開発

OptionalでNullPointerExceptionが無くなるのかな?

開発

アップルの新プログラミング言語であるSwift

SwiftにはOptionalという型があって、こいつだけがnilを許容するとのこと。

var serverResponseCode: Int? = 404

serverResponseCode = nil

こんな風に、"?"がOptional型を表すシンタックスシュガーになっていてOptionalと書く代わりに上記のように書けるようです。

Optional Binding

Optionalの良いなと思った点が"Optional Binding"

var possibleNumber = "123"

if let actualNumber = possibleNumber.toInt() {

println("'(possibleNumber)' has an integer value of (actualNumber)")

} else {

println("'(possibleNumber)' could not be converted to an integer")

}

// prints "'123' has an integer value of 123"

possibleNumberがStringで、toIntという数値に変換するメソッドをコールしたとき戻り値はOptionalになるようです。この場合、上記のようにifステートメント内でconstantに代入して検査することで値の参照が可能になります。

これをしない場合、"!"を付けることで強制的に参照することができるようですがそれをするとjavaで言う所のNullPointerException的な状態が起こり得ます。ので値のチェックを忘れないでコンパイル時に気づけるOptionalの仕様はいいかもなと思いました。

    println("'(possibleNumber)' has an integer value of (actualNumber!)")

元々、Object-Cではnilオブジェクトを参照したときエラーにならないで無視される仕様だったんですね。

便利そうで、潜在的なバグを生みやすいということでSwiftの仕様の方が良さそうです。

詳細!Swift iPhoneアプリ開発 入門ノート Swift 1.1 Xcode 6.1 iOS 8.1対応