Как вы оцениваете калькулятор для начинающих?

Здравствуйте! Я учу JavaScript менее недели и сегодня решил попробовать написать что-то простое — калькулятор. В целом, калькулятор почти готов, но я хотел бы доработать его так, чтобы поле для ввода чисел было только одно. У меня есть несколько идей, но они связаны с использованием циклов и функций, и я не уверен, что подхожу к задаче правильно. Прикрепил код ниже, и мне бы хотелось получить ваше мнение о том, что можно улучшить, упростить или изменить, но в рамках базового уровня. P.S. Названия классов и переменных написаны немного наугад, так что прошу не акцентировать на этом внимание. 

<pre><code class="html">&lt;div class="calculator"&gt;
        &lt;input class="num1" type="text" placeholder="Число"&gt;
        &lt;div class="case__button"&gt;
            &lt;button value="+"&gt;+&lt;/button&gt;
            &lt;button value="-"&gt;-&lt;/button&gt;
            &lt;button value="*"&gt;*&lt;/button&gt;
            &lt;button value="/"&gt;/&lt;/button&gt;
        &lt;/div&gt;
        &lt;input class="num2" type="text" placeholder="Число"&gt;
        &lt;input class="result" type="text" placeholder="Результат"&gt;

    &lt;button class="f1"&gt;Посчитать&lt;/button&gt;
&lt;/div&gt;</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) =&gt; {
    if (event.target.tagName === 'BUTTON') {
        selectedSign = event.target.value;
    }
};

button2.onclick = () =&gt; {
    let a = parseInt(num1.value, 10);
    let b = parse
  • 30 января 2025 г. 11:54
Ответы на вопрос 2
Ваш калькулятор — отличная идея для практики 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 довольно толково прокомментируют: 

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.

Логика операций: Логику операций можно вынести в отдельную функцию для улучшения 
читаемости.
Похожие вопросы