Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Введение JS: Программирование, управляемое данными

Я изобрел понятие «объектно-ориентированный», но могу заявить, что не имел в виду C++ при этом.

На текущий момент мы уже достаточно много знаем, как строить модульные программы и теперь пришло время поговорить о том, как строить расширяемые программы. В программировании существует понятие аддитивность, и эта тема будет центральной в нашем курсе. Аддитивность – это расширение возможности вашей программы без переписывания исходного кода.

Какие темы будут разобраны?

  • Пользовательские типы
  • Динамическая диспетчеризация (по типу)
  • Полиморфизм
  • Передача сообщений
  • Объектно-ориентированное программирование

Во-первых, это пользовательские типы (типы данных, которые мы можем создавать самостоятельно). Мы поговорим про такое важное понятие, как диспетчеризация и конкретно о динамической диспетчеризации (по типу). Разберём понятие полиморфизма. О нём многие слышали, но очень не многие понимают, что оно по-настоящему обозначает. Эту интересную тему мы разберём в одном из последних уроков. Также мы поговорим про передачу сообщений. И, наконец, придём к пониманию объектно-ориентированного программирования: что это такое, как с ним работать и почему, например, JavaScript считается объектно-ориентированным языком.

Новый синтаксис

  • Свойства
  • Тип Данных: Объект
  • Классы

В этом курсе появится новый синтаксис, который включает в себя несколько понятий. Первое – это свойства, которые используются в JavaScript даже для самых базовых вещей. Мы избегали этой темы, чтобы не отвлекаться от модульности. Теперь пришло время начать с ними работать.

Во-вторых, мы разберём тип данных, который называется объект. Это не то же самое, что объект в объектно-ориентированном программировании, но иногда названия, которые используются в языках программирования несут свой смысл, и к этому нужно будет просто привыкнуть.

И последнее, с чем мы познакомимся – это классы. Ниже приведён небольшой пример класса, который будет использоваться в нашей программе. Мы подробно разберем его в нашем курсе.

export default class PercentCard {
  constructor(name, percent) {
    this.name = name;
    this.percent = percent;
  }

  damage(health) {
    return Math.round(health * (this.percent / 100));
  }
}

Проект: Карточная игра

Карточная игра

В этом курсе мы будем работать над своей карточной игрой. Она будет без графического интерфейса. Мы будем выводит процесс игры в виде текста.

Эта карточная игра необычная и не такая, как все привыкли видеть, играя в обычные карты. Игра будет про волшебников, в процессе которой происходит нападение друг на друга. Каждая карта описывает атаку, урон юнита и так далее. В нашем случае она будет простая, но на ней будет хорошо видна проблематика, которую мы собираемся отрабатывать.

Процесс игры

Давайте посмотрим на процесс без кода. Как будет происходить вывод нашей игры:

Начинаем бой!

Игрок 'John' применил 'Прохладный чыонг-бонг рыка'
против 'Ada' и нанес урон '3'

Игрок 'Ada' применил 'Воздушный змей клеветы'
против 'John' и нанес урон '1'

Игрок 'John' применил 'Проказливый рубитель крови'
против 'Ada' и нанес урон '2'

Ada был убит

Для карт, которые представляют собой оружие, используются названия позаимствованные из Diablo. В сети существует множество генераторов названий предметов из этой игры. Они довольно прикольные, поэтому будет здорово здесь ими воспользоваться.

Глядя на процесс, очевидно, что игра рассчитана на двух игроков, которые по очереди делают ходы. Сначала один игрок наносит урон, потом второй, затем снова первый и так по кругу. Урон зависит от текущей карты. И она не всегда наносит конкретный урон. Он может зависеть от текущего здоровья (например, снимать 50% здоровья) и других характеристик.

Предположим, что стартовый уровень жизни у каждого игрока 10. А тот, у кого уровень жизни дойдёт до нуля или станет отрицательным, считается убитым. В примере видно, что игрок с именем Ada был убит первым.

Разработка через тесты

Наш курс будет примером разработки через так называемый Test Driven Development. Это означает, что тесты пишутся до кода.

Дизайн кода определяется тестами.

Вместо того, чтобы сосредотачиваться на
внутреннем представлении, сначала прорабатываются
варианты использования этого кода.

Зачем это нужно?

Test Driven Development – это такая методология, которая существует уже достаточно много лет. Она входит в концепцию экстремального программирования. Её главная фишка, что мы не фокусируемся на том, как будет устроен код внутри. Гораздо важнее, как им пользоваться. Именно дизайн кода (так называемый API), интерфейс, который вы отдаёте другим для использования и является определяющим. Если вы делаете хорошую абстракцию, то внутреннее содержимое не так важно. Вы всегда можете его переписать.

Очень часто бывает так (это касается не только программирования), что люди делают что-то, но пользоваться этим невозможно. Это касается всего в нашей жизни: любого производства, продукта, процесса и так далее. Test Driven Development в первую очередь, заставляет нас думать о дизайне кода, о том, как его использовать, а затем строить внутреннюю структуру.

Обучение на Хекслет

Повторим аспекты, которые мы используем для того, чтобы обучение было лучше и была проработка правильных вещей.

  • Неизменяемость (функциональный стиль)
  • СИКП
  • Обучение через рефакторинг
  • Разработка через тесты
  • Знания, которые не устаревают

Мы продолжаем использовать функциональный стиль. При этом постепенно начинаем вводить изменяемость.

Курс также продолжает традицию основ на СИКП.

Мы делаем обучение через рефакторинг, то есть мы не рассказываем сразу, как правильно что-то сделать. Чтобы понять достаточно сложные темы по-настоящему, нужно пережить опыт и самостоятельно упереться в сложности. Поэтому уроки будут построены следующим образом: мы делаем какое-то решение, которое у вас (по нашей задумке) будет вызывать вопросы «А почему так?» и будете видеть, что здесь есть какие-то недоработки. В свою очередь следующий урок будет говорить об этом подробно и уже показывать следующий шаг для решения возникших проблем, и так далее. Постепенно мы будем приходить к общему решению, которое исправляет все недостатки предыдущих. Это так называемое обучение через рефакторинг.

Также напоминаю, что в этом курсе разработка будет происходить через тесты (о чём мы уже с вами говорили).

Знания текущего курса являются универсальными. Будет совсем чуть-чуть JavaScript специфики, но в основном всё, что здесь рассказывается — это ключ к пониманию, как устроены все современные языки, и какие проблемы они решают.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и соглашаетесь с «Условиями использования»

Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу