Проходя обучение, я заметил странную тенденцию: стоит только перейти к какому-то подходу решению задач, так предыдущий почему-то постепенно забывается. В моем случае я сейчас говорю про императивное и функциональное программирование.
Когда я только начинал обучение, для решения задач я использовал циклы. В какой-то момент я понял, что с таким подходом мне будет тяжело продвигаться дальше, поэтому я начал ломать голову над рекурсивным процессом – дело сдвинулось с мертвой точки, и я начал получать моральное удовлетворение от того, что понял новую тему. Но, внезапно, я обнаружил, что теперь решать задачи с помощью конструкций for
и while
почему-то стало сложнее.
Не уделив этому должного внимания, я решил «повысить» свой скилл и начал решать задачи с помощью итеративного процесса. И опять, спустя какое-то время, я вдруг понял, что теперь решать задачи с помощью рекурсивного процесса стало сложнее, потому что мой мозг как будто перестроился. Про циклы я вообще молчу – то, что казалось мне самым простым, вдруг стало самым сложным.
Я снова вернулся к рекурсивному процессу, и, как вы поняли, прежние подходы стали «размываться» :)
В итоге я осознал, что в этом нет ничего страшного – программист всегда может изменить свой стиль, если в этом есть необходимость. Но в качестве практики, чтобы лучше закреплять свои знания, я решил «изобретать велосипеды». Например, не так давно с помощью итеративного процесса реализовал свойство length
.
Вот так выглядит код:
const stringLength = (str) => {
const iter = (n) => {
if (str[n] === undefined) {
return n;
}
return iter(++n);
};
return iter(0);
};
Реализация простейших свойств и методов JavaScript хорошо закрепляет полученные знания – по крайней мере, я надеюсь, что это хоть чуть-чуть напоминает “настоящее” программирование в офисе.