gpt4 book ai didi

objective-c - Objective-C : if statements and NSString comparison functions for efficiency and readability

转载 作者:行者123 更新时间:2023-12-04 02:36:04 30 4
gpt4 key购买 nike

高效编码的最佳方式是什么,因为这将被递归调用,创建大量对象并不好。 +*-/、sin、cos、sqrt、pi 和 x、y、a、b 应该放在三个单独的 if 语句 中,这与现在所有内容都是分开的不同。同样为了可读性,制作包含 4 个 isEqualToString 的 if 语句也不是很好。

    NSString *operation = topOfStack;
if ([operation isEqualToString:@"+"]) {

} else if ([@"*" isEqualToString:operation]) {

} else if ([operation isEqualToString:@"-"]) {

} else if ([operation isEqualToString:@"/"]) {


} else if ([operation isEqualToString:@"sin"]) {

} else if ([operation isEqualToString:@"cos"]) {

} else if ([operation isEqualToString:@"sqrt"]) {

} else if ([operation isEqualToString:@"pi"]) {


} else if ([operation isEqualToString:@"x"]) {

} else if ([operation isEqualToString:@"y"]) {

} else if ([operation isEqualToString:@"a"]) {

} else if ([operation isEqualToString:@"b"]) {

}

最佳答案

我认为没有最佳方法可以做到这一点,但这里有另一种方法来补充已经给出的答案。

创建一个将操作名称(sin、sqrt、-)映射到选择器的 NSDictionary,如下所示:

NSDictionary *operations = @{
@"sin": [NSValue valueWithPointer:@selector(operationSin:)],
/* other operations here */
};

然后你的 switch 语句变成了一个查找。

NSString *operation = topOfStack;
if(operations[operation]) {
SEL op = [operations[operation] pointerValue];
[self performSelector:op withObject:value]; /* Or some approximation thereof */
}
else {
/* Default action for unknown operation */
}

或者,您可以在您识别的操作上创建一个枚举,使用您的 NSDictionary 将操作名称映射到一个装箱您的枚举值的 NSNumber。

typedef NS_ENUM(NSUInteger, OperationType) {
OperationTypeSin = 0L,
OperationTypeSqrt,
/* and so on */
OperationTypeUnknown
};

/* And later... */
NSDictionary *operations = @{
@"sin": @(OperationTypeSin),
/* you get the idea */
};

/* Finally ... */
NSString *operation = topOfStack;
OperationType opType = [operations[operation] unsignedIntegerValue];
switch(opType) {
case OperationTypeSin:
/* Much cleaner, and type-safe too */
}

关于objective-c - Objective-C : if statements and NSString comparison functions for efficiency and readability,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610641/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com