私は自分のコードを短くしようとしました:から
if(i== x || i == y || i == z )
に
if (i == ( x || y || z ))
ログで間違ったiを取得したため、この方法が間違っていることを知っています。
しかし、Objective-Cのコードを短縮する方法はありますか?
私は自分のコードを短くしようとしました:から
if(i== x || i == y || i == z )
に
if (i == ( x || y || z ))
ログで間違ったiを取得したため、この方法が間違っていることを知っています。
しかし、Objective-Cのコードを短縮する方法はありますか?
ステートメントを使用することもできますが、switch
2〜3個の値だけではそれほど多くは購入できません。
switch (i) {
case x:
case y:
case z:
....some code....
break
default:
....some other code....
}
あなたがチェックしているものがより複雑であるか、あなたがより多くのオプションを持っていれば、それはより多くの節約になるでしょう。
最初のステートメントがtrueと評価された場合、2番目のステートメントは評価されない(短絡されている)ため、それx==i
よりも高い確率でy==i
書く方がよい場合x==i || y==i
y==i || x==i
使用できるオブジェクトNSArray
とindexOf
メソッドを多数チェックする場合は、次のようにします。
NSArray *matchingNumbers = @[@1,@2,@3,@4,@5,@6,@7,@8];
NSNumber *checkedNumber = @3;
if ( [matchingNumbers indexOfObject:checkedNumber] != NSNotFound)
{
//...
}
コンピューターはデジタル信号を処理します。コンピューターの自然な操作はすべてバイナリです。
3つのことを比較したい場合は、2つのバイナリ比較を使用して、コンピューターに適したものにする必要があります。
また、短いコードが必ずしも高速であるとは限らないことを理解する必要があります。多くの場合、これは作成者にとってのショートカットの概念にすぎません。
では、なぜこの式をさらに短くする必要があると思いますか?
あなたが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";
私は数値を含む条件文をよく使用するので、条件文がtrueの場合は1に相当し、falseの場合は0に相当するショートカットを使用することがよくあります。このため、次のように言うことができます。
myNumber = ((i==x)||(i==y))*(z+w);
iがxまたはyに等しい場合、true( "1")を返し、1 *(z + w)または(z + w)を返しますが、条件がfalseの場合、 "0"を返し、0*を返します。 (z + w)または0。
最後の注意:*関数ハットが希望する結果を返すことを数学的に表す方法があるかもしれません...たとえば、i==xまたはi==yをチェックする代わりに、x=-2およびy=2の場合abs(i)== yの場合(* absは絶対値です)
大量の変数を使用している場合は、次のようにすることができます:)
if ([[[NSMutableArray alloc] initWithObjects:x,y,z,a,b,c,d,e,f,g,h,j,k,l,nil] containsObject:i]) {