define か const か?
Objective-C を書いていてたまに気になるのが、タイトルの件。
定数を使用するときに、 define を使うべきか、 const を使うか。
Objective-C でどうするのがよいか、というのはあまり見つけられなかったが、C++ ではおおよそ、const を推奨しているようです。
理由を見ると、Objective-C でも同様に const を使用した方がよさそうですね。
主な理由は以下の4点
- 型がはっきりする
- 名前空間の問題
- 変更不可にするため
- 間違い防止
型がはっきりする
define だと、型が無いため、なんにでも代入可能になってしまう。const で明示した方が安全。
名前空間の問題
const では スコープが決められるため重複の心配が少ない。また、内部仕様変数のアクセス制限もかけられる。defineではグローバルスコープになってしまうため影響範囲が大きくなる心配がある。
変更不可にするため
define で定義した物は undef などで上書きされる可能性もある。