2011-07-27 3 views
3

c'est une petite partie du code:Se référant aux valeurs booléennes dans les méthodes Objective-C

@interface 
BOOL isCarryingmallet; 

@implementation 

-(BOOL)isCarryingWeapon { 
    return isCarryingMallet; 
} 

-(int)getWeaponDamage { 
    if (isCarryingMallet) 
     return kVikingMalletDamage; 
    else 
     return kVikingFistDamage; 
} 

Je ne comprends pas comment cela fonctionne. Est-ce que return isCarryingmMallet; renvoie OUI ou NON? Pourquoi n'y a-t-il pas un == YES dans si (isCarryingMallet)? Pourquoi est-ce if (isCarryingMallet) pas if (isCarryingWeapon). Merci d'avoir répondu à mes nouvelles questions!

+1

Upvote pour le jeu de combat RPG obligatoire lors de l'apprentissage d'une nouvelle langue. Mon premier Obj-C s'appelait "Combat Médiéval": P –

Répondre

4

La méthode isCarryingWeapon renvoie la valeur de la variable isCarryingMallet. S'il y avait d'autres armes possibles, cette méthode pourrait renvoyer une valeur plus compliquée, comme (isCarryingMallet || isCarryingPlasmaCannon). En ce moment, la seule arme qui compte pour cette classe est le maillet. Lorsque la méthode isCarryingWeapon est appelée, cette classe se dit: «Est-ce que je porte un maillet? Si c'est le cas, il sait qu'il porte une arme, alors il devient vrai - "Oui, j'ai une arme." Sinon, il renvoie false.

En ce qui concerne la question if - toutes les instructions if déterminent si la valeur entre parenthèses est vraie ou fausse. Les instructions d'égalité sont assez courantes dans les instructions if, mais elles ne sont pas du tout nécessaires. Plus spécifiquement, tout ce qui n'est pas 0, nul ou nul est vrai. Donc, ce qui suit va tout exécuter le code dans les accolades:

if (1) {...} 
if (37) {...} 
if (YES) {...} 
if (true) {...} 

variables booléennes sont souvent nommées avec le préfixe is de sorte que ce sens grammatical naturel. Dans votre cas, vous pouvez analyser

if (isCarryingMallet) {...} 

comme

Si ce gars-là porte un maillet, puis ...

+0

Merci! A partir de ce code maintenant serait-il encore capable de fonctionner si la méthode isCarryingWeapon n'était pas là? – stumped

+0

Tout dépend de la façon dont cette classe est utilisée ailleurs. Si d'autres fonctions appellent isCarryingWeapon, vous ne pouvez pas vous en débarrasser. Mais cette classe fonctionnerait bien sans elle en général. – Luke

0

La méthode isCarryingWeapon renvoie la valeur isCarryingSword booléenne.

Dans getWeaponDamage méthode vous ne avez pas besoin de faire une comparaison explicite, comme isCarryingMallet == TRUE parce que l'instruction if vérifie directement la valeur de isCarryingMallet et cette valeur sera utilisée comme résultat d'une comparaison. En d'autres termes, si elle est VRAIE, l'instruction if se comportera comme si elle faisait une comparaison entre deux valeurs et que la comparaison renvoyait VRAI.

0

Pourquoi n'y a-t-il pas un "== YES" dans "if (isCarryingMallet)"?

Par défaut, les déclarations à l'intérieur si est exécuté que si la condition est vraie. Ainsi,

if (isCarryingMallet) { /* ... */ } 

En fonction de la valeur de isCarryingMallet, les instructions sont exécutées. Pensez comme ça -

if (true) { /* ... */ } // if isCarryingMallet value is true 
+0

ohh. Alors qu'est-ce que - (BOOL) isCarryingWeapon faire alors? – stumped

+0

renvoie la valeur de isCarryingMallet. Apparemment, selon ce code, si quelqu'un porte un maillet, il porte une arme. – wadesworld

0

Est-ce "retour isCarryingMallet;" retour OUI ou NON?

Voulez-vous dire quelle valeur est retournée? Nous ne savons pas.La valeur n'est pas définie dans votre code extrait. Votre extrait de code suppose qu'à un autre endroit, nous trouverons un réglage de code variable à OUI ou NON (en fait, des nombres, pas de texte ou un vrai booléen, car C et Objective-C n'ont pas de vrai booléen).

Questions connexes