Wise.js | Frontend tips
1.89K subscribers
72 photos
4 videos
66 links
Авторський канал БЕЗ РЕКЛАМИ з Frontend розробки: статті, завдання з співбесід, поради та трюки.

Youtube-канал: https://www.youtube.com/channel/UCOxqQhtg574p8kE4Te41PGg/featuredB

Пиши свої ідеї для постів сюди: @front_idea_bot
Download Telegram
☑️ АРГУМЕНТЫ ФЛАГИ

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

Рассмотрим пример кода (очень близко к тому, который я встретил в реальном проекте), который делает запрос за данными, получает список пользователей, и выводит их на страницу:

const users = await userService.fetch();

userComponent.render(users);

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

const UserFacade = {
update: async () => {
const users = await userService.fetch();

userComponent.render(users);
}
}


Все хорошо, но клиент требует показывать лоадер при обновлении пользователей (т. е. при вызове данной функции). Но лоадер нужно показывать не всегда, а только при вызове из определенных мест в коде. Простым решением может показаться добавление флага (или даже нескольких):

const UserFacade = {
update: async (showLoader = false) => {
if (showLoader) { // показываем лоадер если нужно
userComponent.renderLoader(true);
}

const users = await userService.fetch();

userComponent.render(users);
userComponent.renderLoader(false); // скрываем лоадер в любом случае
}
}


UserFacade.update и userComponent.renderLoader теперь принимают флаги true и false.
В зависимости от переданного аргумента выполняется конкретная логика: либо мы отображаем список пользователей без лоадера либо с ним.
Получившийся код оказывается очень сложным для чтения, для понимания и нарушает множество принципов проектирования. Чтобы понять, что делают эти методы нам нужно заглядывать в названия параметров функции. Потому что вызов UserFacade.update(true) и UserFacade.update(false) не дают абсолютно никакого понимания о том, что происходит внутри.

Мне встречались подобные методы принимающие 4(!) аргумента, 3 из которых были флагами. Выглядело это примерно так:

SomeFacace.updateSomeData(uuid, true, false, true)

Мало того, что аргументов слишком много, так еще и совершенно не понятно что они делают.
Этот метод использовался во многих местах, а время на рефакторинг не было, я переписал его так, чтобы он принимал объект.

SomeFacace.updateSomeData(uuid, {
showLoader: true,
updateCases: false,
scrollToCase: true
});


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

Улучшить код в примере с UserFacade можно следующим образом. Переписать UserFacade и userComponent так, чтобы они не принимали флаги.

const UserFacade = {
updateWithLoader async () => {
userComponent.showLoader();
await this.update();
userComponent.hideLoader();
},
update: async () => {
const users = await userService.fetch();

userComponent.render(users);
}
}


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

И в подтверждение моих слов цитата из книги Роберта Мартина «Чистый код»:
«Аргументы-флаги уродливы. Передача логического значения функции — воистину ужасная привычка. Она немедленно усложняет сигнатуру метода, громко провозглашая, что функция выполняет более одной операции…»
☑️ Тесты на знание JavaScript

Встречали такие тесты, в которых приведены примеры кода и нужно сказать что он вернет после исполнения?
Их часто задают на собеседованиях или даже до, чтобы отсеять кандидатов.
Так же, стало модно создавать такие в разных компаниях для привлечения внимания разработчиков (и сбора контактов конечно же).
На очередной такой я наткнулся на dou_ua.
Возможно, некоторые из вас видели Luxoft JavaScript quiz (была реклама на главной) или даже проходили его.
Вопросы были подобраны из разных областей JS и как по мне, тест получился интересным.

Я сделал разбор некоторых технических вопросов c объяснениями.

Welcome: https://telegra.ph/Ocherednoj-JavaScript-test-12-25
Вернулся после долгого перерыва и продолжаю делать контент с новым графиком.
Ждите статьи по понедельникам и четвергам 🗓
Идей для постов собралось много!

Stay tuned 📡

Про особенности JavaScript ходят легенды. Сегодня постараемся прояснить одну из них.
☑️ МЕТОДЫ ПРИМИТИВОВ И БОКСИНГ В JAVASCRIPT

Все типы данных в JavaScript делятся на примитивы и объекты. Примитивы не могут иметь собственных свойств и методов, объекты могут. Почему свойства работают на примитивах и что такое боксинг.
☑️ ЧТО ТАКОЕ ECMASCRIPT И ЧЕМ ЭТО ОТЛИЧАЕТСЯ ОТ JAVASCRIPT

Язык JavaScript изначально так назвали в надежде извлечь выгоду из успеха Java.
Позднее JavaScript прошел стандартизацию в ECMA International.
Это привело к появлению нового языкового стандарта, известного как ECMAScript.

Проясняем разницу между ES и JS здесь.
☑️ ДЕКЛАРАТИВНОЕ И ИМПЕРАТИВНОЕ ПРОГРАММИРОВАНИЕ

На волне популярности React и прочих библиотек/фреймворков люди забывают о читаемости и думают только о красоте кода. Почему стоит смотреть на этот вопрос по другому - тут.
Привет, спасибо, что читаете!

Появилась идея коротких постов. С упором на визуальный контент и не занимающий много времени на прочтение и осмысление. В телеграмм мне нравится делать большие посты с детальным разбором и описанием или переводить интересные статьи. Есть же вещи, про которые хочется рассказать, но для отдельного поста информации маловато, а собрать что-то схожее не совсем получается.
Для этих целей теперь есть инстаграмм WiseJS.

Многие из вас меня знают только по постам здесь. Исправим это постом знакомства.

PS: Небольшой quiz в стори!
☑️ 10 способов скрыть элементы в CSS

Иногда появляется необходимость скрыть некоторые элементы с сайта (блоки, картинки, DIV и так далее), либо просто скрыть текст при помощи CSS. Для этого существует несколько различных способов, которые отличаются по эффекту. Далее вы можете узнать о них.
🎉 КАНАЛУ 1 ГОД 🎉

Спасибо что читаете!

В связи с этим, и пролонгацией карантина я решил сделать бесплатный онлайн курс по front-end разработке.

Заинтересовало?

Детали в соответствующем канале: https://t.me/free_front_end