Здравствуйте! Я учу JavaScript менее недели и сегодня решил попробовать написать что-то простое — калькулятор. В целом, калькулятор почти готов, но я хотел бы доработать его так, чтобы поле для ввода чисел было только одно. У меня есть несколько идей, но они связаны с использованием циклов и функций, и я не уверен, что подхожу к задаче правильно. Прикрепил код ниже, и мне бы хотелось получить ваше мнение о том, что можно улучшить, упростить или изменить, но в рамках базового уровня. P.S. Названия классов и переменных написаны немного наугад, так что прошу не акцентировать на этом внимание.
<pre><code class="html"><div class="calculator">
<input class="num1" type="text" placeholder="Число">
<div class="case__button">
<button value="+">+</button>
<button value="-">-</button>
<button value="*">*</button>
<button value="/">/</button>
</div>
<input class="num2" type="text" placeholder="Число">
<input class="result" type="text" placeholder="Результат">
<button class="f1">Посчитать</button>
</div></code></pre>
<pre><code class="javascript">let num1 = document.querySelector('.num1');
let num2 = document.querySelector('.num2');
let resultField = document.querySelector('.result');
let selectedSign;
const button2 = document.querySelector('.f1');
document.querySelector('.case__button').onclick = (event) => {
if (event.target.tagName === 'BUTTON') {
selectedSign = event.target.value;
}
};
button2.onclick = () => {
let a = parseInt(num1.value, 10);
let b = parse
Ваш калькулятор — отличная идея для практики JavaScript, особенно для начинающего! Попробую помочь вам улучшить код, чтобы сделать его более простым и удобным, используя только одно поле ввода. Также постараюсь предложить несколько улучшений.
### Основные изменения
1. **Использование одного поля для ввода значений:** Вместо двух полей ввода, вы можете использовать одно и разделять значения с помощью запятой. Например, пользователь может ввести `2,3` для выполнения операции между числами 2 и 3.
2. **Улучшение обработки ввода:** Вы можете добавить проверку на правильность ввода и вывод ошибок, если введенные данные некорректны.
3. **Небольшие улучшения в коде:** Упрощение выборки элементов и обработчиков событий.
Вот пример, как это может выглядеть:
```html
<div class="calculator">
<input class="num" type="text" placeholder="Введите числа, например 2,3">
<div class="case__button">
<button value="+">+</button>
<button value="-">-</button>
<button value="*">*</button>
<button value="/">/</button>
</div>
<input class="result" type="text" placeholder="Результат" readonly>
<button class="f1">Посчитать</button>
</div>
```
```javascript
let numInput = document.querySelector('.num');
let resultField = document.querySelector('.result');
let selectedSign;
document.querySelector('.case__button').onclick = (event) => {
if (event.target.tagName === 'BUTTON') {
selectedSign = event.target.value;
}
};
document.querySelector('.f1').onclick = () => {
let numbers = numInput.value.split(',').map(num => parseFloat(num.trim()));
// Проверка на наличие двух чисел
if (numbers.length !== 2 || isNaN(numbers[0]) || isNaN(numbers[1])) {
resultField.value = "Ошибка ввода!";
return;
}
let [a, b] = numbers;
let result;
switch (selectedSign) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = b !== 0 ? a / b : "Деление на 0!";
break;
default:
resultField.value = "Выберите операцию!";
return;
}
resultField.value = result;
};
```
### Учтите следующие моменты:
- **Чтение и ввод значений:** Ввод чисел разделяется запятой, и сразу обрабатывается массив значений.
- **Проверка данных:** Добавлена проверка, чтобы убедиться, что именно два числа введены и они – валидные числа.
- **Улучшенная читаемость кода:** Код упорядочен, и названия переменных стали более понятными.
Эти улучшения делают ваш калькулятор более простым в использовании и позволяют лучше обрабатывать возможные ошибки. Удачи в дальнейшей практике программирования на JavaScript!
Учитесь пользоваться доступными инструментами. Тот же ChatGPT, GigaChat или DeepSeek довольно толково прокомментируют: <br/> <br/> <pre><code>1. HTML Семантика: Использование <div> для кнопок операций (case__button) не совсем семантично. Лучше использовать <fieldset> или <div role="group">, чтобы явно указать, что это группа связанных элементов. Доступность: У элементов отсутствуют атрибуты aria-*, которые улучшили бы доступность для пользователей с ограниченными возможностями. Например, можно добавить aria-label для кнопок операций. Классы: Имена классов (num1, num2, result, f1) не очень описательны. Лучше использовать более понятные имена, например, input-number, button-calculate и т.д. 2. JavaScript Глобальные переменные: Переменные num1, num2, resultField, selectedSign и button2 объявлены в глобальной области видимости. Это может привести к конфликтам, если код будет расширяться. Лучше использовать модульный подход или замыкания. Обработка ошибок: Нет проверки на корректность введенных данных. Если пользователь введет нечисловое значение, результат будет NaN. Повторяющийся код: Парсинг чисел (parseInt) дублируется. Можно вынести в отдельную функцию. События: Использование onclick устарело. Лучше использовать addEventListener. Логика операций: Логику операций можно вынести в отдельную функцию для улучшения читаемости.</code></pre>