На этой неделе я просматривал что-то старое и узнавал что-то новое, и я решил собрать их вместе в сообщении в блоге, чтобы они могли узнать друг друга, а вы могли познакомиться с ними.
Рекурсия
Рекурсия — мой новый друг на этой неделе, и мы все еще привыкаем друг к другу. Ладно, в основном я к ней привыкаю.
Рекурсия вызывает функцию, определение которой вы все еще находитесь в процессе. Ниже приведен пример, который принимает число n и строку текста и выводит их на консоль n раз.
function repeatLine (n, theLine) { console.log(theLine); if (n > 1) { repeatLine(n - 1, theLine); } }
Во-первых, строка записывается один раз перед выполнением условия if. Затем, если n больше единицы, функция, определенная до этой точки, вызывается с уменьшением n. Это означает, что theLine регистрируется через консоль. Этот вызов будет повторяться до тех пор, пока n не станет больше единицы. Если вы вызываете функцию с числом, введенным как 5, и строкой как «whosits и whatsits galore», вы должны увидеть следующее в своей консоли.
As in:
Напоминание о функции ввода
Если вы только начинаете работать с JavaScript, следует помнить, что порядок ввода имеет значение. Например, если бы вы вызвали функцию с обратным порядком ввода, например так:
repeatLine("whosits and whatsitsgalore", 5)
тогда номер 5 был бы зарегистрирован в консоли один раз. Если вы проверите тип данных в консоли, добавив console.log в функцию для типа данных, например
function repeatLine (n, theLine) { console.log(theLine); console.log(typeof theLine); if (n > 1) { repeatLine(n - 1, theLine); } }
вы увидите, что тип данных 5, который регистрируется, — «число». Тип входных данных не определяется функцией, поэтому она будет регистрировать строку независимо от ее типа и не будет принуждать ее к другому типу. Он не решит произвольно преобразовать число 5 в строку. Но он также не будет знать, что вы хотели, чтобы ввод, который является строкой, был распечатан.
Почему функция вообще что-то записывает? Перед оператором if создается console.log, поэтому строка, какой бы она ни была, будет напечатана хотя бы один раз. Поскольку значением n является строка, и вы не можете сравнить строку с числом, оператор if не запускается. Вот что я получаю при попытке сравнить строку с числом в консоли.
Если мы спросим, меньше ли переменная единицы, используя оператор «меньше чем», ответ будет «ложным». Если мы спросим, больше ли переменная единицы, то ответ тоже «ложь». Если вы используете операторы == и === для сравнения фразы с 1, она также будет ложной.
На мой взгляд, это пример того, как в коде, как и в жизни, не все сводится к числам.
Обзор конструкторов классов
Это старый друг, о котором я давно не думал, но который был рядом все это время.
При создании приложений с помощью React часть работы по написанию кода абстрагируется, и я понял, что сейчас самое время просмотреть Class and Inheritance, чтобы напомнить себе о том, что я считал само собой разумеющимся.
При использовании текущей версии React мне не нужно было использовать конструктор, поэтому это базовый обзор того, что делает конструктор. Ниже приведен пример класса Frog.
class Frog { constructor (name, from, into) { this.name = name; this.from = from; this.into = into; } }
Любой экземпляр класса Frog должен быть инициализирован именем и значением атрибутов «откуда» и «в». «Это», как оно появляется в конструкторе, относится к экземпляру лягушки, который создается или был создан.
Например, ниже показан новый экземпляр создаваемой лягушки:
«Новый» сигнализирует о том, что будет создан новый объект, являющийся экземпляром класса. После этого следует название класса, в данном случае «Лягушка». Затем нам нужно включить входные данные между круглыми скобками, чтобы указать значение для атрибутов name, from и into. Результат вышеописанного следующий, новая лягушка!
Это означает, что если я наберу
Kermit.from
в консоль в этот момент должно вернуться «лягушка».
Собираемся вместе
Поскольку иногда приятно иметь счастливый конец истории, давайте объединим вышеуказанные концепции.
В консоли, если вы вызовете RepeatLine (вторая версия, которая также дает нам тип данных того, что регистрируется) со следующим вводом
repeatLine(5, Kermit.from)
вы должны получить в качестве вывода
Что напоминает мне лягушку, прыгающую через скакалку.
Пожалуйста.