我试图缩短我的代码,来自:
if(i== x || i == y || i == z )
到
if (i == ( x || y || z ))
我知道这种方式是错误的,因为我在日志中得到了错误。
但是,有没有什么方法可以缩短Objective-C中的代码?
答案 0 :(得分:9)
您可以使用switch
声明,但只有2-3个值,这并不会给您带来太大的好处。
switch (i) {
case x:
case y:
case z:
....some code....
break
default:
....some other code....
}
如果你检查的东西更复杂或者你有更多的选择,那就更省钱了。
答案 1 :(得分:8)
如果x==i
的概率高于y==i
,则最好将其写为x==i || y==i
而不是y==i || x==i
,因为如果第一个语句的计算结果为true,第二个没有评估(它是短路的)
答案 2 :(得分:5)
如果要查看大量对象,可以使用NSArray
和indexOf
方法:
NSArray *matchingNumbers = @[@1,@2,@3,@4,@5,@6,@7,@8];
NSNumber *checkedNumber = @3;
if ( [matchingNumbers indexOfObject:checkedNumber] != NSNotFound)
{
//...
}
答案 3 :(得分:3)
计算机使用数字信号。计算机的所有自然操作都是二进制的。
如果你想比较三件事,你将不得不使用两个二进制比较来使它对计算机有好处。
此外,您需要意识到更短的代码不一定更快。通常,这只是作者的捷径概念。
那么为什么你认为你需要进一步缩短这个表达式?
答案 4 :(得分:3)
至于你比较50个值的问题。
创建由这50个变量组成的NSMutableArray ......然后使用此代码。
使用此代码:
if ([myArray containsObject:i]) {
像魅力一样!
如果要分别检查每个值,可以使用while循环或for循环:
n = 0;
while (n<49) {
if (n==[myArray objectAtIndex:n]) {
//OR statement returned true for one of the 50 objects...
}
}
以下部分适用于需要不同答案的其他人:
如果我们有剩下的代码,可能有办法缩短整个条件语句......至于缩短“OR”部分,我不知道如何...
但是像:
if ((i==x)||(i==y)) {
string=@"hello";
}
可能会成为:
string = ((i==x)||(i==y)) ? @"hello";
或......类似于:
if ((i==x)||(i==y)) {
string=@"hello";
} else {
string=@"goodbye";
}
可能会成为:
string = ((i==x)||(i==y)) ? @"hello" : @"goodbye";
由于我经常使用带有数值的条件语句,我经常使用快捷方式,如果条件语句为真,则相当于1,而如果为假,则相当于0,因为我可以这样说
myNumber = ((i==x)||(i==y))*(z+w);
如果i等于x或y,它将返回true(即“1”),它将返回1 *(z + w)或(z + w)但如果条件为false则返回“0”,返回0 *(z + w)或0。
最后的说明: *可能有数学方法来表示函数帽子返回你想要的结果...例如,如果x = -2和y = 2而不是检查i == x或i == y只检查是否abs( i)== y(*绝对值是绝对值)
答案 5 :(得分:0)
如果您使用TONS变量,您可以执行以下操作:)
if ([[[NSMutableArray alloc] initWithObjects:x,y,z,a,b,c,d,e,f,g,h,j,k,l,nil] containsObject:i]) {