【发布时间】:2010-12-10 18:27:24
【问题描述】:
我一直致力于在 Obj-C 中实现NSComparisonMethods 协议的前 6 个功能。我正在为具有以下 @interface
@interface Fraction : NSObject <NSComparisonMethods> {
int numerator;
int denominator;
}
@property int numerator, denominator;
+(int)addCounter;
-(Fraction *)addWithCount:(Fraction *)f;
-(void)print;
-(void)setTo:(int)n over:(int)d;
-(double)convertToNum;
-(int)gcd:(int)d1:(int)d2;
-(int)compare:(Fraction *)f;
// NSComparisonMethods Protocol Methods
-(BOOL)isEqualTo:(Fraction *)f;
-(BOOL)isLessThanOrEqualTo:(Fraction *)f;
-(BOOL)isLessThan:(Fraction *)f;
-(BOOL)isGreaterThan:(Fraction *)f;
-(BOOL)isGreaterThanOrEqualTo:(Fraction *)f;
-(BOOL)isNotEqualTo:(Fraction *)f;
@end
现在,我从协议中实现的功能是isEqualTo。简单地使用一种,或者在这种情况下使用两种工作方法来实现其余部分是一种好的编程习惯吗?
我对这些方法的实现如下:
// NSComparisonMethods Protocol Methods
-(BOOL)isEqualTo:(Fraction *)f{
[self reduce];
[f reduce];
return ((self.numerator==f.numerator)&&(self.denominator==f.denominator));
}
-(BOOL)isLessThan:(Fraction *)f{
return ([self compare:f]==-1);
}
-(BOOL)isLessThanOrEqualTo:(Fraction *)f{
return ( ([self compare:f]==-1) || ([self isEqualTo:f]) );
}
-(BOOL)isGreaterThan:(Fraction *)f{
return ( [self compare:f]==1 );
}
-(BOOL)isGreaterThanOrEqualTo:(Fraction *)f{
return ( ([self compare:f]==1) || ([self isEqualTo:f]) );
}
-(BOOL)isNotEqualTo:(Fraction *)f{
return (![self isEqualTo:f]);
}
而我的比较函数如下:
-(int)compare:(Fraction *)f{
int value = [self gcd:denominator :f.denominator];
if ([self isEqualTo:f]) {
return 0;
} else if ((numerator * (f.denominator/value))>(f.numerator * (denominator/value))) {
return 1;
} else {
return -1;
}
}
所有这些功能都是多余的,我相信有不同的方法来实现它们。我记得过去教授曾经让学生做任何事情都好像从头开始一样,但是,这不违背我们所有人都应该拥有的重用代码的心态吗?
【问题讨论】:
标签: objective-c ios methods computer-science code-reuse