Skip to content

Homework 1. Basic project template and console calculator#1

Open
ILyaCyclone wants to merge 8 commits into
masterfrom
hw-01_env-and-calc
Open

Homework 1. Basic project template and console calculator#1
ILyaCyclone wants to merge 8 commits into
masterfrom
hw-01_env-and-calc

Conversation

@ILyaCyclone
Copy link
Copy Markdown
Owner

Homework 1 task

Webpack + babel + typescript базовая настройка. Консольный калькулятор
Цель: В результате получим:
базовый скелет webpack + typescript проекта
консольный калькулятор

Корректность проверяется только тестами - без тестов задание не считается выполненным!

Шаблон калькулятора можно найти тут
nickovchinnikov/react-js-tutorial#3

  1. Минимальные требования к программе - основные арифмитические операторы (-+/*) с правильным порядком выполнения.
    Пример: 2 + 2 * 2 = 6

Строку выводить в консоль, после символа >
Операторы и циры разделяются через пробел
Остальное оформление и улучшения на собственный выбор.

  1. Добавить поддержку математических операторов
  • возведение в квадрат **
  • возведение в степень ^
  • факториал !
  1. Обработка скобок
    пример: (2 + 2) * 2 = 8

Для очень усердных!

Задание *

  • тригонометрия - sin(x), cos(x), tan(x) и поддержка любых других функций на выбор
  • вычисление ряда Фиббоначи fib(number)

Задание **
Для очень усердных предлагаю включить поддержку Reverse Polish notation
Доп информация о том, как это должно работать: https://en.wikipedia.org/wiki/Reverse_Polish_notation
Это задание для тех, кто справился с предыдущими!
Необходимо:

  • развернуть npm проект (npm init)
  • установить и настроить webpack
  • установить и настроить babel
  • установить и настроить typescript через babel preset
  • установить и настроить jest
  • установить и настроить eslint + prettier
    Разработку ведем по TDD. Для этого
  • настраиваем Jest и используем его как тестовую среду

Для начала нужно определиться со структурой приложения. Логика приложения и элементы усправления не должны быть перемешаны.

  • реализуем логику приложения, покрываем логику тестами
  • логику пишем максимально маленькими блоками, которые можно протестировать
  • не смешиваем действия
  • когда нужна интеграция нескольких логических блоков - покрываем данную интеграцию тестами
  • проверяем работоспособность калькулятора и реализованных действий только в самом конце - разрабоку рекомендую вести через TDD
    Критерии оценки: + 2 балла за npm проект, настроен Jest, ваш проект содержит базовые конфигурации
  • 2 балла за установку webpack, реализованы базовые операторы (-+/*) и тесты
  • 2 балла за typescript через babel loader, за поддержку возведение в квадрат **, возведение в степень ^, факториал !
  • 2 балла за jest, за корректно работающие скобки в калькуляторе
  • 2 балла за eslint + prettier, за задание *
  • 10 баллов за задание **

Задание *

  • тригонометрия - sin(x), cos(x), tan(x) и поддержка любых других функций на выбор
  • вычисление ряда Фиббоначи fib(number)

Задание **
Для очень усердных предлагаю включить поддержку Reverse Polish notation
Доп информация о том, как это должно работать: https://en.wikipedia.org/wiki/Reverse_Polish_notation
Это задание для тех, кто справился с предыдущими!

Project template contains basic configuration for typescript, jest, babel and webpack.
Console calculator implements simple binary operators: + - * / ^ %.
@ILyaCyclone
Copy link
Copy Markdown
Owner Author

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

Comment thread .prettierrc
Comment on lines +2 to +7
"printWidth": 140,
"tabWidth": 4,
"semi": true,
"trailingComma": "none",
"singleQuote": false,
"quoteProps": "preserve"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

зачем ? printWidth я могу понять, а остальное?

Comment thread package.json
"husky": {
"hooks": {
"pre-commit": "npm run check",
"pre-push": "npm run check"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а смысл? если ты это уже прогнал перед коммитом

Comment thread package.json
},
"husky": {
"hooks": {
"pre-commit": "npm run check",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

в проекте 1000 файлов

ты поменял 100

в коммит добавил 10

сколько файлов проверит твоя настройка?

Comment thread src/calc/calc.test.ts
import { evaluate } from "./calc";

describe("calc basic expressions", () => {
test("1 + 2 = 3", () => {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://jestjs.io/docs/en/api#testeachtablename-fn-timeout

ну или forEach какой-нибудь

не лень было столько однотипного кода писать?

Comment thread src/calc/calc.ts
* Evaluates expression into array of tokens.
* @param {string} expression Expression string in form of numbers, operators and groups, e.g. `5 * (1 + 2)`.
* @throws Error if invalid expression or unsupported operation.
* @returns {number} Calculation result.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

зачем тут jsdoc? типы же в коде описаны

Comment thread src/calc/calc.ts
if (isOperator(token) && priorityLevel.includes(token as string)) {
const operator: string = token as string;

if (isMathBinaryOperator(operator)) return calculateBinaryOperation(tokens, i);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я бы не стал злоупотреблять однострочными if

Comment thread tsconfig.json
@@ -0,0 +1,12 @@
{
"compilerOptions": {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

хорошо бы конфиги через инит комманды создавать (и jest тоже)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants