Господа, пожалуйста не воспринимайте всерьёз то что написано в этом треде. Нормальная инфа про чистые функции скоро подъедет, сегодня очень загруженный день на работе, но вы держитесь 💪
Если кому есть что сказать - велком в реплаи
Итак, чистые функции. Чистой называется такая функция, которая:
1. Всегда возвращает один и тот же результат при одних и тех же аргументах;
2. Не оказывает никакого влияния на внешний мир - никакого IO, работы с глобальными переменными, бд итд
Выполнив оба этих требования вы получаете чистую функцию. Нарушив хотя бы одно из них, функция теряет некоторые/все свойства, которые делают ее удобной в использовании.
Что за свойства?
1. Облегчённая тестируемость.
Так как они не меняют внешний мир и не зависят от окружения, их очень легко тестировать. Просто передайте нужные аргументы и проверяйте что вернулось. Вам не нужны моки, не нужно эмулировать окружение
2. Referential transparency.
Это значит что вы можете заменить вызов этой функции значением которое она возвращает. Например, ваш компилятор может произвести оптимизацию и посчитать функцию во время компиляции, удалить её и на ее место просто поставить результат
3. Результат работы чистой функции можно мемоизировать.
Это значит, что вы можете запомнить результат функции для определенных аргументов и когда она вызовется с этими же аргументами, вы можете не считать всё заново, а достать сохранённый результат из словаря
4. Чистые функции легче рефакторить.
Поскольку ваша функция не зависит от и не меняет внешний мир, вы можете переписывать внутренности как угодно и когда угодно не боясь что что-то сломается. Ничего не сломается если вы не поменяете ее сигнатуру)
5. Чистая функция проще для понимания человеком.
В программировании самая простая полезная единица это функция. Проще функции только чистая функция. При ее чтении вы не переключаете контекст, не держите в голове глобальные переменные, следовательно вам легче с ней работать.
Исходя из вышеописанных свойств становится ясно, что с чистыми функциями работать проще, они меньше подвержены багам и проще поддаются тестированию.
Но если чистые функции не могут ничего делать во внешнем мире, то как их вообще использовать???
Ответ в том, что чистые функции идут в паре с грязными функциями и вместе они создают нашу программу.
Грязные функции находятся по краям системы и пишут в базу, отправляют письма, рисуют на экране пользователя, ходят в сеть.
Чистые же функции генерят правильные запросы для базы, генерят письма и пользовательский интерфейс, запросы в сеть.
Они производят вычисления, а грязные функции берут результаты этих вычислений и отправляют их во внешний мир.
При таком раскладе вы точно можете быть уверены, что какой-нибудь Postgres или email api никак не влияют на логику вашего приложения.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with jsunderhood

jsunderhood Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @jsunderhood

5 Feb
Всем доброй пятницы!
Вчера вечером мы поговорили про деньги и где их можно заработать, подробности вот в треде 👇
Ну и самая главная мысль: легких денег не бывает. Нет ни одной волшебной схемы, которая сделает тебя богатым. Путь к бабкам всегда труд
Труд не такой, что сутками пахать на износ на заводе — так много не заработаешь. Труд состоит в том, что ты должен потратить ГОДЫ, чтобы создать капитал. И эти годы ты должен быть сконцентрирован, не бросать то что начал, не верить в «схемы».
То же самое применимо к зарплате в IT. Хочешь 500к? Будь готов потратить несколько лет на получение опыта и экспертизы. Тебе придётся интересоваться всем что происходит. Можешь сидеть с 9до5, а после забывать про разработку, но тогда 500к не жди.
Read 4 tweets
4 Feb
Фуф, ну и денёк сегодня выдался.
Как и обещал, давайте поговорим немного про бабки 💸
Все их любят, всем они нужны для того, чтобы влачить своё существование. Но где их взять, как сохранить и преумножить?
Пока я пишу тред кидайте свои варианты
Первое и самое очевидное — зарплата.
Вы меняете своё время и навыки на деньги. Все это делают, большинство только этим и живёт. У зарплаты есть такие свойства: она ограничена кол-вом часов в сутках, вашими умениями и часто геопозицией.
Мы можем работать N часов в сутки и получать M шекелей за час. M зависит от того сколько стоят ваши навыки на рынке в вашей местности. Также зарплата может резко сократиться до 0 если вы заболеете, получите неисправимую травму или больше будете не нужны на рынке.
Read 19 tweets
4 Feb
Всем доброе утро ☕️
Чем ближе к пятнице, тем расслабленнее разговоры)
Сегодня побуду бабкой-предсказательницей и буду предсказывать куда будет двигаться разработка в ближайшем будущем 🔮
А также хочу поговорить про денежки: зарплаты, сайд-проекты и инвестиции
🔮 Предсказание первое 🔮
Разработка будет становится проще и проще, особенно для непрограммистов. No-code тулзы станут настолько мощными, что можно будет создать ПОЧТИ любой софт без написания кода.

Компиляторы тоже станут умнее. Любой говнокод будут превращать в нормальный
🔮Предсказание второе🔮
Первое предсказание приведёт к тому, что инструменты и компьютеры станут настолько сложными, что мало кто будет понимать как они работают. Единицы сохранять знание, а может и вообще никто. Тогда сложная техника станет техно-культом/религией
Read 7 tweets
3 Feb
Отличный вопрос!
И у меня есть ответ: постоянно получаю вакансии в зарубежные компании, устроился в американскую компанию через один интересный сайт и не я один :)
Вот небольшой список ресурсов где можно найти вакансию за рубежом 🧵
Первое что вам нужно сделать - заполнить профиль на LinkedIn. В большинстве случаев вы начнёте получать предложения о работе при наличии релевантного опыта. Часто эти предложения включают в себя работу на зарубежную компанию или релокацию 🧵
За рубежом (я знаю про США, возможно в Европе тоже) есть следующий тренд: очень много выпускников из универов которые могут пойти стажёрами и очень много сеньоров, которые хотят быть СТО и не хотят кодить 🧵
Read 6 tweets
21 Jan
Что взять для UI/E2e-тестов?
⬇️
1. Используя Selenium-библиотеки вы получаете кучу очень хрупких абстракций. Возьмем, например, yandex.ru/dev/hermione/:
Hermione => WebdriverIO => Selenium => Java-интерфейс => драйвер под конкретный браузер.

На каждом из уровней вас ждут проблемы, прям как в фильме "Начало".
2. Поэтому лучше взять решения, которые базируются на родных API браузеров, например github.com/puppeteer/pupp… или github.com/microsoft/play…
Read 7 tweets
21 Jan
С бэкендом определились. Идем дальше по пирамиде тестирования.
⬇️
1. В основе пирамиды на мой взгляд должны стоять не Unit-тесты, а строгая типизация и строгие линтеры. Помимо стандартных ESlint-плагинов, типа react, react-hooks, jsx-a11y, node, promise, import и т.д., обратите внимание на:
github.com/SonarSource/es… и github.com/sindresorhus/e…
2. Готовые конфиги (типа eslint-config-airbnb) мне не нравятся тем, что они смешивают стилистические и логические правила. Для стилистических обычно хватает prettier.io, а логические придется вручную собирать среди кучи плагинов, о которых я говорил выше.
Read 7 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!