LinqToObjectiveCの中身を覗く
Objective-CのNSArrayやNSDictionaryでwhereやselectなんかを使えるようにするカテゴリがあるという話をしました。
ActiveRecordのようなselectやwhereをObjective-Cで使う - ぴよログ
記事を書いたあと中身を覗いてみたのですが、なんのことはない普通のforループでしたww
たとえば、引数に渡したブロックの戻り値がYES
となる要素だけを返すlinq_where
の実装はこのようになっています。
- (NSArray *)linq_where:(LINQCondition)predicate
{
NSMutableArray* result = [[NSMutableArray alloc] init];
for(id item in self) {
if (predicate(item)) {
[result addObject:item];
}
}
return result;
}
新しいNSArrayを作ってそこに必要なものだけ入れて返しているわけです。他のメソッドもほぼ同じでした。
pros/cons
メリットは自前で書くときと同じようなループ処理を書かなくてよくなる、コードがすっきりすること。
デメリットは多少のオーバーヘッドがあるかも?というところかな。特殊な実装をしているわけではないので敬遠する理由もないでしょうね。