1

これらの条件を簡略化する方法があるかどうか疑問に思っています。私はデータ パケットを扱っていますが、条件文が扱いにくい場合があります。基本的な例を次に示します。

私は書きます:

if (message->messageType != kMessageTypeCutCardsArray && message->messageType != kMessageTypeQuit) {
    MessageInt message;
    message.message.messageType = kMessageTypeReceivedData;
    NSData *packet = [NSData dataWithBytes:&message length:sizeof(message)];
    [_game sendData:packet];
}

私はむしろ書きたい:

if (message->messageType != (kMessageTypeCutCardsArray || kMessageTypeQuit)) {
    MessageInt message;
    message.message.messageType = kMessageTypeReceivedData;
    NSData *packet = [NSData dataWithBytes:&message length:sizeof(message)];
    [_game sendData:packet];
}
4

3 に答える 3

2

一般的な問題として、いいえ。これが、C(したがってObjective-C)が機能する方法です。

switchこの特定のケースでは、次のステートメントを使用できます。

switch (message->messageType)
{
    case kMessageTypeCutCardsArray:
    case kMessageTypeQuit:
        break;
    default:
        MessageInt message;
        message.message.messageType = kMessageTypeReceivedData;
        NSData *packet = [NSData dataWithBytes:&message length:sizeof(message)];
        [_game sendData:packet];
        break;
}

その構文が改善されるかどうかはあなた次第です。

于 2013-02-17T02:11:47.433 に答える
0

値をボックス化し、一時配列を使用できます。これにより、条件の重複を削除するという目標は達成されますが、コンパイラーにとって最適化できる可能性は低くなります。

if (message->messageType != kMessageTypeCutCardsArray && 
    message->messageType != kMessageTypeQuit) {

次と同等である必要があります。

if(![@[@(kMessageTypeCutCardsArray),@(kMessageTypeQuit)] 
     contains:@(message->messageType)]) {
于 2013-02-17T06:13:12.060 に答える