Как написать калькулятор используя обьектно-ориентированную парадигму программирования?



@kiberlain

Наваял калькулятор, кнопочки нажимаются, результат выводится.

const calculator = document.getElementById('calculator');
    const nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    const operations = ['=', '+', '-', '*', "https://qna.habr.com/"];

const generateHTML = () => {
  const digits = nums.map(n => `<button class="number" value="${n}">${n}</button>`)
  const ops = operations.map(op => `<button class="action" value="${op}">${op}</button>`)

  const html = digits.concat(ops)

  html.push('<input type="text" value="0" id="output">');

  calculator.innerHTML = html.join('')
};

let tempValue, newValue, action
    const calc = (value) => {
        const output = document.getElementById('output')
        switch (value) {
            case '+':
                action = '+'
                tempValue = newValue
                newValue = 0
                output.value="0"
                console.log(tempValue + '_' + action + '_' + newValue)
                break

            case '-':
                action = '-'
                tempValue = newValue
                newValue = 0
                output.value="0"
                console.log(tempValue + '_' + action + '_' + newValue)
                break
            case '*':
                action = '*'
                tempValue = newValue
                newValue = 0
                output.value="0"
                console.log(tempValue + '_' + action + '_' + newValue)
                break
            case "https://qna.habr.com/":
                action = "https://qna.habr.com/"
                tempValue = newValue
                newValue = 0
                output.value="0"
                console.log(tempValue + '_' + action + '_' + newValue)
                break
            case '=':
                tempValue = parseFloat(tempValue)
                newValue = parseFloat(newValue)
                console.log(tempValue + '_' + action + '_' + newValue)
                switch (action) {
                    case '+':
                        output.value = tempValue + newValue
                        break
                    case '-':
                        output.value = tempValue - newValue
                        break
                    case '*':
                        output.value = tempValue * newValue
                        break
                    case "https://qna.habr.com/":
                        output.value = tempValue / newValue
                        break
                }
                break

            default:
                output.value += value
                newValue = output.value
                console.log(tempValue + '_' + action + '_' + newValue)
        }
    }


    const display = () => {
        document.querySelectorAll('button').forEach(button => {
            button.addEventListener('click', function(event) {
                calc(event.target.value)
            })
        });
    }

    const init = () => {
        generateHTML();
        display();
    }

    init();

вопрос к профессионалам, как это переписать на ООП? Какие классы и методы должны быть?
Класс калькулятор? Класс кнопочка? Класс Вычисление?


Решения вопроса 2



@12rbah

Я бы посоветовал вам использовать ООП для тех задач, в которых оно нужно, хотя конечно всегда можно натягивать сову на глобус.
Вот популярный калькулятор для js.
https://github.com/WebDevSimplified/Vanilla-JavaSc…

Комментировать

Ответы на вопрос 1



@Dmtm

>Класс калькулятор? Класс кнопочка? Класс Вычисление?
ООП это не про классы, ООП это про абстракции
сегодня мы складываем числа, а завтра понадобятся векторы или множества,
числа тоже бывают разные — дискретные, комплексные, римские, шумерские, …
или вообще котики из пространства котиков с заданной алгеброй
хорошее ОО решение позволяет любую реализацию в рамках заданной системы абстракций

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *