Clarification : Exercice de la Calculatrice

Bonjour, bonsoir, c’est encore moi.

Je viens de terminer le chapitre de la calculatrice, mais il y a quelque chose que je ne comprend pas dans le code.

Lors du calcul de la fonction, la variable _previousNumber est utilisé. Ma question est comment le programme sait que _préviousNumber est le chiffre qu’il doit retenir ? Je n’ai noté nul part que lorsque j’appuie sur une operation, il transfère ma variable _currentNumber dans _previousNumber. Pire encore, le fait de voir que ça marche me laisse perplexe.

Voici mon code au moment ou j’envois ce message :

import UIKit

class ViewController: UIViewController {
    var _currentNumber:Double = 0 {
        didSet{
            userResultLabel.text = "\(_currentNumber)"
        }
    }
    var _operationType:Character = " "
    var _previousNumber:Double = 0
    func calculationProcess(){
        var result:Double
        if _operationType == "+" {
            result = _previousNumber + _currentNumber
        }
        else if _operationType == "-" {
            result = _previousNumber - _currentNumber
        }
        else if _operationType == "*"{
            result = _previousNumber * _currentNumber
        }
        else if _operationType == "/"{
            result = _previousNumber / _currentNumber
        }
        else {
            result = _currentNumber
        }
        _previousNumber = result
        _currentNumber = 0
        userResultLabel.text = "\(result)"
    }
    @IBOutlet weak var userResultLabel: UILabel!
    @IBAction func acNumber() {
        _previousNumber = 0
        _currentNumber = 0
    }
    @IBAction func moreOrLessButton() {
        _currentNumber = _currentNumber * -1
    }
    @IBAction func plusButton() {
        calculationProcess()
        _operationType = "+"
    }
    @IBAction func multiplyButton() {
        calculationProcess()
        _operationType = "*"
    }
    @IBAction func lessButton() {
        calculationProcess()
        _operationType = "-"
    }
    @IBAction func divideButton() {
        calculationProcess()
        _operationType = "/"
    }
    @IBAction func equalButton() {
        calculationProcess()
    }
    @IBAction func percentageButton() {
        _currentNumber = _currentNumber / 100
    }
    @IBAction func digitButtonTouched(_ sender: UIButton) {
        _currentNumber = (_currentNumber * 10) + Double(sender.tag)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

Ce que je vois dans ton code, c’est que _previousNumber est initialisé à 0 au début de l’application.

Puis, le résultat du calcul y est transféré avant l’affichage. Tout est normal, donc … Rien de magique !

    _previousNumber = result
    _currentNumber = 0
    userResultLabel.text = "\(result)"

Salut,

C’est la ligne « _previousNumber = result » dans la fonction « calculationProcess() » qui le fait.

Tu appelles cette fonction, à chaque fois que tu clics sur un opérateur mathématique, mais la première fois que tu clics sur opérateur, tu passes uniquement dans le else (result = _currentNumber) et seulement après il attribue le symbole à la variable _operationType(), ou celui-ci sera utilisé lors du prochain appel de la fonction « calculationProcess() ».

Donc, pour faire simple,

  • Premier chiffre taper
  • Appuie sur un opérateur
  • Appel de la fonction
  • Passage dans else (result = _currentNumber)
  • Attribution à _previousNumber de la valeur attribué à result à l’étape précédente ( _previousNumber = result)
  • remise à 0 de _currentNumber
  • Sortie de la fonction et attribution du symbol mathématique (fin de l’action)