3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Null参照エラーを撲滅するために

Last updated at Posted at 2016-09-04

クイックソートの発明者として知られるアントニー・ホーアは同時に、
プログラマにとっては馴染み深い Null の生みの親でもあるが、
氏は次のような後悔を口にしておられる。

これ(Null)は、後に数え切れない過ち、脆弱性、システムクラッシュを引き起こし、
過去40年間で10億ドル相当の苦痛と損害を引き起こしたとみられる。

そうなのである。
多分、Null参照が原因のバグは全体の1割はある気がする(適当)。

そんなわけで、この忌まわしきNull参照を撲滅するための対策を考えみた。

##その1 Nullを返さない
メソッドの戻り値としてNullを返さないようにする。
配列を返して、受け手側でループで処理しよう。
また、どうしても配列の先頭要素を取得してそれを返したい場合は、
Nullの時は空のインスタンスを返そう。
(NullObjectパタンを使ってもいいが全部のオブジェクトに対してこれを定義するのはしんどいので、重要なものだけにするのがよいと思う)

##その2 Nullを代入しない
値の初期値にNullを代入しない。
stringの場合は空文字列、数値の場合は0、オブジェクトの場合は空のインスタンス(もしくはNullObject)を設定する。
「= nil」は絶対に認めない!

##その3 Swiftを使う
人類は学んだ。Nullを代入できなければ、Null参照など発生しないことを。
Swiftはデフォルトの型でNullの代入ができない。
なので、以下のようなコードはエラーになりコンパイルできない。

default.swift
var normalStr : String = null
=> エラー

Nullを代入するにはオプショナル型を使わなければならない。

optional.swift
var normalStr : String? = null

ビルド時にオプショナル型の使用を検知するような仕組みを作っておけば、
Null参照が起こる可能性を0にできる。

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?