私はJavaコードベースをCocoa/Objective-Cに移植してデスクトップMac OS X上で動作させようとしています。Javaコードにはロットとロットのメソッドがあり、以下のようなチェック例外があります:JavaコードをObjCに移植する際に、チェック例外をどのように表現するのが最適でしょうか?
double asNumber() throws FooException {
...
}
Objective-Cでこれらを表現する最良の方法は?例外またはエラーアウトパラメータ?
- (CGFloat)asNumber {
... // possibly [FooException raise:format:];
}
または
- (CGFloat)asNumberError:(NSError **)outError {
...
}
私はOut-Errorが一般的にObjective-Cの方が優れているという感覚を持っていますが、あなたが見ることができるように...上記のような多くの方法非常に扱いにくいです。また、ロットがあります。
もちろん、これらはJavaで の例外がチェックされているので、@try
ブロックまたは
if (*outError) {...}
チェックをどこにでも追加する必要があります(
ロットの場所)。
Objective-Cでは@try
ブロックに入るのは一度高価でしたが、64ビットやSLや他の新しいenv(正確には思い出さない)では安いと聞きました。私は下位互換性について全く心配していないので、私はです。
私は自宅で一緒に続く人のために、私はアウトエラーに行くとクインのNSScannerのアドバイスに従うことにしました。この特定のメソッドは、次のようなものになります。 ' - (BOOL)getNumber:(CGFloat *)outNumエラー:(NSError **)outErr;' –
@olliejは、@tryブロックが現代ランタイムで「ゼロコスト」であることを正しく指摘します(64ビット版とiPhone版)がありますが、実際に例外を投げると例外が発生します。また、必要に応じて、 'CGFloat'の代わりに' double'を使用することもできます。自分がいる環境と統合するコードのベストプラクティスを実行してください。 –