私が本当に気に入っている Java の機能の 1 つは、コンパイラがプリミティブとそのラッパー クラスを自動的に変換するオートボクシングです。
Objective-C/Cocoa で Core Data アプリケーションを作成していますが、整数属性をプログラムで処理するのが面倒です。理由は次のとおりです。
//img is a managed object that I have fetched
NSString* filename = [NSString stringWithFormat:@"image%d.png", [[img valueForKey:@"imageID"] intValue]];
たまたまintValue
メッセージを忘れてしまった場合 (時々そうします)、渡される intstringWithFormat:
は実際にはポインター値です。
問題は、これが完全にサイレントに発生することです。コンパイラ エラーや警告は発生しません。このばかげた、ばかげたことが問題である場合、デバッグに時間がかかりすぎることがあります。
プログラミング スタイルやコンパイラの設定を変更して、その罠に陥らないようにする方法はありますか?
編集:上記の例は、私が問題に遭遇する多くの場所の1つにすぎないという事実について明確ではありませんでした. 文字列とは関係のない別の架空の例を次に示します。
エンティティCollegeClass
には、 と の 2 つの整数属性がcourseNumber
ありenrollmentLimit
ます。コース番号を比較したいとしましょう:
//classFoo is a NSManagedObjects I've fetched
if ([[classFoo valueForKey@"courseNumber"] intValue] < 400) {
NSLog(@"undergraduate class");
}
または、同様に、CS 部門のすべてのクラスの平均登録制限を計算したいとします。