LoginSignup
11
8

More than 5 years have passed since last update.

もう"ぬるぽ"は"ガッ"しなくていい

Posted at

はじめに

他人の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などを使い、安全に中身を取り出して参照しましょう。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8