Je réapprends les bases des énoncés if / else, car ils étaient mon point faible à l'école.

Je suis en train de suivre un cours de script java sur code academy et j'en suis au stade des déclarations if. L'exemple sur lequel je suis confus est le suivant:

if (userChoice === 'rock') {
  if (computerChoice === 'paper') {
    return 'The computer won!';
  } else {
    return 'You won!';
  }
}

L'instruction else considère-t-elle que userChoice équivaut à «ciseaux»?

Ou est-il en train de changer userChoice en «papier» et computerChoice en «rock»?

Je sais que ce sont des choses vraiment basiques, mais cela m'a toujours dérouté.

La fonction entière est ci-dessous

const determineWinner = (userChoice, computerChoice) => {
    if (userChoice === computerChoice) {
        return 'It is a tie!';
    }

    if (userChoice === 'rock') {
        if (computerChoice === 'paper') {
            return 'The computer won!';
        } else {
            return 'You won!';
        }
    }

    if (userChoice === 'paper') {
        if (computerChoice === "scissors") {
            return 'The computer won!';
        } else {
            return 'you won!';
        }
    }

    if (userChoice === 'scissors') {
        if (computerChoice === "rock") {
            return 'The computer won!';
        } else {
            return 'you won!';
        }
    }

    if (userChoice === 'bomb') {
        return 'Bomb beats all';
    }

}
1
AMCode96 17 juin 2020 à 04:24

5 réponses

Meilleure réponse

Dans cet exemple, la valeur userChoice est généralement vérifiée en premier, en supposant qu'elle n'est pas égale à computerChoice - dans ce cas, nous vérifions les deux valeurs et les comparons l'une à l'autre.

Ainsi, après la correspondance du premier bloc if, la deuxième correspondance est en cours de validation, ce qui consiste à trouver la valeur de computerChoice.

Supposons ce scénario: userChoice = 'scissors'

Nous devons vérifier quelle est la valeur de computerChoice. Si la valeur de computerChoice n'est pas "ciseaux", alors nous savons que ce ne sera pas une égalité. Nous devons chercher un autre match.

Nous avons trouvé le bloc qui correspond à la première condition:

if (userChoice === 'scissors'){}

Maintenant, nous devons regarder ce qu'il y a à l'intérieur de cette instruction if, nous avons:

  if (computerChoice === "rock"){
    return 'The computer won!';
  } else {
    return 'you won!';
  }

Cela signifie que si computerChoice = 'rock', alors return 'The computer won!'

Dans le cas où computerChoice est autre chose que "rock", l'instruction else s'exécutera, ce qui return 'you won!'.

Remarque importante: le code s'exécute de haut en bas (avec quelques exemptions), pour cette raison, ce bloc est vérifié en premier:

if(userChoice === computerChoice){
  return 'It is a tie!';
}

Si vous déplacez ce bloc vers le bas de la fonction, vous risquez de voir des résultats inattendus.

const determineWinner = (userChoice, computerChoice) => {


if (userChoice === 'rock') {
  if (computerChoice === 'paper') {
    return 'The computer won!';
  } 
  else {
  return 'You won!';
  }
}

if (userChoice === 'paper'){
  if (computerChoice ==="scissors"){
    return 'The computer won!';
  } else {
    return 'you won!';
  }
}

//found the match!!!
if (userChoice === 'scissors'){
  if (computerChoice ==="rock"){
    return 'The computer won!';
  } else {
    //run else statement
    return 'you won!';
  }
}
//it did not reach this point and returned before :(
if(userChoice === computerChoice){
  return 'It is a tie!'; //should be a tie
}
if (userChoice === 'bomb'){
return 'Bomb beats all';
}

}

console.log(determineWinner('scissors', 'scissors'))

Je voulais souligner ce comportement afin que vous gardiez cela à l'esprit.

J'espère que ça a du sens.

3
Jakub A Suplicki 17 juin 2020 à 02:12

C'est essentiellement ce que fait votre instruction if:

if (computerChoice === 'paper') {
    return 'The computer won!';
} if (computerChoice !== 'paper') {
    return 'You won!';
}

L'instruction else est appelée si l'instruction if est fausse - donc si computerChoice est quelque chose ce n'est pas exactement {{X3} }, l'instruction else est appelée. Un if-else standard sera toujours affiché, car il n'y a que deux chemins - égaux ou non. Il n'y a pas d'intermédiaire.

1
Jack Bashford 17 juin 2020 à 01:31

Voici l'explication:

Remarque: === vérifie la valeur ainsi que son type

if (userChoice === 'rock') { // if **userChoice** is of string **rock** that means the if condition is true and it will continue execiting the code inside if
  if (computerChoice === 'paper') { // if **computerChoice** is of string **paper** it executes code inside and returns 'the computer has won ' 
    return 'The computer won!';
  } else { // if **computerChoice** was not of **string** paper it executes 'You won' because the computer chose scissors
    return 'You won!';
  }
}

Ce code s'exécute si userChoice est identique à computerChoice

if(userChoice === computerChoice){
  return 'It is a tie!';
}
1
Dhanendra Pratap Singh 17 juin 2020 à 07:01

Je vais essayer de l'expliquer de la meilleure façon possible. Pour cet extrait de code:

if (userChoice === 'rock') {
  if (computerChoice === 'paper') {
    return 'The computer won!';
  } else {
    return 'You won!';
  }
}

L'ordinateur suit l'ordre des déclarations. Tout d'abord, il vérifie ce que l'utilisateur a choisi (ce qui est rock dans cet extrait de code). if (userChoice === 'rock')

Ensuite, parce que l'utilisateur a effectivement choisi rock, il passera à l'instruction suivante qui vérifie le choix de l'ordinateur. Si l'ordinateur a choisi le papier (Le bon compteur à la roche) il se déplacera vers le retour de la déclaration qui est que l'ordinateur a choisi le compteur et a gagné

if (computerChoice === 'paper') {
    return 'The computer won!';

MAIS, si l'ordinateur a choisi autre chose que le papier, l'instruction if ci-dessus est ignorée et l'instruction else est exécutée qui est le joueur gagné

  else {
    return 'You won!';
  }
0
Mahmoud Ashraf 17 juin 2020 à 01:47

Non, c'est ce que gère la 4e instruction IF. La façon dont sa structure signifie que seules deux entrées sont gérées par chaque bloc IF. Si l'utilisateur met des ciseaux, il sautera ce bloc IF

0
Jjhok Anderson 17 juin 2020 à 01:40