はじめに
他人のSwiftのコードを見ていると、
(この書き方、あまりSwiftっぽくない。)
と思うことがよくあります。
そこで、私が気になったSwiftの作法について取り上げて行きたいと思います。
第三回は「もう"ぬるぽ"は"ガッ"しなくていい」です。
ぬるぽって何?
ぬるぽ(ヌルポ、NULLPO)は、プログラミング言語であるJavaにおいて、処理に異常が発生したとき(例外)に表示されるメッセージのひとつである java.lang.NullPointerException(またはNullPointerAssignment)の略語。匿名掲示板2ちゃんねるのプログラマー板が発祥とされる。
参考:
https://ja.wikipedia.org/wiki/ぬるぽ
※Swiftではnil参照で落ちる現象を"ぬるぽ"とは言いませんが、本記事では"ぬるぽ"と呼称しています。
具体例
例えば、以下のようなコードを書く人がいます。
よく見るパターン
var nohirap: Int? = nil
NSLog(nohirap!.description)
すみません、上手い"よく見るパターン"が思いつきませんでした。
これは余程の素人でない限りやらない感じですが、実際コードを見ていると、Optional型の扱いが雑になって、"!"でForced unwrappingをしている場面をよく見かけます。
そもそもForced unwrappingってどうなの?
正直私は、使うべきではないと考えています。
Optional型は、強制的にコーダーにnilチェックをさせ、ぬるぽを起こさせない仕組みなのに、それを何のチェックもせずに参照しようとするのはOptional型の意味がないと思うからです。
じゃあどうすれば良いの?
前回の記事「"nil"というリテラルを可能な限り書きたくない」にも載せましたが、以下のように安全にunwrappするのが望ましいと思われます。
Optional binding
var nohirap: Int? = nil
if let nohirap = nohirap {
//nilじゃなければこのifに入る
NSLog(nohirap.description) //ifの中ではアンラップされた状態で扱える
}
Optional Chaining
var nohirap: Int? = nil
NSLog(nohirap?.description ?? "") //nilだったら空文字を表示する
guard
var nohirap: Int? = nil
guard let nohirap = nohirap else {
// nilだったらreturnされる
return
}
NSLog(nohirap.description) //アンラップされた状態で扱える
まとめ
Forced unwrappingを使うと、ぬるぽをガッすることになりかねないので、Optional bindingなどを使い、安全に中身を取り出して参照しましょう。