Obj-Cメソッドの戻り値の型は「BOOL」が良いと思う

Objective-Cのメソッドの戻り値の型は「BOOL」が良いと思っています。
こう書くと、何でもかんでも「BOOL」にするべきだと、言っているように誤解されてしまいますね。「BOOL」にした方が良いと思うのは、次のタイプのメソッドのときです。

  • 成功したのか失敗したのかを返すとき

C言語であれば、成功したかどうかを返すときは、エラーコードを返すことが多くあります。エラーコードは一般的には整数型です。そして、エラーコードとして一般的に使われるのは、「0はエラー無し」という定義です。
MacのCarbonの関数でも「noErr」という定数が定義されていて、「エラー無し」を示し、この定数の値は「0」です。
Objective-Cでも同様に、戻り値の型を整数型にしてエラーコードを返すようにすることはできますが、ちょっと考えると不便な点が出てきます。
今、「MyObject」というクラスがあるとし、そのクラスには「doSomething」というメソッドがあるとします。このメソッドは、エラーコードを返し、成功したら「noErr」を返すものとします。それと、「MyObject」クラスの共有インスタンスを返す「sharedInstance」というメソッドもあるとします。

次のようなコードを考えてみます。

特におかしなところはないコードです。ここで、「sharedInstance」が、このクラスを使用できないマシンでは「nil」を返すとするとちょっと問題が起きます。「obj」が「nil」になってしまうと、「[obj doSomething]」は「0」になってしまい、「noErr」になってしまいます。「obj」が「nil」ということは、クラスを使用できないので「doSomething」も失敗なのにです。「obj」が「nil」ではないかどうかをチェックすることもできますが、それよりも、Objective-Cの特徴を活かして、戻り値の型を「BOOL」にしてみると次のようになります。

このようにすると、失敗したときは「NO」が返り、「obj」が「nil」のときは「0」なので「NO」という解釈になります。「obj」が「nil」のときも、本当に「doSomething」が失敗したときも同じ扱いになります。
このような理由で「成功したのか失敗したのかを返すとき」は「BOOL」にした方が良いと思います。

関連記事

  1. テレビに付けるデバイスが楽しい

  2. Surface RTを入手しました

  3. MOSADeN ONLINE 第24回の記事を入稿しました

  4. 文章の執筆にも課題管理をすると捗る

  5. Outlook 2007 が突然起動しなくなってしまったときの解決方法…

  6. OpenCLが利用可能なプラットホームについて

最近の著書

最近の記事