我正在编写一个带有 SecretNumber 类的程序,该程序包含一个数字并且有一个方法可以返回猜测是否太低,太正确或正确。
Method返回三个对象之一的对象,定义如下:
@interface TooHigh : NSObject
@end
@implementation TooHigh
@end
@interface TooLow : NSObject
@end
@implementation TooLow
@end
@interface JustRight : NSObject
@end
@implementation JustRight
@end
然后SecretNumber 猜测方法实现如下:
@implementation SecretNumber
{
int Secret;
}
-(id) guessSecret:(int)g
{
if (g>Secret) {
return [[TooHigh alloc] init];
} else {
if (g<Secret) {
return [[TooLow alloc] init];
} else {
return [[JustRight alloc] init];
}
}
}
所以我的问题是这被认为是一个很好的编程形式,或者我最好发回一个1,2,3或三个随机字符(一个意思是太高,另一个意思太低,等等)?
答案 0 :(得分:1)
您可以使用-1
,0
,1
来表示太低,正确或太高< / em>分别。这会减少你的代码大小,并且也很容易理解。
在这种情况下,它可以与条件< 0
,== 0
或> 0
一起使用。
好的程序很简单,可以通过给定程序可以解决的任务数量(通用)来衡量,它有多小(可以测量为代码+文档大小)
答案 1 :(得分:1)
你需要的是一个枚举类型 - 这是一个简单的值类型(例如像int
等,而不是像NSObject
这样的引用类型)一组固定的文字值。例如:
typedef enum { TooLow, JustRight, TooHigh } GuessClasification;
定义新类型GuessClasification
,其中包含三个值TooLow
,JustRight
和TooHigh
。
您可以在类头文件中放置此类型声明。
使用此方法会变成:
- (GuessClassification) guessSecret:(int)g
{
if (g>Secret)
return TooHigh;
else if (g<Secret)
return TooLow;
else
return JustRight;
}
您使用此类型与整数和其他值类型类似,因此您可以使用==
测试相等性,在case
语句中将文字用作switch
值等。< / p>
HTH
答案 2 :(得分:0)
您的解决方案是OO编程的一个很好的例子,并利用多态性。不过,在我看来,它没有任何问题,对于你的简单例子,它是最复杂的“复杂”。这样做的方式。让我们讨论迄今为止用于解决您的情况的选项,从最简单的开始:
简单地返回一个int:就代码行而言,这是最简单的。 SecretNumber将返回-1,0或1,并且调用代码将必须打开这些值,提供处理每种情况的逻辑。这种方法的结论是返回的整数的含义不是很明显,新的情况将意味着修改调用SecretNumber类的所有类。
返回一个枚举:这比返回一个int更好,只是为了附加返回值的含义。可读性和理解力增加。但是,您仍然必须打开返回的枚举类型,并为每个枚举案例提供逻辑。
封装类中每个返回值的行为,并返回一个接口。这就是你所做的,减去行为部分(你的课程是空的&#39;)。这是OO&#39; (这并不是更好或更坏)这三者之一,因为你避免了切换返回类型。这种方式倾向于成为三者中最灵活的一种。如果您将来有不同的案例(比如,值为WAY到高,或者值WAY为低),您就不必触摸调用SecretNumber的代码。
无论哪种方式都有效。但是,我总是会使用枚举返回值而不是整数,如果情况足够复杂,请执行#3而不是#2