Тази седмица едновременно преглеждах нещо старо и научавах нещо ново и реших да ги събера в публикация в блога, за да могат те да се опознаят и вие да ги опознаете.

Рекурсия

Рекурсията е новият приятел, който намирам тази седмица и все още свикваме един с друг. Добре, най-вече аз свиквам с нея.

Рекурсията е извикване на функция, която все още сте в процес на дефиниране. По-долу е даден пример, който приема число n и низ от текст и ги записва в конзолата n пъти.

function repeatLine (n, theLine) {
console.log(theLine);
if (n > 1) {
repeatLine(n - 1, theLine);
}
}

Първо, theLine се регистрира веднъж, преди да достигне условието if. Тогава, ако n е по-голямо от едно, функцията, както е дефинирана до тази точка, се извиква, като n се намалява. Това означава, че theLine се регистрира от конзолата. Това извикване ще се повтаря, докато n вече не е по-голямо от едно. Ако извикате функцията с въведеното число като 5 и низа като „whosits and 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-те, които са регистрирани, е „число“. Типът данни на входа не се определя от функцията, така че тя ще регистрира theLine независимо от неговия тип и няма да го принуди да бъде друг тип. Той няма да реши произволно да преобразува числото 5 в низ. Но също така няма да знае, че това, което сте искали, е входът, който е низ, да бъде този, който се отпечатва.

Защо функцията регистрира нещо изобщо? Преди оператора if се прави console.log, така че theLine, какъвто и да е той, ще се отпечата поне веднъж. Тъй като стойността на n е низ и не можете да сравните низ с число, операторът if не се задейства. Това е, което получавам, когато се опитвам да сравня низ с число в конзолата.

Ако попитаме дали променливата е по-малка от единица, използвайки оператора по-малко от, отговорът е „лъжа“. Ако попитаме дали променливата е по-голяма от единица, тогава отговорът също е „false“. Ако използвате операторите == и ===, за да сравните фразата с 1, тя също излиза невярна.

Според мен това е пример как в кода, както и в живота, не всичко се свежда до числа.

Преглед на конструкторите на класове

Това е старият приятел, за когото не съм мислил от известно време, но беше там през цялото време.

При създаването на приложения с React част от работата по писане на код е абстрахирана и разбрах, че е подходящ момент да прегледам Class и Inheritance, за да си припомня какво съм приемал за даденост.

Докато използвах текущата версия на React, не беше необходимо да използвам конструктор, така че това е основен преглед на това, което прави конструкторът. По-долу е даден пример за клас Frog.

class Frog {
constructor (name, from, into) {
this.name = name;
this.from = from;
this.into = into;
}
}

Всеки екземпляр на класа Frog ще трябва да бъде инициализиран с име и стойност за атрибутите „from“ и „into“. „Това“, както се появява в конструктора, се отнася до екземпляра на жаба, която се създава или е била създадена.

Например, по-долу е създаден нов екземпляр на жаба:

„Новото“ сигнализира, че предстои да бъде създаден нов обект, който е екземпляр на клас. След това идва името на класа, в този случай „Жаба“. След това трябва да включим вход между скоби, за да дадем стойност за името, от и в атрибутите. Резултатът от горното е следният, нова жаба!

Това означава, че ако пиша

Kermit.from

в конзолата в този момент, трябва да върне „жаба“.

Getting It Together

Тъй като понякога е хубаво да имате щастлив край на една история, нека обединим горните концепции.

В конзолата, ако извикате repeatLine (втората версия, която също ни дава типа данни за това, което се регистрира) със следния вход

repeatLine(5, Kermit.from)

трябва да получите като изход

Което ми напомня на жаба, която скача на въже.

Моля.