├── 1.1_variables └── readme.md ├── 1.2_if_and_boolean └── README.md ├── 1.3_strings_and_debug └── README.md ├── 2.1_array └── README.md ├── 2.2_cycles └── README.md ├── 2.3_associative_arrays └── README.md ├── 3.1_function_no_args ├── README.md └── task3_img.png ├── 3.2_function_params_returns └── README.md ├── README.md └── codestyle.md /1.1_variables/readme.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к занятию «1.1. Базовые понятия. Переменные и числа» 2 | 3 | Вы работаете над разработкой интернет-магазина с бонусной системой. Выполните задачи для реализации различных функций. 4 | 5 | ## Задача 1 6 | В интернет-магазине у зарегистрированного пользователя есть имя и бонусный баланс. Интернет-магазином давно пользуется Лев Толстой. Отобразите ему информацию об успешном входе и его балансе. 7 | 8 | ### Процесс реализации 9 | 10 | 1. Создайте две переменные `username` и `bonusBalance`. 11 | 2. Присвойте переменным значения `LeoTolstoy` и `131` соответственно. 12 | 3. Выведите информацию о пользователе в консоль двумя строками. Значения X и Y возьмите из переменных: 13 | * в первой — «Пользователь Х»; 14 | * во второй — «Баланс Y». 15 | 16 | *** 17 | 18 | ## Задача 2 19 | 20 | За каждую покупку мы добавляем на баланс фиксированную сумму в 50 бонусных баллов. Баллы сгорают со временем — каждый день сгорает 3 балла. 21 | 22 | Посчитайте, какой баланс будет у Льва Толстого через 10 дней, если обычно он делает покупку раз в два дня. 23 | 24 | ### Процесс реализации 25 | 26 | 1. Используйте переменную `bonusBalance` со значением бонусного баланса из задачи 1. 27 | 2. Создайте переменные: 28 | * для хранения баллов, которые добавляются после каждой покупки; 29 | * для количества баллов, которые сгорают каждый день. 30 | 3. Посчитайте, какая сумма будет на балансе через 10 дней. 31 | 4. Выведите баланс пользователя на экран. 32 | 33 | *** 34 | 35 | ## Задача 3 36 | 37 | Сегодня мы объявили акцию — можно потратить все бонусные баллы на покупку пастилы, килограмм которой стоит 80 рублей. Покупать можно только целые килограммы пастилы. Какое максимальное количество килограммов может купить Лев Толстой на свои бонусы? 38 | 39 | ### Процесс реализации 40 | 1. Используйте переменную `bonusBalance` со значением бонусного баланса из задачи 1. 41 | 2. Создайте переменную, которая будет хранить стоимость килограмма пастилы. Инициализируйте её значением. 42 | 3. С помощью оператора взятия остатка посчитайте, сколько баллов останется у Льва Толстого после покупки максимального количества пастилы. 43 | 4. Вычислите разность между балансом и остатком. 44 | 5. Из п. 3 рассчитайте максимальное количество килограммов, которое можно купить. 45 | 6. Выведите результат на экран. 46 | 47 | --- 48 | 49 | ## Инструкция по выполнению домашнего задания 50 | 51 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 52 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 53 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 54 | 5. Код пишите в открывшемся редакторе проекта. 55 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 56 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 57 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 58 | 59 | ## Правила приёма домашнего задания 60 | 61 | 1. При выполнении задания придерживайтесь [правил оформления кода на JavaScript](/codestyle.md). 62 | 2. Никаких файлов прикреплять не нужно. 63 | 3. Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке». 64 | 65 | Любые вопросы по решению задач задавайте в чате учебной группы. 66 | -------------------------------------------------------------------------------- /1.2_if_and_boolean/README.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к занятию «1.2. Логический тип и ветвление» 2 | 3 | Наш интернет-магазин становится всё более популярным. Пользователей с каждым днём становится больше, и они хотят всё больше новых функций. 4 | 5 | ## Задача 1 6 | 7 | Рядом с именем пользователя в интернет-магазине отображается пометка. Она зависит от типа пользователя и его бонусного баланса. Обратите внимание: лейбл с пометкой должен быть только один. Например, если нам подходит и «Администратор», и «Вип-клиент», то нужно печатать тот, который подошёл первым — сначала проверка по имени, потом по репутации. 8 | 9 | ### Процесс реализации 10 | 11 | 1. Создайте переменные, которые хранят: 12 | - имя пользователя; 13 | - баланс пользователя. 14 | 2. Инициализируйте переменные тестовыми значениями. Например, `'Vova'` и `90`. Значения могут быть любыми. 15 | 3. Если имя пользователя `admin`, нужно вывести на печать слово `Администратор`. 16 | 4. Если имя пользователя пустое, то нужно вывести на печать слово `Гость`. 17 | 5. Во всех остальных случаях нужно проверить баланс пользователя. Если он больше 1000 — напечатать `Постоянный покупатель`, если больше 5000 — напечатать `Вип-клиент`. 18 | 6. Изменяя тестовые значения, убедитесь, что код работает верно. 19 | 20 | *** 21 | 22 | ## Задача 2 23 | 24 | Ведущий разработчик поручил вам написать проверку, может ли пользователь изменить свой заказ. Если пользователь может редактировать сообщение, то нужно напечатать фразу `Редактирование разрешено`. В противном случае напечатать фразу `Заказ нельзя редактировать`. 25 | 26 | ### Процесс реализации 27 | 28 | 1. Создайте переменные: 29 | - `user`; 30 | - `orderOwner`. 31 | 32 |         В эти переменные будет сохраняться информация, полученная от пользователя. 33 | 34 | 2. Инициализируйте переменные проверочными значениями. Например, `user = 'netologist', orderOwner = 'leo_tolstoy'`. Ваш код должен работать с любыми значениями этих переменных. 35 | 3. Редактирование разрешено только в случае, если пользователь является либо владельцем заказа, либо администратором с именем `admin`. 36 | 4. Если редактирование разрешено, напечатайте фразу `Редактирование разрешено`, в противном случае — фразу `Заказ нельзя редактировать`. 37 | 5. Изменяя значения тестовых переменных, убедитесь, что код работает верно во всех возможных случаях. 38 | 39 | *** 40 | 41 | ## Задача 3 42 | 43 | Мы решили изменить бонусную систему. Теперь покупатель получает бонусные баллы в зависимости от размера бонусного баланса и того, как часто он совершает покупки. Обычно мы начисляем 10 % от суммы покупки на бонусный счёт, но если у клиента на счету больше 5000 бонусных баллов, то начисляем 20 % от суммы. Дополнительно мы добавляем 5 % к начислению, если это не первая покупка в этом месяце. 44 | 45 | Реализуйте эту схему расчёта бонусных баллов. 46 | 47 | ### Процесс реализации 48 | 49 | 1. Создайте переменные для хранения: 50 | - бонусного баланса; 51 | - количества покупок в этом месяце; 52 | - стандартного размера начисления в процентах; 53 | - повышенного размера начисления в процентах; 54 | - добавки за частые покупки в процентах. 55 | 2. Инициализируйте переменные тестовыми значениями. Например, пользователь покупает на 3000 рублей, на его балансе — 500 баллов, это его вторая покупка в этом месяце. Тогда мы должны начислять 15 % от суммы заказа. 56 | 3. Создайте дополнительную переменную для хранения итогового процента. Запишите в неё применяемый размер начисления в процентах. 57 | 4. Проверьте, не нужно ли добавить бонус за частые покупки. 58 | 5. Выведите на печать размер бонуса в % за покупку: `Процент от покупки: Y` , где вместо Y будет процент. 59 | 6. Изменяя тестовые значения, проверьте, что ваш код работает верно при различных стартовых значениях. 60 | 61 | --- 62 | 63 | ## Инструкция по выполнению домашнего задания 64 | 65 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 66 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 67 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 68 | 5. Код пишите в открывшемся редакторе проекта. 69 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 70 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 71 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 72 | 73 | ## Правила приёма домашнего задания 74 | 75 | 1. При выполнении задания придерживайтесь [правил оформления кода на JavaScript](/codestyle.md). 76 | 2. Никаких файлов прикреплять не нужно. 77 | 3. Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке». 78 | 79 | Любые вопросы по решению задач задавайте в чате учебной группы. 80 | -------------------------------------------------------------------------------- /1.3_strings_and_debug/README.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к занятию «1.3. Строки. Алгоритмы. Как отлаживать код» 2 | 3 | Продолжаем работать над нашим интернет-магазином. Пользовательская база выросла, и новые фичи нужны ещё больше. Но нельзя забывать о стабильных релизах и внимательном отношении к багам, даже когда пользователи очень ждут новые возможности. 4 | 5 | ## Задача 1 6 | 7 | Когда пользователь помещает товар в корзину, мы должны показать эту информацию на странице товара. 8 | 9 | ### Процесс реализации 10 | 11 | 1. Создайте переменные: 12 | - `product` и заполните её значением `Печенье «Юбилейное», 1 кг`; 13 | - `inBasket`, заполните её значением `true`; 14 | - `quantity`, заполните её значением `5`. 15 | 2. Если товар находится в корзине, выведите на печать `5 x Печенье «Юбилейное», 1 кг`. Данные возьмите из переменных. 16 | 17 | *** 18 | 19 | ## Задача 2 20 | 21 | Вам поступила задача отобразить статус аккаунта пользователя в интернет-магазине. Чем чаще клиент покупает, тем выше его статус и больше процент кэшбека на бонусный счёт. Обычные пользователи (`regular`) получают 10 % от суммы покупок, улучшенные (`extended`) — 15 %, премиум (`premium`) — 20 %, а вип (`vip`) — 30 %. 22 | 23 | Реализуйте выбор размера кэшбека, если статус аккаунта приходит к нам в переменную `accountStatus`. 24 | 25 | ### Процесс реализации 26 | 27 | 1. Создайте переменные: 28 | - accountStatus; 29 | - username; 30 | - cashbackPercentage. 31 | 2. Заполните переменные `accountStatus` и `username` тестовыми данными. Переменная `accountStatus` может принимать значения: `'extended'`, `'premium'`, `'vip'`. Любое другое значение считаем обычным аккаунтом. 32 | 3. Напишите конструкцию, которая определяет размер кэшбека по статусу. 33 | 4. Напечатайте текст `"username | (regular|extended|premium|vip) аккаунт"`. 34 | 5. Напечатайте размер кэшбека `"Вы получаете X % с покупок на бонусный счёт"`. 35 | 6. Реализуйте программу без дублирования вывода в ветках условной конструкции. 36 | 37 | *** 38 | 39 | ## Задача 3 40 | 41 | Новую версию интернет-магазина запускали в пятницу ночью и сделали много ошибок. Найдите ошибки в коде и исправьте их. 42 | 43 | Стартовый код: 44 | ```javascript 45 | let user = 'Killer2001'; 46 | if ((user = 'admin')) { 47 | console.log("Привет, админ!/n Проверь нет ли жалоб от пользователей!"); 48 | } else { 49 | console.log('Здравствуйте ' + user + '! У нас новые поступления халвы!'); 50 | } 51 | 52 | let newOrders = 6; 53 | let errorOrders = 3; 54 | // показываем сколько новых заказов, а сколько заказов с ошибкой 55 | if (newOrders > errorOrders) { 56 | console.log('В магазине ' + newOrders + ' новых заказов (с ошибкой: ' + errorOreders + ')'); 57 | } 58 | 59 | if (newOrders === errorOrders) { 60 | console.log('ВНИМАНИЕ! Что-то идет не так! Все новые заказы завершились ошибкой!'); 61 | } 62 | ``` 63 | 64 | --- 65 | 66 | ## Инструкция по выполнению домашнего задания 67 | 68 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 69 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 70 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 71 | 5. Код пишите в открывшемся редакторе проекта. 72 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 73 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 74 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 75 | 76 | ## Правила приёма домашнего задания 77 | 78 | 1. При выполнении задания придерживайтесь [правил оформления кода на JavaScript](/codestyle.md). 79 | 2. Никаких файлов прикреплять не нужно. 80 | 3. Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке». 81 | 82 | Любые вопросы по решению задач задавайте в чате учебной группы. 83 | -------------------------------------------------------------------------------- /2.1_array/README.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к занятию «2.1. Массивы и базовые методы работы с ними» 2 | 3 | ## Задача 1 4 | 5 | Пользователь отправляет сообщения в мессенджер, и вам нужно где-то их хранить. Для этого создайте массив и сохраните в нём сообщения в том порядке, в котором они приведены: 6 | 7 | — Привет! Есть ли новости? 8 | 9 | — :) 10 | 11 | — Начал работать над заданием. 12 | 13 | — Ленюсь. 14 | 15 | — Но дело движется. 16 | 17 | ### Что нужно повторить 18 | 19 | 1. Создание нового массива. 20 | 2. Создание новых элементов массива. 21 | 3. Вывод сообщений в консоль. 22 | 23 | ### Этапы выполнения задания 24 | 25 | 1. Создайте массив. 26 | 2. Инициализируйте его приведёнными выше значениями. 27 | 3. Выведите массив в консоль. 28 | 29 | *** 30 | 31 | ## Задача 2 32 | 33 | Пользователь написал сообщение «Готово!». Вам нужно добавить его в список сообщений. Потом пользователь заменил сообщение «Ленюсь» на «Стараюсь», а затем удалил сообщение «:)». Все эти изменения нужно отразить в исходном массиве. 34 | 35 | 1. Добавьте сообщение «Готово!» в конец массива из задания 1. 36 | 2. Отредактируйте сообщение «Ленюсь» на «Стараюсь». 37 | 3. Удалите сообщение «:)» из массива. 38 | 4. Напечатайте массив в консоль. 39 | 40 | ### Что нужно повторить 41 | 42 | 1. Методы работы с массивом. 43 | 2. Вывод в консоль. 44 | 45 | ### Этапы выполнения задания 46 | 47 | 1. Добавьте в конец массива от прошлой задачи сообщение **«Готово»**. 48 | 2. Измените сообщение **«Ленюсь»** на **«Стараюсь»**. 49 | 3. Найдите индекс сообщения **«:)»** и удалите его. 50 | 4. Выведите массив в консоль. 51 | 52 | *** 53 | 54 | ## Задача 3 55 | 56 | В прошлом задании мы удалили запись по индексу, но программа должна работать автоматически. Для этого программе нужно находить индекс удаляемого сообщения самостоятельно. Запишите сообщение, которое желает удалить пользователь, в переменную и найдите индекс сообщения. Если сообщение нашлось, то удалите его. 57 | 58 | ### Что нужно повторить 59 | 60 | 1. Создание переменных (`let`). 61 | 2. Индексы массива. 62 | 3. Методы работы с массивом. 63 | 4. Вывод сообщений в консоль. 64 | 65 | ### Этапы выполнения задания 66 | 67 | 1. Объявите переменную. 68 | 2. Запишите сообщение в эту переменную. 69 | 3. Найдите индекс необходимого сообщения. 70 | 4. Если сообщение нашлось в массиве, удалите найденное сообщение по индексу. Если нет — не делайте ничего. 71 | 5. Выведите получившийся массив в консоль. 72 | 73 | --- 74 | 75 | ## Инструкция по выполнению домашнего задания 76 | 77 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 78 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 79 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 80 | 5. Код пишите в открывшемся редакторе проекта. 81 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 82 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 83 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 84 | 85 | ## Правила приёма домашнего задания 86 | 87 | 1. При выполнении задания придерживайтесь [правил оформления кода на JavaScript](/codestyle.md). 88 | 2. Никаких файлов прикреплять не нужно. 89 | 3. Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке». 90 | 91 | Любые вопросы по решению задач задавайте в чате учебной группы. 92 | -------------------------------------------------------------------------------- /2.2_cycles/README.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к занятию «2.2. Циклы» 2 | 3 | ## Задача 1 4 | 5 | Пользователь обменивается сообщениями в чате с Мисс Марпл. Первое сообщение отправляет она, второе — пользователь, и так далее. Выведите беседу таким образом, чтобы сверху были самые старые сообщения, а ниже — новые. 6 | 7 | *Пример переписки:* 8 | 9 | ==Вы: «Привет!» 10 | 11 | Мисс Марпл: «Здорово, коль не шутишь!»== 12 | 13 | ### Что нужно повторить 14 | 15 | 1. Инициализация массива. 16 | 2. Создание цикла. 17 | 3. Обход массива с помощью цикла. 18 | 4. Заполнение массива с помощью цикла. 19 | 20 | ### Этапы выполнения задания 21 | 22 | 1. Инициализируйте массив сообщений. 23 | 2. Заполните его данными: 24 | 25 | — «Я принесла тебе утренний чай. Обычно ты ещё спишь». 26 | 27 | — «Вы приносите мне чай по утрам?» 28 | 29 | — «А ты как думаешь, откуда он берётся?» 30 | 31 | — «Не знаю. Я думал, это само собой разумеющееся». 32 | 33 | 3. Напишите цикл для вывода сообщений. 34 | 4. В зависимости от номера сообщения нужно подставлять в начало сообщения либо «Мисс Марпл», либо «Вы». 35 | 36 | *** 37 | 38 | ## Задача 2 39 | 40 | Нужно добавить функцию поиска по тексту сообщений в вашем мессенджере. 41 | 42 | **Например**, пользователь ищет слово «думаешь», и ему отображаются все сообщения с этим текстом. 43 | 44 | ### Что нужно повторить 45 | 46 | Инициализация и использование переменных. 47 | 48 | ### Этапы выполнения задания 49 | 50 | 1. Инициализируйте переменную, в которой будет храниться искомый текст. Например, слово «чай». 51 | 2. Для поиска используйте метод `includes` для строки. 52 | 53 | Пример использования метода для поиска слова «зелёный» в строке «чёрный чай»: 54 | 55 | ``` 56 | «Чёрный чай».includes(«зелёный»); // вернёт false 57 | ``` 58 | 59 | Метод возвращает `true`, если слово есть в строке, и `false`, если нет. 60 | 61 | 3. Напечатайте списком все сообщения, в которых есть искомая строка. 62 | 63 | *** 64 | 65 | ## Задача 3 66 | 67 | Пользователи не всегда пишут друг другу сообщения по порядку. Но наш мессенджер пока не умеет обрабатывать ситуации, когда один пользователь прислал вам несколько сообщений подряд. 68 | 69 | Для этого массив сообщений **messages** придётся расширить. 70 | 71 | Вместо строк в этом массиве вы будете хранить маленькие вложенные массивы. На первом месте в этих массивах будет автор, а на втором — сообщение: [автор, сообщение]. 72 | 73 | ### Что нужно повторить 74 | 75 | 1. Инициализация массива. 76 | 2. Обход массива с помощью цикла. 77 | 78 | ### Этапы выполнения задания 79 | 80 | 1. Создайте новый массив **messages**. 81 | 2. Заполните его новой структурой: 82 | 83 | [ "zloy-zloy", "Мы с Алешей сегодня на иксбоксе рубились, потом в маке поели, потом ему новый телефон купили, и два часа с горок в Нескучном саду катались"], 84 | 85 | ["zloy-zloy", "У Алеши завтра день рождения"], 86 | 87 | ["zloy-zloy", "Он мой дед. Ему будет 81 год"], 88 | 89 | ["Вы", "LOL"] 90 | 91 | 3. Создайте цикл для печати сообщения. В результате в консоль должен быть выведен чат, каждая строка которого соответствует шаблону `автор: сообщение`. 92 | 93 | --- 94 | 95 | ## Инструкция по выполнению домашнего задания 96 | 97 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 98 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 99 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 100 | 5. Код пишите в открывшемся редакторе проекта. 101 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 102 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 103 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 104 | 105 | ## Правила приёма домашнего задания 106 | 107 | 1. При выполнении задания придерживайтесь [правил оформления кода на JavaScript](/codestyle.md). 108 | 2. Никаких файлов прикреплять не нужно. 109 | 3. Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке». 110 | 111 | Любые вопросы по решению задач задавайте в чате учебной группы. 112 | -------------------------------------------------------------------------------- /2.3_associative_arrays/README.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к занятию «2.3. Ассоциативные массивы» 2 | 3 | Наш чат набрал отличные обороты. У нас много фич для пользователей, и пользовательская база тоже выросла. Так как мы спешили в процессе разработки, код стало сложно поддерживать, и пришло время рефакторинга. 4 | 5 | ## Задача 1 6 | 7 | Мы храним много информации о пользователе в разных переменных. Нужно помнить их названия, чтобы получать те или иные данные, а это неудобно. Давайте создадим ассоциативный массив `user`, в котором будем хранить информацию: имя пользователя, логин, репутацию, общее количество сообщений. 8 | 9 | ### Процесс реализации 10 | 11 | 1. Объявите переменную `user` и инициализируйте её свойствами: 12 | - name `'Лев Толстой'`; 13 | - login `'leo_tolstoy'`; 14 | - reputation `97`; 15 | - total `900`. 16 | 17 | 2. Напечатайте строку `'Лев Толстой, репутация 97, сообщений 900'`. 18 | 19 | *** 20 | 21 | ## Задача 2 22 | 23 | В прошлом домашнем задании вы создали массив сообщений в чате. Он состоял из вложенных массивов. Для печати вам нужно помнить, что под индексом `0` хранится `автор`, а под индексом `1` — `текст сообщения`. Это неудобно. 24 | 25 | Создайте новый массив, который будет состоять из объектов-сообщений с ключами `author` и `text`. 26 | 27 | ### Процесс реализации 28 | 29 | 1. Скопируйте и вставьте в свою работу код: 30 | 31 | ```javascript= 32 | let messages = [ 33 | [ "zloy-zloy", "Мы с Алешей сегодня на иксбоксе рубились, потом в маке поели, потом ему новый телефон купили, и два часа с горок в Нескучном саду катались."], 34 | ["zloy-zloy", "У Алеши завтра день рождения."], 35 | ["zloy-zloy", "Он мой дед. Ему будет 81 год."], 36 | ["Вы", "LOL"] 37 | ]; 38 | ``` 39 | 2. Создайте новую переменную и присвойте в качестве значения пустой простой массив. 40 | 3. **С помощью цикла** обойдите массив `messages` из скопированного кода. Преобразовывайте вложенные массивы в объекты с подходящими парами ключ-значение и добавляйте в массив, хранящийся в переменной из пункта 2. 41 | 42 | В результате у вас должна получиться структура: 43 | ``` 44 | Простой массив 45 | объект1 46 | объект2 47 | ... 48 | объектN 49 | Конец простого массива 50 | ``` 51 | 4. Напечатайте все сообщения из получившегося массива по шаблону: 52 | 53 | ``` 54 | Вы: Привет! 55 | Мисс Марпл: Здорово, коль не шутишь! 56 | ``` 57 | 58 | Обратите внимание: 59 | - не переписывайте исходный массив вручную, это будет считаться ошибкой; 60 | - для проверки результата работы цикла можно использовать дополнительный `console.log()`. 61 | 62 | *** 63 | 64 | ## Задача 3 65 | 66 | Пользователь мессенджера хочет общаться со всеми своими друзьями, а мы не учитывали это раньше — чат у нас может быть только один. Давайте исправим это. Добавим в ассоциативный массив с информацией о пользователе список чатов и сообщений в этих чатах. 67 | 68 | Для этого нужно добавить новый ключ `chats` в объект `user` из первого задания. В качестве значения для ключа `chats` установите новый ассоциативный массив. 69 | 70 | В этом ассоциативном массиве вы будете хранить список чатов. В качестве ключа используйте `имя собеседника`, а в качестве значения — `массив сообщений`. 71 | 72 | ### Процесс реализации 73 | 74 | 1. В объект `user` из первого задания добавьте пару ключ-значение. В качестве ключа используйте строку `'chats'`, в качестве значения — пустой ассоциативный массив. 75 | 76 | 2. Добавьте первый чат в список чатов. В качестве ключа используйте строку `'mama'`, в качестве значений массив сообщений: 77 | 78 | ```javascript= 79 | [ 80 | { author: "mama", text: "Ты покушал?" }, 81 | { author: "mama", text: "Почему не отвечаешь?" }, 82 | { author: "Вы", text: "Покушал, мам" }, 83 | ] 84 | ``` 85 | 86 | 3. Добавьте ещё один чат в список чатов. В качестве ключа используйте строку `'wife'`, в качестве значений массив сообщений: 87 | 88 | ```javascript= 89 | [ 90 | {author: "вы", text: "Устал и загрустил"}, 91 | {author: "вы", text: "Ленюсь"}, 92 | {author: "wife", text: "zzz"}, 93 | ] 94 | ``` 95 | 96 | 4. Напечатайте все сообщения из чата c `'wife'` по шаблону: 97 | 98 | ``` 99 | Вы: Привет! 100 | wife: Здорово, коль не шутишь! 101 | ``` 102 | 103 | 104 | --- 105 | 106 | ## Инструкция по выполнению домашнего задания 107 | 108 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 109 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 110 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 111 | 5. Код пишите в открывшемся редакторе проекта. 112 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 113 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 114 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 115 | 116 | ## Правила приёма домашнего задания 117 | 118 | 1. При выполнении задания придерживайтесь [правил оформления кода на JavaScript](/codestyle.md). 119 | 2. Никаких файлов прикреплять не нужно. 120 | 3. Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке». 121 | 122 | Любые вопросы по решению задач задавайте в чате учебной группы. 123 | -------------------------------------------------------------------------------- /3.1_function_no_args/README.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к занятию 3.1. «Функция без параметров. Область видимости» 2 | 3 | После успешной реализации мессенджера заказчик захотел создать корпоративный форум для сотрудников. Мы использовали готовое решение, но требуются некоторые доработки. 4 | 5 | ## Задача 1 6 | 7 | В конце страницы форума нужно отображать информацию о текущей версии. Для этого создайте функцию, которая будет печатать эту информацию. 8 | 9 | ### Процесс реализации 10 | 11 | 1. Объявите функцию `about`, которая будет печатать строку `Forum Netology, 1.0.`, версию приложения храните в переменной внутри функции. 12 | 2. Вызовите функцию. Убедитесь, что она работает. 13 | 14 | *** 15 | 16 | ## Задача 2 17 | 18 | Информация об авторизованном пользователе хранится в глобальном объекте `user`. Пример такого объекта: 19 | 20 | ```js 21 | let user = { 22 | name: "Иван Иванов", 23 | login: "killer504", 24 | reputation: 97, 25 | messages: [ 26 | {from: "administrator", text: "Вы получили предупреждение за публикацию рекламы на форуме"}, 27 | {from: "Петр", text: "Собираем встречу в субботу в 19:00. Придёшь?"}, 28 | {from: "administrator", text: "Ваш рейтинг был повышен пользователем DonkeyKong"}, 29 | {from: "administrator", text: "Ваш рейтинг был повышен пользователем Netologist"}, 30 | {from: "Brian Kerninghan", text: "hello, world"} 31 | ] 32 | }; 33 | ``` 34 | 35 | Напишите функцию, которая будет печатать список сообщений для пользователя. 36 | 37 | ### Процесс реализации 38 | 39 | 1. Объявите переменную `user` и заполните её тестовыми данными. 40 | 2. Убедитесь, что переменная `user` не объявлена внутри функции. 41 | 3. В теле функции выполните действия: 42 | 43 | * напечатайте заголовок `Всего сообщений: n`, где `n` — количество элементов (сообщений) в массиве `user.messages`; 44 | * из функции обратитесь к переменной `user`. Напечатайте имя отправителя сообщения и текст сообщения. 45 | 46 | Шаблон вывода: 47 | 48 | ``` 49 | Имя1 | Текст сообщения 50 | Имя2 | Текст сообщения №2 51 | ``` 52 | 4. Вызовите функцию и убедитесь, что печать выполняется корректно. 53 | 54 | *** 55 | 56 | ## Задача 3 57 | 58 | На форуме должен появиться раздел с настройками: 59 | 60 | ![Картинка страницы раздела настроек](./task3_img.png) 61 | 62 | Код для отображения отдельных частей уже написан, но нужно собрать раздел воедино. Разработчик подготовил для вас код четырёх функций, которые выводят на экран части раздела: 63 | 64 | * `version` — вывод информации о версии приложения; 65 | * `title` — вывод заголовка страницы; 66 | * `navigation` — вывод навигации по разделам; 67 | * `menu` — вывод меню. 68 | 69 | Также разработчик сказал, что будет вызывать функцию `page` из файла `script.js` для отрисовки страницы. Её и нужно написать так, чтобы ваш результат совпал с ожидаемым. 70 | 71 | [Заготовка домашнего задания](https://repl.it/@netology_pb/PB-31-Zadaniie-3-Funktsii). 72 | 73 | ### Процесс реализации 74 | 75 | 1. Откройте [заготовку домашнего задания](https://repl.it/@netology_pb/PB-31-Zadaniie-3-Funktsii). Всю работу нужно вести в файле `script.js`. 76 | 2. Проанализируйте, в какой последовательности нужно вызвать функции, чтобы раздел собрался в нужном порядке. 77 | 3. Создайте функцию `page`. 78 | 4. Вызовите функции отображения частей раздела в нужном порядке. 79 | 5. Функцию `page` вызывать не нужно, она будет вызываться автоматически при нажатии на кнопку Run. 80 | 6. Проверьте, что вывод на вкладке **result** совпадает с картинкой из условия. 81 | 82 | --- 83 | 84 | ## Инструкция по выполнению домашнего задания 85 | 86 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 87 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 88 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 89 | 5. Код пишите в открывшемся редакторе проекта. 90 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 91 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 92 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 93 | 94 | ## Правила приёма домашнего задания 95 | 96 | 1. При выполнении задания придерживайтесь [правил оформления кода на JavaScript](/codestyle.md). 97 | 2. Никаких файлов прикреплять не нужно. 98 | 3. Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке». 99 | 100 | Любые вопросы по решению задач задавайте в чате учебной группы. 101 | -------------------------------------------------------------------------------- /3.1_function_no_args/task3_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netology-code/pb-homeworks/6363a25fc2e62f97f4759ba850123e5407912d9b/3.1_function_no_args/task3_img.png -------------------------------------------------------------------------------- /3.2_function_params_returns/README.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к занятию «3.2. Параметры и возвращаемое значение» 2 | 3 | Форум рос и процветал. Заказчику потребовались возможности более тонкого управления приложением. 4 | 5 | ## Задача 1 6 | 7 | Напишите функцию, которая умеет возвращать посчитанную репутацию пользователя по формуле: разница лайков и дизлайков, которые ставят другие пользователи, умноженная на коэффициент. Коэффициент — доля не отредактированных сообщений пользователя. Если дизлайков больше, чем лайков, то коэффициент не применяется. Если сообщений у пользователя нет, его репутация равна 0. 8 | 9 | ### Процесс реализации 10 | 11 | 1. Объявите функцию с параметрами: количество лайков, дизлайков, количество отредактированных сообщений и общее количество сообщений. 12 | 2. Посчитайте репутацию по формуле. 13 | 3. Верните значение из функции. 14 | 4. Вызовите функцию с различными значениями, напечатайте значение и убедитесь, что репутация считается верно. 15 | 16 | *** 17 | 18 | ## Задача 2 19 | 20 | Форумы содержат много тем для обсуждения, и вам часто приходится печатать по несколько сообщений из каждой темы. В одной книге вы прочитали, что такие частые операции нужно выделять в функции, и решили выделить печать ленты сообщений в теме в отдельную функцию. 21 | 22 | На вход функция принимает объект темы `thread`, а также количество сообщений для печати. 23 | 24 | Тестовый объект `thread`: 25 | ```js 26 | let thread = { 27 | title: "Поделитесь книжкой", 28 | author: "RuBrick", 29 | total: 23, 30 | messages: [ 31 | { 32 | id: 13201, 33 | date: "2018-01-09", 34 | text: "Посоветуйте, пожалуйста, с одной стороны подробную, а с другой доступную для понимания книгу по javascript. Спасибо", 35 | author: { 36 | name: "RuBrick", 37 | login: "ru_brick", 38 | reputation: 3, 39 | role: "user" 40 | } 41 | }, 42 | { 43 | id: 13208, 44 | date: "2018-01-12", 45 | text: "Неужели нет хорошей литературы?", 46 | author: { 47 | name: "RuBrick", 48 | login: "ru_brick", 49 | reputation: 3, 50 | role: "user" 51 | } 52 | }, 53 | { 54 | id: 13209, 55 | date: "2018-01-12", 56 | text: "в общем, NodeJS это JS + некоторые доп. модули и объекты. Тебе нужна литература по самому JS и дока на официальном сайте.", 57 | author: { 58 | name: "Popov", 59 | login: "popov_ma", 60 | reputation: 2310, 61 | role: "user" 62 | } 63 | }, 64 | { 65 | id: 13219, 66 | date: "2018-01-14", 67 | text: "В сети много сайтов с хорошими объяснениями + есть курсы.", 68 | author: { 69 | name: "Void", 70 | login: "void", 71 | reputation: 5005, 72 | role: "user" 73 | } 74 | }, 75 | { 76 | id: 13220, 77 | date: "2018-01-14", 78 | text: "Есть большая книга «JavaScript. Подробное руководство», потом смотришь документацию.", 79 | author: { 80 | name: "noname", 81 | login: "noname", 82 | reputation: 100, 83 | role: "user" 84 | } 85 | }, 86 | { 87 | id: 13250, 88 | date: "2018-01-19", 89 | text: "Или можно посмотреть видеокурсы на YouTube! А самое главное — практика! И этот форум — лучшая тренировочная площадка!", 90 | author: { 91 | name: "noname", 92 | login: "noname", 93 | reputation: 110, 94 | role: "user" 95 | } 96 | }, 97 | { 98 | id: 13259, 99 | date: "2018-01-20", 100 | text: "Понял, спасибо!", 101 | author: { 102 | name: "RuBrick", 103 | login: "ru_brick", 104 | reputation: 13, 105 | role: "user" 106 | } 107 | } 108 | ] 109 | }; 110 | ``` 111 | 112 | ### Процесс реализации 113 | 114 | 1. Объявите функцию с нужным количеством параметров. 115 | 2. Выводите на печать заданное количество сообщений в этой теме. Если количество сообщений, которые нужно напечатать, меньше, чем общее число сообщений, то выбирайте самые новые сообщения — т. е. если нужно напечатать 5 сообщений, а всего в теме 10 сообщений, то нужно выбрать 5 самых свежих. Шаблон для печати: 116 | ``` 117 | Автор1 (репутация: 5): текст сообщения 118 | Автор2 (репутация: 10): текст сообщений 119 | ``` 120 | 3. Если сообщений в теме нет, напечатайте текст «Ошибка формата! В теме нет сообщений». 121 | 4. Убедитесь, что функция работает корректно. 122 | 123 | *** 124 | 125 | ## Задача 3 126 | 127 | В каждом сообщении вы решили хранить информацию о том, редактировалось оно или нет. Для этого вы используете ключ `edited` и устанавливаете его в `true`, если сообщение отредактировано, и в `false` в противном случае. Нужно написать функцию, которая по списку сообщений возвращала бы статистику: сколько сообщений из списка отредактировано, сколько нет и общее число сообщений в списке. 128 | 129 | Тестовый массив `allMessages`: 130 | ```js 131 | let allMessages = [ 132 | {author: "zloy-zloy", text: "А у кого какой мобильный??", edited: true}, 133 | {author: "zloy-zloy", text: "Я с андроидом. Уже 3 года живёт, он самым крепким оказался, пережил 2 утопления.", edited: false}, 134 | {author: "МамаЗузу", text: "Айфон в своё время успешно сдох при первом же падении на кафельную плитку.", edited: false}, 135 | {author: "void", text: "У меня андроид. Особенно нравится, что никаких заморочек с айтюнс.", edited: false}, 136 | {author: "mama", text: "Айфон.", edited: false}, 137 | {author: "mama", text: "Почему не отвечаешь?", edited: false}, 138 | {author: "void", text: "Дэвид Хэрман «Сила JavaScript. 68 способов эффективного использования JS».", edited: false}, 139 | {author: "void", text: "Marijn Haverbeke, Вячеслав Голованов «Выразительный javascript: Введение».", edited: false}, 140 | {author: "void", text: "Ленюсь.", edited: false}, 141 | {author: "void", text: "Пока оценивать нечего.", edited: false}, 142 | {author: "void", text: "Не по-русски как-то получается, хоть и на русском.", edited: false}, 143 | {author: "ivanov", text: "Чип и Дейл прикольно, играл в детстве.", edited: false}, 144 | {author: "ivanov", text: "hello, world", edited: true}, 145 | {author: "void", text: "Сейчас напишу книгу по JS.", edited: false}, 146 | {author: "ivanov", text: "Спасибо.", edited: false}, 147 | {author: "ivanov", text: "Смысл такого видео? Все непонятные функции приходится самому смотреть. Надо не так делать. Пишете код — объясняете сразу, что к чему, голосом, ну, или там, текстом хотя бы, хотя лучше голосом.", edited: true}, 148 | {author: "void", text: "Поделитесь видеоканалами по js.", edited: false}, 149 | {author: "void", text: "Ничего не понравилось.", edited: false} 150 | ]; 151 | ``` 152 | 153 | ### Процесс реализации 154 | 155 | 1. Создайте функцию, принимающую на вход список сообщений. 156 | 2. Посчитайте общее количество сообщений, количество отредактированных и не отредактированных сообщений. 157 | 3. Верните рассчитанные данные из функции. 158 | 159 | --- 160 | 161 | ## Инструкция по выполнению домашнего задания 162 | 163 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 164 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 165 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 166 | 5. Код пишите в открывшемся редакторе проекта. 167 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 168 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 169 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 170 | 171 | ## Правила приёма домашнего задания 172 | 173 | 1. При выполнении задания придерживайтесь [правил оформления кода на JavaScript](/codestyle.md). 174 | 2. Никаких файлов прикреплять не нужно. 175 | 3. Все задачи обязательны к выполнению для получения зачёта. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом «На доработке». 176 | 177 | Любые вопросы по решению задач задавайте в чате учебной группы. 178 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Домашнее задание к курсу «Основы программирования» 2 | 3 | При выполнении заданий придерживайтесь [правил оформления кода на JavaScript](./codestyle.md). 4 | 5 | ## Список заданий 6 | 7 | ### Блок 1. Типы данных и ветвление 8 | 9 | [1.1. Базовые понятия. Переменные и числа](./1.1_variables) 10 | 11 | [1.2. Логический тип и ветвление](./1.2_if_and_boolean) 12 | 13 | [1.3. Строки. Алгоритмы. Как отлаживать код](./1.3_strings_and_debug) 14 | 15 | ### Блок 2. Структуры данных и циклы 16 | 17 | [2.1. Массивы и базовые методы работы с ними](./2.1_array/) 18 | 19 | [2.2. Циклы](./2.2_cycles/) 20 | 21 | [2.3. Ассоциативные массивы](./2.3_associative_arrays) 22 | 23 | ### Блок 3. Функции 24 | 25 | [3.1. Функция без параметров. Область видимости](./3.1_function_no_args) 26 | 27 | [3.2. Параметры и возвращаемое значение](./3.2_function_params_returns/) 28 | 29 | ## Требования 30 | 31 | - Браузер (рекомендуем последние версии Chrome, Firefox, Safari). 32 | 33 | ## Начало работы 34 | 35 | 1. Зарегистрируйтесь на [stackblitz](https://stackblitz.com/). 36 | 2. Для создания проекта, используйте кнопку *+New Project* в правом верхнем углу экрана. 37 | 4. В модальном окне выберите вкладку *Vanilla* проект *node.new* 38 | 5. Код пишите в открывшемся редакторе проекта. 39 | 6. Для запуска проекта, в терминале (который отображается снизу) введите команду `node index.js`. 40 | 7. После окончания работы, для отправки на проверку, кликните по кнопке Share (сверху слева). В открывшемся модальном окне скопируйте ссылку на проект. 41 | 8. В личном кабинете на сайте [netology.ru](http://netology.ru/) в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку. 42 | 43 | _Никаких файлов прикреплять не нужно._ 44 | -------------------------------------------------------------------------------- /codestyle.md: -------------------------------------------------------------------------------- 1 | # Правила оформления JavaScript-кода 2 | 3 | 1. [Объекты](#1-Объекты) 4 | 1.1. [Создание объекта](#11-Создание-объекта) 5 | 1.2. [Зарезервированные слова](#12-Зарезервированные-слова) 6 | 1.3. [Ключевые слова](#13-Ключевые-слова) 7 | 1.4. [Создание обьекта на 3 и более элементов](#14-Создание-обьекта-на-3-и-более-элементов) 8 | 2. [Переменные](#2-Переменные) 9 | 3. [Функции](#3-Функции) 10 | 3.1. [Именование функции](#31-Именование-функции) 11 | 3.2. [Передача функции в функцию](#32-Передача-функции-в-функцию) 12 | 4. [Отступы](#4-Отступы) 13 | 4.1. [Горизонтальные отступы](#41-Горизонтальные-отступы) 14 | 4.2. [Вертикальные отступы](#42-Вертикальные-отступы) 15 | 5. [Пробелы](#5-Пробелы) 16 | 6. [Скобки](#6-Скобки) 17 | 7. [Кавычки](#7-Кавычки) 18 | 8. [Точка с запятой](#8-Точка-с-запятой) 19 | 9. [Комментарии](#9-Комментарии) 20 | 21 | ## 1. Объекты 22 | 23 | ### 1.1 Создание объекта 24 | Для создания объекта используйте фигурные скобки. Не создавайте объекты через конструктор `new Object()`. 25 | 26 | **Хорошо** 27 | ```javascript 28 | let item = {}; 29 | ``` 30 | 31 | **Плохо** 32 | ```javascript 33 | let item = new Object(); 34 | ``` 35 | 36 | ### 1.2 Зарезервированные слова 37 | Не используйте зарезервированные слова в качестве ключей объектов. Они не будут работать в IE 8. 38 | 39 | [Подробнее](https://github.com/airbnb/javascript/issues/61) 40 | 41 | **Хорошо** 42 | ```javascript 43 | let superman = { 44 | defaults: { clark: 'kent' }, 45 | hidden: true 46 | }; 47 | ``` 48 | 49 | **Плохо** 50 | ```javascript 51 | let superman = { 52 | default: { clark: 'kent' }, 53 | private: true 54 | }; 55 | ``` 56 | 57 | ### 1.3 Ключевые слова 58 | Не используйте ключевые слова, в том числе изменённые. Вместо них используйте синонимы. 59 | 60 | **Хорошо** 61 | ```javascript 62 | let superman = { 63 | type: 'alien' 64 | }; 65 | ``` 66 | 67 | **Плохо** 68 | ```javascript 69 | let superman = { 70 | class: 'alien' 71 | }; 72 | ``` 73 | 74 | ### 1.4 Создание объекта на 3 и более элементов 75 | При создании объектов, равно как и массивов, содержащих большое количество свойств (элементов) и тем самым образующих строки длиной более 20 символов, нужно выполнять ряд условий: 76 | 77 | * открывающая скобка располагается на той же строке, 78 | * каждое свойство оформляется на новой строке, 79 | * после двоеточия ставится пробел, 80 | * закрывающая скобка располагается на новой строке. 81 | 82 | **Хорошо** 83 | ```javascript 84 | let superman = { 85 | defaults: { clark: 'kent' }, 86 | type: 'alien', 87 | hidden: true 88 | }; 89 | ``` 90 | 91 | **Плохо** 92 | ```javascript 93 | let superman = { 94 | defaults:{clark:'kent'}, 95 | type:'alien', 96 | hidden:true 97 | }; 98 | ``` 99 | 100 | 101 | **Плохо** 102 | ```javascript 103 | let superman = {defaults: { clark: 'kent' }, type: 'alien', hidden: true}; 104 | ``` 105 | 106 | ## 2. Переменные 107 | Для именования переменных используйте существительные на английском языке. 108 | * Не используйте транслит (слова на русском языке латинскими буквами). 109 | * Имя переменной должно быть осмысленным. 110 | * Имя переменной не должно состоять из одной буквы (кроме итераторов циклов `i` и `j`). 111 | * Для имён, состоящих из нескольких слов, используйте [camelCase](https://techrocks.ru/2018/08/09/most-common-programming-case-types/). 112 | 113 | Имя может состоять из букв, цифр, символов $ и _, не должно начинаться с цифры. 114 | 115 | **Хорошо** 116 | ```javascript 117 | let vegetables; 118 | let hasPositiveSaldoAccount; 119 | ``` 120 | 121 | **Плохо** 122 | ```javascript 123 | let rrfgov; 124 | let ovoschi; 125 | let HasPositiveSaldoAccount; 126 | let has_positive_saldo_account; 127 | let a; 128 | ``` 129 | 130 | ## 3. Функции 131 | 132 | ### 3.1 Именование функции 133 | Имя функции должно быть глаголом (кроме функций-конструкторов) на английском языке или начинаться с него. 134 | 135 | * Не используйте транслит (слова на русском языке латинскими буквами). 136 | * Имя функции должно быть осмысленным. 137 | * Для имён, состоящих из нескольких слов, используйте [camelCase](https://techrocks.ru/2018/08/09/most-common-programming-case-types/). Исключение — [функции конструкторы](https://learn.javascript.ru/constructor-new). 138 | 139 | **Хорошо** 140 | ```javascript 141 | function editName() { 142 | // Тело функции 143 | }; 144 | 145 | function Vehicle(name) { 146 | // Тело функции 147 | } 148 | ``` 149 | 150 | **Плохо** 151 | ```javascript 152 | function pravkaspiska() { 153 | // Тело функции 154 | }; 155 | 156 | function GetVehicle(name) { 157 | // Тело функции 158 | } 159 | ``` 160 | 161 | ### 3.2 Передача функции в функцию 162 | Передавая функцию как аргумент в другую функцию, оформляйте код, как в примере ниже: 163 | ```javascript 164 | let arr = ['Яблоко', 'Апельсин', 'Груша']; 165 | arr.forEach(function(item, i, arr){ 166 | alert(i + ': ' + item + ' (массив:' + arr + ')'); 167 | }); 168 | 169 | arr.forEach((item, i, arr) => alert(i + ': ' + item + ' (массив:' + arr + ')')); 170 | ``` 171 | 172 | ## 4. Отступы 173 | 174 | ### 4.1 Горизонтальные отступы 175 | Отступ при вложенности — 2 пробела на каждый уровень вложенности. 176 | * Не используйте символы табуляции. 177 | * Отступы должны быть равномерными. Для каждого вложенного блока отступ должен увеличиваться ровно на 2 пробела. По одному отступу должно быть понятно, к какому блоку относится действие. 178 | * В редакторе кода символ табуляции можно заменить на 2 пробела. 179 | * Включите отображение невидимых символов. 180 | * Для корректности отступов желательно использовать расширение indent-rainbow, которое раскрашивает блоки отступов в разные цвета. С этим расширением не должно быть отступов, выделенных красным цветом. 181 | 182 | **Хорошо** 183 | ```javascript 184 | if (age < 98) { 185 | let a = 15; 186 | for (let i = 0, iMax = items.length; i < iMax; ++i) { 187 | // Тело цикла 188 | if(i < 15) { 189 | // Тело условной конструкции 190 | let b = 30; 191 | let c = a + b; 192 | console.log(c * 2); 193 | } 194 | } 195 | } 196 | ``` 197 | 198 | **Плохо** 199 | ```javascript 200 | if (age < 98) { 201 | for (let i = 0, iMax = items.length; i < iMax; ++i) { 202 | // Тело цикла 203 | let a = 15; 204 | if(i < 15) { 205 | // Тело условной конструкции 206 | let b = 30; 207 | let c = a + b; 208 | console.log(c * 2); 209 | } 210 | } 211 | } 212 | ``` 213 | 214 | **Плохо** 215 | ```javascript 216 | if (age < 98) { 217 | for (let i = 0, iMax = items.length; i < iMax; ++i) { 218 | // Тело цикла 219 | let a = 15; 220 | if(i < 15) { 221 | // Тело условной конструкции 222 | let b = 30; 223 | let c = a + b; 224 | console.log(c * 2); 225 | } 226 | } 227 | } 228 | ``` 229 | 230 | **Плохо** 231 | ```javascript 232 | // Присутствуют символы табуляции 233 | if (age < 98) { 234 | for (let i = 0, iMax = items.length; i < iMax; ++i) { 235 | console.log(i); 236 | } 237 | } 238 | 239 | // Присутствуют как символы табуляции, так и символы пробелов 240 | if (age < 98) { 241 | for (let i = 0, iMax = items.length; i < iMax; ++i) { // На этой строке отступ сделан табуляцией 242 | console.log(i); // На этой строке отступ сделан сначала пробелами, а затем табуляцией 243 | } // На этой строке отступ сделан пробелами 244 | } 245 | ``` 246 | 247 | ### 4.2 Вертикальные отступы 248 | Между логическими блоками — циклами, функциями и т. д. — следует оставлять пустую строку. Это делает код более читабельным. Избегайте блоков кода более 9 строк подряд. Не добавляйте пустую строку после каждого действия. 249 | 250 | **Хорошо** 251 | ```javascript 252 | let iMax = items.length; 253 | for (let i = 0; i < iMax, ++i) { 254 | // Тело цикла 255 | } 256 | 257 | function showName() { 258 | // Тело функции 259 | } 260 | ``` 261 | 262 | **Плохо** 263 | ```javascript 264 | let iMax = items.length; 265 | 266 | for (let i = 0; i < iMax, ++i) { 267 | // Тело цикла 268 | } 269 | function showName() { 270 | // Тело функции 271 | } 272 | ``` 273 | 274 | **Плохо** 275 | ```javascript 276 | let a = 15; 277 | 278 | let b = 30; 279 | 280 | let c = a + b; 281 | 282 | console.log(c * 2); 283 | ``` 284 | 285 | ## 5. Пробелы 286 | * Используйте пробелы между параметрами и не используйте между именем функции и скобкой. 287 | 288 | **Хорошо** 289 | ```javascript 290 | function edit(name, age) { 291 | // Тело функции 292 | } 293 | ``` 294 | 295 | **Плохо** 296 | ```javascript 297 | function edit (name,age) { 298 | // Тело функции 299 | } 300 | ``` 301 | 302 | * При создании анонимной функции (функции без имени) ставьте пробел перед скобкой. 303 | 304 | **Хорошо** 305 | ```javascript 306 | function (name, age) { 307 | // Тело функции 308 | } 309 | ``` 310 | 311 | **Плохо** 312 | ```javascript 313 | function(name,age) { 314 | // Тело функции 315 | } 316 | ``` 317 | 318 | * Используйте пробелы вокруг операторов. 319 | 320 | **Хорошо** 321 | ```javascript 322 | if (age < 100) { 323 | // Тело условной конструкции 324 | } 325 | ``` 326 | 327 | **Плохо** 328 | ```javascript 329 | if (age<100) { 330 | // Тело условной конструкции 331 | } 332 | ``` 333 | 334 | ## 6. Скобки 335 | * Открывающая фигурная скобка располагается на той же строке. 336 | * Перед скобкой ставится пробел. 337 | * Закрывающая скобка располагается на новой строке. 338 | * Всегда добавляйте фигурные скобки для циклов и условных конструкций, даже когда блок состоит из одного действия. 339 | 340 | **Хорошо** 341 | ```javascript 342 | function edit(name, age) { 343 | if (age < 100) { 344 | // Тело условной конструкции 345 | } 346 | } 347 | ``` 348 | 349 | **Плохо** 350 | ```javascript 351 | function edit(name, age) 352 | { 353 | if (age < 100) {/*Тело условной конструкции*/} 354 | } 355 | ``` 356 | 357 | **Плохо** 358 | ```javascript 359 | function edit(name, age) 360 | { 361 | if (age < 100) /*Тело условной конструкции*/ 362 | } 363 | ``` 364 | 365 | **Плохо** 366 | ```javascript 367 | function edit(name, age) 368 | { 369 | if (age < 100) 370 | /*Тело условной конструкции*/ 371 | } 372 | ``` 373 | 374 | ## 7. Кавычки 375 | В коде скрипта всегда используйте одинарные кавычки, если не требуется иного. Двойные кавычки допустимы, если в этой же строке используется апостроф (') или одинарные кавычки для других целей. 376 | 377 | **Хорошо** 378 | ```javascript 379 | let string = 'строка'; 380 | let phrase = "you're next"; 381 | ``` 382 | 383 | **Плохо** 384 | ```javascript 385 | let string = "строка"; 386 | ``` 387 | 388 | ## 8. Точка с запятой 389 | В конце выражения обязательна точка с запятой. 390 | 391 | **Хорошо** 392 | ```javascript 393 | alert('Привет'); 394 | alert('Мир'); 395 | ``` 396 | 397 | **Плохо** 398 | ```javascript 399 | alert('Привет') 400 | alert('Мир') 401 | ``` 402 | 403 | ## 9. Комментарии 404 | Для пояснения кода используются комментарии. Комментарии не исполняются интерпретатором JavaScript. 405 | 406 | * Однострочные комментарии начинаются с двойного слеша (`//`). За ним обязательно должен идти пробел. 407 | * Многострочные комментарии располагаются между `/*` и `*/`. За символом начала комментария обязательно должен идти пробел. Символ конца комментария располагается на новой строке. 408 | * Никогда не оставляйте закомментированный код. Комментарии должны использоваться для пояснения программы, а не для скрытия другой реализации действий. 409 | 410 | **Хорошо** 411 | ```javascript 412 | /* Пример комментария. 413 | Многострочного комментария 414 | */ 415 | 416 | // Пример однострочного комментария 417 | ``` 418 | 419 | **Плохо** 420 | ```javascript 421 | /*Пример комментария. 422 | Многострочного комментария*/ 423 | 424 | //Пример однострочного комментария 425 | ``` --------------------------------------------------------------------------------