@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…
Вот популярный калькулятор для js.
https://github.com/WebDevSimplified/Vanilla-JavaSc…
Комментировать
Ответы на вопрос 1
@Dmtm
>Класс калькулятор? Класс кнопочка? Класс Вычисление?
ООП это не про классы, ООП это про абстракции
сегодня мы складываем числа, а завтра понадобятся векторы или множества,
числа тоже бывают разные — дискретные, комплексные, римские, шумерские, …
или вообще котики из пространства котиков с заданной алгеброй
хорошее ОО решение позволяет любую реализацию в рамках заданной системы абстракций
ООП это не про классы, ООП это про абстракции
сегодня мы складываем числа, а завтра понадобятся векторы или множества,
числа тоже бывают разные — дискретные, комплексные, римские, шумерские, …
или вообще котики из пространства котиков с заданной алгеброй
хорошее ОО решение позволяет любую реализацию в рамках заданной системы абстракций