Як перевірити, що два об'єкти рівні?
Порівняння об’єктів у JS є складним, бо звичайні оператори рівності не порівнюють значення об’єктів. Вони перевіряють, чи змінні містять посилання на один і той самий об’єкт у пам’яті. Тому, обговорюючи порівняння об'єктів у JavaScript, потрібно враховувати два типи рівностей:
Referential equality: Визначає, чи два надані операнди відносяться до одного і того ж посилання.
Deep equality: Визначає, чи є об'єкти рівними, порівнюючи кожну властивість операндів.
Зазвичай на прикладному рівні нам треба саме deep equality. Його можна зробити:
1. Ручне порівняння, тобто порівняння через кожного ключа об’єктів. Дуже погано
2. Через JSON.stringify().Не надійно, оскільки вимагає однакового порядку атрибутів об’єктів.
3. Lodash.isEqual. добре, за умови, що він є у вас у проекті. Інакше тягнути lodash не варто.
4. Спеціальний пакет deep-equal. Добре, якщо у вас крос-платформне додаток (наприклад, Next.js).
5. assert.deepStrictEqual добре для node.js коду. Приклад на зображенні.
Порівняння об’єктів у JS є складним, бо звичайні оператори рівності не порівнюють значення об’єктів. Вони перевіряють, чи змінні містять посилання на один і той самий об’єкт у пам’яті. Тому, обговорюючи порівняння об'єктів у JavaScript, потрібно враховувати два типи рівностей:
Referential equality: Визначає, чи два надані операнди відносяться до одного і того ж посилання.
Deep equality: Визначає, чи є об'єкти рівними, порівнюючи кожну властивість операндів.
Зазвичай на прикладному рівні нам треба саме deep equality. Його можна зробити:
1. Ручне порівняння, тобто порівняння через кожного ключа об’єктів. Дуже погано
2. Через JSON.stringify().Не надійно, оскільки вимагає однакового порядку атрибутів об’єктів.
3. Lodash.isEqual. добре, за умови, що він є у вас у проекті. Інакше тягнути lodash не варто.
4. Спеціальний пакет deep-equal. Добре, якщо у вас крос-платформне додаток (наприклад, Next.js).
5. assert.deepStrictEqual добре для node.js коду. Приклад на зображенні.
👍68🥱5
Сьогодні у нас нова гра #like_and_share. Мета гри - поділитися своїм досвідом та дізнатися про досвід інших учасників. Правила:
1. Публікація в каналі визначає тему. Сьогодні це npm-пакети.
2. У коментарях кожен може залишити посилання на пакет, який він використовує, і коротко описати, чому цей пакет є корисним.
3. Учасники голосують за пакети, використовуючи лайки. Не ставте негативні лайки, вони також зараховуються як позитивні.
4. У понеділок ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яке IDE від JetBrains.
1. Публікація в каналі визначає тему. Сьогодні це npm-пакети.
2. У коментарях кожен може залишити посилання на пакет, який він використовує, і коротко описати, чому цей пакет є корисним.
3. Учасники голосують за пакети, використовуючи лайки. Не ставте негативні лайки, вони також зараховуються як позитивні.
4. У понеділок ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яке IDE від JetBrains.
👍16
Поясню код. За два роки сервіс з обробки stripe webhooks розрісся, тому довелося створити свій #nestjs execution context.
А ще він ілюструє:
А ще він ілюструє:
Routing is a switch-case construct, expressed in a different syntax.👍23❤7
Чому числа іноді поводяться неінтуїтивно?
#tc39
Числа та арифметика JavaScript визначені в IEEE-754. Перегляньте 0.30000000000000004.com
Питання та відповідь є перекладом з репозиторію tc39/faq. А ціль посту познайомити з цим репозиторієм.
#tc39
Числа та арифметика JavaScript визначені в IEEE-754. Перегляньте 0.30000000000000004.com
Питання та відповідь є перекладом з репозиторію tc39/faq. А ціль посту познайомити з цим репозиторієм.
👍20
TypeScript Origins: The Documentary
#worth_seeing
Anders Hejlsberg, Steve Lucco, Luke Hoban, Daniel Rosenwasser, Ryan Cavanaugh, Amanda Silver, Matt Pocock, Josh Goldberg... Саме це люди зробили TypeScript. Перегляньте відео, щоб знати їх в обличчя.
#worth_seeing
Anders Hejlsberg, Steve Lucco, Luke Hoban, Daniel Rosenwasser, Ryan Cavanaugh, Amanda Silver, Matt Pocock, Josh Goldberg... Саме це люди зробили TypeScript. Перегляньте відео, щоб знати їх в обличчя.
👍19🔥2
Варто винести події на каналі окремим дописом:
👀 Кожного понеділка о 19:00 Node.js Weekly у форматі YouTube Stream. Посилання на сьогоднішній стрім.
👍 Експериментую з форматами. Минулого тижня з'явився новий формат #like_and_share, деталі тут: t.me/node_recipes/693.
👀 Кожного понеділка о 19:00 Node.js Weekly у форматі YouTube Stream. Посилання на сьогоднішній стрім.
👍 Експериментую з форматами. Минулого тижня з'явився новий формат #like_and_share, деталі тут: t.me/node_recipes/693.
👍25
Як зберігати enum у базах даних?
У цьому рецепті ми не будемо зупинятися на перевагах та недоліках використання enum на рівні коду. Натомість, ми розглянемо, як можна представити enum у базі даних. Під enum ми розуміємо набір рядкових значень, які може приймати певне поле. Розглянемо конкретний приклад для таблиці "users":
Важливо відзначити, що список можливих значень визначається доменною моделлю, і, отже, буде змінюватися з розвитком проекту.
Можливі підходи:
1. Зберігати значення як varchar без перевірки на рівні бази даних, чи належить значення до enum.
2. Нормалізація даних. Для кожного enum створюється окрема таблиця у форматі id, value, яка використовується для зв'язку через foreign key. У основній таблиці зберігається не саме значення, а id з відповідної таблиці.
3. Enum на рівні бази даних. Більшість баз даних підтримують enum.
4. Довідник. Цей метод є проміжним варіантом між нормалізацією та використанням enum у базі даних. Таблиця-довідник об'єднує поля id та value в одне.
При виборі підходу, який підходить для конкретної ситуації, я звертаю увагу на:
1. розмір, необхідний для зберігання даних. Нормалізація та enum у базі даних зменшують обсяг.
2. простоту отримання даних. При нормалізації потрібні join-операції
3. легкість зміни enum. Простіше з довідником та при нормалізації, а enum-in-DB потребує міграцію.
4. необхідність перевірки на рівні бази даних. Можливо, перевірка не потрібна.
5. Забезпечення консистентності підходу в рамках проекту.
6. При нормалізації - який метод генерації id буде використовуватися: uuid, sequence, nanoid.
7. На останньому місці, але не менш важливе - яка база даних використовується?
У цьому рецепті ми не будемо зупинятися на перевагах та недоліках використання enum на рівні коду. Натомість, ми розглянемо, як можна представити enum у базі даних. Під enum ми розуміємо набір рядкових значень, які може приймати певне поле. Розглянемо конкретний приклад для таблиці "users":
gender: MALE, FEMALE, UNKNOWN, NON_BINARYstatus: ACTIVE, BANNED, SELF_DELETEDВажливо відзначити, що список можливих значень визначається доменною моделлю, і, отже, буде змінюватися з розвитком проекту.
Можливі підходи:
1. Зберігати значення як varchar без перевірки на рівні бази даних, чи належить значення до enum.
2. Нормалізація даних. Для кожного enum створюється окрема таблиця у форматі id, value, яка використовується для зв'язку через foreign key. У основній таблиці зберігається не саме значення, а id з відповідної таблиці.
3. Enum на рівні бази даних. Більшість баз даних підтримують enum.
4. Довідник. Цей метод є проміжним варіантом між нормалізацією та використанням enum у базі даних. Таблиця-довідник об'єднує поля id та value в одне.
При виборі підходу, який підходить для конкретної ситуації, я звертаю увагу на:
1. розмір, необхідний для зберігання даних. Нормалізація та enum у базі даних зменшують обсяг.
2. простоту отримання даних. При нормалізації потрібні join-операції
3. легкість зміни enum. Простіше з довідником та при нормалізації, а enum-in-DB потребує міграцію.
4. необхідність перевірки на рівні бази даних. Можливо, перевірка не потрібна.
5. Забезпечення консистентності підходу в рамках проекту.
6. При нормалізації - який метод генерації id буде використовуватися: uuid, sequence, nanoid.
7. На останньому місці, але не менш важливе - яка база даних використовується?
👍30
#code_only
Такий код я написав вчора для створення PDF. Це скрипт для багаторазового використання фронтенд-розробником для верстки темплейту. Коли FE закінчить верстку, я загорну код у лямду, яку буду викликати з коду Node.js.
Такий код я написав вчора для створення PDF. Це скрипт для багаторазового використання фронтенд-розробником для верстки темплейту. Коли FE закінчить верстку, я загорну код у лямду, яку буду викликати з коду Node.js.
🔥33👍5👏1
Чому використовувати
Використання
У NodeJS розробки це мовна конструкція майже завжди буде у файлі, який стартує додаток/скрипт.
void з промісом у JavaScript?Використання
void з промісом у JavaScript сигналізує, що відсутність await або .then() є навмисною, забезпечуючи читабельність коду та запобігаючи попередженням про необроблені проміси. Код буде виконуватися однаково як з void так і безнього.У NodeJS розробки це мовна конструкція майже завжди буде у файлі, який стартує додаток/скрипт.
👍31👎2🤔2
Я неодноразово згадував exercism.org для навчання програмуванню. Я вважаю цю платформу більш практичною, ніж LeetCode, оскільки вона пропонує курси з різних мов програмування.
Минулорічна програма "12in23" дозволяла щомісяця вивчати нову мову, а цьогорічна "48in24" викликає учасників вирішити 48 завдань за допомогою різних підходів та мов. Це чудова можливість стати гнучким інженером, а не просто розробником однієї мови.
Минулорічна програма "12in23" дозволяла щомісяця вивчати нову мову, а цьогорічна "48in24" викликає учасників вирішити 48 завдань за допомогою різних підходів та мов. Це чудова можливість стати гнучким інженером, а не просто розробником однієї мови.
❤31🔥7👍5
У дописі з хештегом #worth_seeing я ділюся відео, яке я подивився і хотів би вам порекомендувати. Сьогодні це не технічне відео, але потрібне майже будь-якому розробнику України:
Декларація ФОП 3 група 5% за 2023 рік
Навіть якщо бухгалтерію за вас веде бухгалтер, варто розуміти, як його перевірити. Адже це складова фінансової грамотності, яка безпосередньо впливає на вашу кар'єру.
Декларація ФОП 3 група 5% за 2023 рік
Навіть якщо бухгалтерію за вас веде бухгалтер, варто розуміти, як його перевірити. Адже це складова фінансової грамотності, яка безпосередньо впливає на вашу кар'єру.
❤23👍11
Агенда на сьогоднішній прямий ефір:
- JS ecosystem in 2023
- що таке Stripe-level SDK
- AWS Community Builders
Початок о 19 по Києву. До зустрічі в ефірі!
- JS ecosystem in 2023
- що таке Stripe-level SDK
- AWS Community Builders
Початок о 19 по Києву. До зустрічі в ефірі!
YouTube
Node.js Weekly 2024-W3: JS ecosystem in 2023, Stripe-level SDK, AWS Community Builders
👍25🔥6❤3
AWS відкрив прийом заявок на наступну когорту Community Builders.
Я сам є учасником цієї програми. Ось, що надає участь в цій програмі:
👉 доступ до Slack разом з іншими AWS Community Builders, AWS Hero та співробітниками AWS;
👉 доступ до закритих вебінарів та альфа-версій продуктів;
👉 500 доларів AWS кредитів, з можливістю запитати ще від керівника мого напрямку;
👉 ваучер на одну сертифікацію щорічно;
👉 річна підписка на Cloud Academy;
👉 swag kit (мерч)
У свою чергу, AWS очікує від мене публікацію контенту про AWS на основі мого особистого досвіду. Це, власне кажучи, те, що я робив в рамках цього телеграм-каналу до того, як потрапив до цієї програми.
Зверніть увагу, що не має значення мати 10+ років досвіду. Контент від Junior спеціаліста для Junior спеціалістів також потрібен. Тому, якщо ви створюєте контент, а тим більше українською, подайте заявку.
Я сам є учасником цієї програми. Ось, що надає участь в цій програмі:
👉 доступ до Slack разом з іншими AWS Community Builders, AWS Hero та співробітниками AWS;
👉 доступ до закритих вебінарів та альфа-версій продуктів;
👉 500 доларів AWS кредитів, з можливістю запитати ще від керівника мого напрямку;
👉 ваучер на одну сертифікацію щорічно;
👉 річна підписка на Cloud Academy;
👉 swag kit (мерч)
У свою чергу, AWS очікує від мене публікацію контенту про AWS на основі мого особистого досвіду. Це, власне кажучи, те, що я робив в рамках цього телеграм-каналу до того, як потрапив до цієї програми.
Зверніть увагу, що не має значення мати 10+ років досвіду. Контент від Junior спеціаліста для Junior спеціалістів також потрібен. Тому, якщо ви створюєте контент, а тим більше українською, подайте заявку.
❤14👍2🔥2
Для налагодження веб-хуків я використовую ngrok. У нього є конкурент, про який варто знати:
🔗 webhook.cool безкоштовна веб версія
🔗 localcan.com платна дестопна версія
webhook.cool чудово підходить як перший крок в інтеграціях з іншою командою розробки. Так я можу почати інтеграцію до того, як піднято частину, яка відповідає за прийняття запитів. А включений guest access дозволяє спільно бачити запити, що входять.
🔗 webhook.cool безкоштовна веб версія
🔗 localcan.com платна дестопна версія
webhook.cool чудово підходить як перший крок в інтеграціях з іншою командою розробки. Так я можу почати інтеграцію до того, як піднято частину, яка відповідає за прийняття запитів. А включений guest access дозволяє спільно бачити запити, що входять.
👍34🔥5🍓1
Сьогодні у нас нова гра #like_and_share. Мета гри - поділитися своїм досвідом та дізнатися про досвід інших учасників. Правила:
1. Публікація в каналі визначає тему. Сьогодні це Chrome Extensions.
2. У коментарях кожен може залишити посилання на extension, який він використовує, і коротко описати, чому цей extension є корисним.
3. Учасники голосують за extension, використовуючи лайки. Не ставте негативні лайки, вони також зараховуються як позитивні.
4. У понеділок ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яке IDE від JetBrains.
1. Публікація в каналі визначає тему. Сьогодні це Chrome Extensions.
2. У коментарях кожен може залишити посилання на extension, який він використовує, і коротко описати, чому цей extension є корисним.
3. Учасники голосують за extension, використовуючи лайки. Не ставте негативні лайки, вони також зараховуються як позитивні.
4. У понеділок ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яке IDE від JetBrains.
❤15🔥6
на сайті exploringjs.com можна безкоштовно прочитати:
📕 JavaScript for impatient programmers (ES2022 edition)
📗 Deep JavaScript
📘 Tackling TypeScript
📙 Shell scripting with Node.js
📕 JavaScript for impatient programmers (ES2022 edition)
📗 Deep JavaScript
📘 Tackling TypeScript
📙 Shell scripting with Node.js
👍48🔥5❤2👀2
Using docker in unusual ways
#worth_seeing
Відмінне відео, яке можна назвати "Docker-based development in 2024". Рекомендую не тільки подивитися, але й спробувати підходи запропоновані у відео.
#worth_seeing
Відмінне відео, яке можна назвати "Docker-based development in 2024". Рекомендую не тільки подивитися, але й спробувати підходи запропоновані у відео.
👍34❤4
Агенда на сьогоднішній прямий ефір:
- Chrome Extensions
- emails in Node.js
- Q&A
Початок о 19 по Києву. До зустрічі в ефірі!
- Chrome Extensions
- emails in Node.js
- Q&A
Початок о 19 по Києву. До зустрічі в ефірі!
YouTube
Node.js Weekly 2024-W4: chrome extensions and emails in Node.js
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
👍28❤1🔥1
Тема сьогоднішнього прямого ефіру: What I learned last year?
Я розповім, що змінилося в моїх підходах у розробці за минулий рік на рівні коду, залежностей та frameworks.
Початок о 19 по Києву. До зустрічі в ефірі!
Я розповім, що змінилося в моїх підходах у розробці за минулий рік на рівні коду, залежностей та frameworks.
Початок о 19 по Києву. До зустрічі в ефірі!
❤20👍11