https://github.com/cucumberian/mathshub_js_calc
javascript calculator
https://github.com/cucumberian/mathshub_js_calc
calculator-javascript finite-state-machine fsm oldschool
Last synced: about 1 year ago
JSON representation
javascript calculator
- Host: GitHub
- URL: https://github.com/cucumberian/mathshub_js_calc
- Owner: cucumberian
- Created: 2023-06-05T13:11:20.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-06-20T15:44:02.000Z (almost 3 years ago)
- Last Synced: 2025-02-16T15:18:18.414Z (over 1 year ago)
- Topics: calculator-javascript, finite-state-machine, fsm, oldschool
- Language: JavaScript
- Homepage: https://cucumberian.github.io/mathshub_js_calc/
- Size: 282 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Калькулятор на JavaScript
## Макет
[ссылка на Figma](https://www.figma.com/file/odLAP1PL5atEFGZKbvnxCx/Neumorphism-Calculator-(Community)?type=design&node-id=1-2&t=l8IuWI3zvyrMLBrN-0)
## Описание
Калькулятор для сайта, который эмулирует работу обычного кнопочного калькулятора.
Управлять калькулятором можнок как с клавиатуры:
- `0 - 9`, `.` - клавиши ввода числа
- `Enter`, `=` - клавиши получния результата
- `Esc` - сброс калькулятора
так и нажимая кнопки мышкой на самом калькуляторе.
## Установка
В HTML файле подключить скрипт калькулятора и создать елемент.
```html
```
В подключенном скрипте произведите импорт и и вызовите конструктор.
```javascript
import Calculator from './calculator.js';
const calc_wrapper = document.querySelector(`#calc`);
new Calculator(
calc_wrapper, // DOM элемент калькулятора
false, // вывод debug-информации
);
```
## Описание FSM
### Команды
- `number_input(value)`
- `operation_input(operation)`
- `equal()`
- `ac()`
- `render()`
### Состояния
- __null__
- `init`
`v1 = 0; state = 'v1';`
- __v1__
Состояние после вкючения калькулятора, в котором еще нет первого числа.
- `number_input`
вводим первое число
- `operation_input`
запоминаем операцию и переходим
__v1__ => __wait__
- __v2__
Состояние в котое попадаем если есть операция, первое число и начинаем вводить второе число
- `number_imput`
запоминаем второе число
- `operation_input`
вводим операцию
переходим __v2__ => __calculation__
- `equal`
переходим __v2__ => __calculation__
- __calculation__
выполняет дейстаия над v1 op v2. Результат выводится на дисплей и присваивается в переменную v1.
- `init`
проверяем крайние случаи и выполняем расчет
- `result`
присваиваем первому числу результат расчета
переход __calculatrion__ => __wait__
- `to_error`
если результата нет или он не конечное число
переход __calculation__ => __error__
- __wait__
состояние в котором ожидается ввод второго числа, чтобы убрать с дисалея результат
- `number_input`
пользователь начал вводить второе число
переход __wait__ => __v2__
- `operation_input`
изменилась операция - запоминаем её
- `equal`
выполняем расчет
__wait__ => __calculation__
- `backspace`
второе число равно 0,
переход __wait__ => __v2__
- __error__
Выводит сообщение об ошибке пока не будет выполнен переход `ac`
- `init`
Выводит ссобщение `ERROR` на дисплей
- `ac`