Hexlet 2-3 Flashcards

Модули 2 и 3

1
Q

Зачем нужны типы ?

A

В общем для защиты программы от трудноотловимых ошибок.

Типы определяют две вещи:
- возможные (допустимые) значения.
- набор операций, которые можно выполнять над этим типом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Неизменяемость примитивных типов.

A

Неизменяемость примитивных типов важна по многим причинам, ключевая - производительность.

Примитивные типы в JS поменять нельзя, а заменить значение переменной - без проблем.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Слабая типизация.

A

JS - это язык со слабой типизацией. Он знает о существовании разных типов, но относится к их использованию не очень строго, пытаясь, преобразовать информацию, когда это кажется разумным.

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

В строгой типизации такое не прокатит.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Детерминированная функция.

Преимущества детерминированной функции.

A

Функция называется детерминированной тогда, когда для одних и тех же входных параметров она возвращает один и тот же результат.

Детерминированные функции удобны в работе, их легко оптимизировать, легко тестировать.

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Побочный эффект.

A

Побочным эффектом называют действия, которые изменяют внешнее окружение (среду выполнения). К таким действия относятся любые сетевые взаимодействия, взаимодействия с файловой системой, вывод информации на экран или печать на принтере и так далее.

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

Такие функции сложно тестировать и делать надежными.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое стандартная библиотека ?

A

Набор функций. которые поставляются вместе с JS.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Сокращенная запись стрелочной функции.

A

Для это опускаются {} скобки и тогда не нужно писать return.

const sum = (a, b) => a + b;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Какая функция может называться предикатом ?

Варианты именования.

A

Функция может считаться предикатом только если она возвращает boolean.

isText;
hasText;
canText.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Какие значения при преобразовании будут false, а какие true.

A

0, ‘’, undefined, NaN, null - false;
Все остальное будет true.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Разница между постфиксной и префиксной нотации при использовании инкремента и декремента.

A

При использовании префиксной нотации сначала происходит изменение переменной, а потом возврат. При использовании постфиксной нотации - наоборот: можно считать, что сначала происходит возврат, а потом изменение переменной.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Почему конкатенация строк в цикле - это плохая идея ?

A

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

Поэтому такую операцию лучше всего делать через массив и приведение этого массива к строке.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что такое структура данных ?

Какие понятия стоит разделать, когда мы говорим про структуру данных ?

A

Структура данных - это конкретный способ хранения и организации данных.

Стоит разделять три понятия:
- Структура данных;
- Конкретный тип данных;
- Абстрактный тип данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Что такое объект ?

A

Объект - это тип данный в js, с помощью которого представляют связанный набор данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Печать на экран объекта, у которого есть другие объекты на глубине больше второго уровня.

A

В console.log() встроено одно ограничение. Если в объекте есть другие объекты глубже второго уровня, то при выводе на экран отобразиться вместо них [Object] или [Array].

Чтобы обойти это можно воспользоваться JSON.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Стандарты именования.

A

Функция - глагол;
Переменная - существительное;
Предикат - is, has, can.
Количество - сущность + count.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Самый простой способ клонирования объекта.

A

В JS нет встроенной функции для выполнения клонирования, но его можно эмулировать с помощью Object.assign(). Для этого достаточно первым параметром передать пустой объект, а вторым тот, который нужно клонировать.

16
Q

Самый простой способ клонирования объекта.

Альтернативный способ клонирования.

A

В JS нет встроенной функции для выполнения клонирования, но его можно эмулировать с помощью Object.assign(). Для этого достаточно первым параметром передать пустой объект, а вторым тот, который нужно клонировать.

Альтернативным способом клонирования является оператор spread.
Он выполняет простое поверхностное копирование.

const copyOfUser = { …user };

17
Q

Чистая функция.

A

Чистая функция - это детерминировання функция, которая не производит побочных эффектов.

18
Q

CQS

A

Command-qeury Separation - принцип программирования, изобретенный Бертраном Мейером, создателем языка Eiffel. Соглано этому принципу, каждая фукнция является либо командой, которая выполняет действие (action), либо запросом (query), который извлекает данные.

Команда всегда связана с выполнение побочных эффектов, а чистые функции возможны только для запросов.

19
Q

Что проиходит с аргументами при вызове функции.

A

Значение аргумента присваивается параметру функции.

Это неявное присвоение.

20
Q

Объект первого рода (или класса).

A

Объекты первого рода - это элементы, которые могут быть переданы в функции, возвращены из функций и присвоены переменным (или константам).

К таким элементам относятся любые данные, в том числе функции.

21
Q

Функции высшего порядка.

A

Функции высшего порядка - это функции, которые либо принимают, либо возвращают другие функции, либо делают все сразу.

22
Q

Разница итеративного и рекурсивного процессов.

A

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

Итеративный процесс намного эффективнее, но он более усложненный.

23
Q

За какие тесты отвечают программисты.
Как принято делить эти тесты по степени изолированности.

A

Программисты, в первую очередь, отвечают за функциональные тесты. Эти тесты проверяют, что код выполняет свою прямую задачу с точки зрения пользователей программы.

По степени изолированности тестируемых частей кода функциональные тесты принято делить на:
* Модульные;
* Интеграционные;
* Системные.

24
Q

Что проверяют тесты ?
Как и где хранят тесты ?

A

Тесты проверяют, что код (или приложение) работает корректно. И не заботятся о том, как конкретно написан код, который они проверяют.

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

25
Q

Утверждения в тестах.

A

Каждую проверку, которую пишет программист, в тестировании принято называть утверждением (assert).
Утверждения - это ключевая чать тестов, которые проверяют функциональность тестов.

В самом простом случае, утврежденя проверяются через цикл и генерацию исключения.
Но есть библиотека assert встроенная в Node.js, которая помогает писать более простые тесты. Вся дальнейшая информация по работе с библиотекой в официальной документации.

Так же есть библиотека power-assert, которая обладает подробным выводом об ошибках. Работа с ней полностью совпадает со встроенной библиотекой.
Но для интеграция потребтуются дополнительные инструменты описанные в документации.

26
Q

Известный фреймворк тестирования в JS.

A

Самый популярный фреймворк тестирования в JS - это Jest.
Он отлично структурирует и оптимизирует тесты.
Так же в его состав идут матчеры, под разные проверки.
С разновидностью матчеров можно ознакомиться в официальной документации библиотки.
Так же немаловажно понимать работу с хуками.