Программируем без мутабельных переменных

  Рет қаралды 6,863

WolfCode

WolfCode

2 жыл бұрын

Продолжая тему ссылочной прозрачности, в этом выпуске я наглядно показываю как преобразовать код с переменными в код без переменных

Пікірлер: 40
@rad9587
@rad9587 Жыл бұрын
Всегда нравилась лаконичность такого подхода:) Очень красиво. Вот только надо еще знать кучу таких крутых функций/классов
@wolf_code
@wolf_code Жыл бұрын
Их заучивать не надо - сами по себе быстро запоминаются
@ssatskov
@ssatskov 2 жыл бұрын
Супер! Ультра интересная тема Не передать всех эмоций, когда узнаю о таких подобных макро моментах, позволяющих взглянуть на программирование немного под другим углом, меняющих твое, годами устоявшееся, восприятие Очень здорово, ставлю пять классов!
@andrsn959
@andrsn959 2 жыл бұрын
Ух, как свежо! Это, прям другой уровень рациональности.
@nothrow_6298
@nothrow_6298 2 жыл бұрын
очень интересная тема, да и язык тоже; а в методе IsPrime, думаю "ифы" лучше так записать: if (number % 2 == 0) number == 2 else ...
@wolf_code
@wolf_code 2 жыл бұрын
Прикольное сокращение)) Спасибо за лайфхак)
@TheMarkBrut
@TheMarkBrut 2 жыл бұрын
👍🏻
@neordinator
@neordinator 2 жыл бұрын
Не имеет разницы ссылочно прозрачный или с “переменными”. Важно, выделяется ли память. Под капотом все ваши функциональные функции тоже выделяют память, хранят данные и возвращают значения. Поэтому не имеет смысла упарываться в этом подходе, но иной раз можно встретить ситуацию, в которой такой подход был бы оправдан.
@wolf_code
@wolf_code 2 жыл бұрын
Понятно что это все не на магии работает. Важны свойства которые приобретает такой код, советую глянуть в сообщество канала
@alexneo5458
@alexneo5458 2 жыл бұрын
Интересно конечно. Хотелось бы попробовать научиться писать код в таком стиле, но scala по идее сочетает в себе и обычное, и функциональное программирование. Как я понимаю, чтобы попробовать функциональное, надо брать чисто ФП язык, чтобы не было возможности по старинке писать код? Тут наверно надо выбирать хаскель или ещё есть варианты?
@wolf_code
@wolf_code 2 жыл бұрын
вообще на хаскеле тоже можно фигачить в императивном стиле использовав do )
@yuriynevazhno2542
@yuriynevazhno2542 2 жыл бұрын
@@wolf_code lisp!
@VYACHESLAVx
@VYACHESLAVx 2 жыл бұрын
А можно так же на го? Хотя думаю можно, не углублялся в сам вопрос
@serufim
@serufim 2 жыл бұрын
Блен, вот я просто раньше писал на сях в универе и на олимпиадах, и привык думать об операциях и о памяти, когда на скале вижу как постоянно пересоздаются коллекции или генерятся на лету новые, меня немного передергивает
@wolf_code
@wolf_code Жыл бұрын
Как бывший плюсист очень хорошо тебя понимаю Я когда начал учить скалу и работать на ней в начале тоже все время думал: господи сколько же памяти наверное выделяется, когда например делаю map или filter И тут важно понять вот что: если ты делаешь игры где каждый бит оперативки на счету - то конечно скала или джава - плохой выбор, я именно про большие игры. Если же ты пишешь backend - то тут надо смотреть на ситуацию шире и тогда можно увидеть вот что: 1) Либо ты упарываешься в плюсы - напишешь код который на 200 мегабайтах памяти идеально держит нагрузку - но потратишь на это год 2) Либо ты напишешь тот же функционал на скале за 1 месяц который будет жрать 1 гигабайт памяти И вот современный мир устроен так что врядли бизнес скажет - ого как круто ты тут написал свой пул для памяти, конечно пиши свой проект хоть 2 года, Он скажет - чувак 1 гиг оперативы полная фигня - пиши на скале - главное чтобы проект был готов вовремя Вам оперативки по талону дают чтоли? что вы все время о ней думаете?) Конечно нельзя на это забивать - но жертвовать временем разработки для того чтобы выиграть 100 мегабайт как мне кажется глупо
@gobpblueex
@gobpblueex 2 жыл бұрын
Все это очень прикольно, но если я правильно понимаю, чтоб использовать подход в реальных, а не учебных задачах должны существовать разнообразные библиотеки и фреймворки, целиком написанные в функциональной парадигме. Как с этим на практике ? Плюс насколько я понимаю за счет использования высокоуровневых абстракций результат получается далеко не самым оптимальным в плате производительности и потребления ресурсов.
@wolf_code
@wolf_code 2 жыл бұрын
примеры библиотек для фп, cats-core, cats-effect, monix работа с json circe, json4s библиотеки для бд: doobie, slick библиотеки для http http4s, sttp, akka-http еще есть ZIO это уже целая экосистема, которая из коробки приносит все решения По производительности могу сказать по своему опыту, что она не снижается настолько что это становится заметным в некоторых случаях она даже выше, чем в обычных подходах
@igor6185
@igor6185 2 жыл бұрын
Это очень интересно и полезно, надо взять на вооружение. Но у меня сомнения что можно вообще обойтись без переменных, надо побольше задач перебрать.
@wolf_code
@wolf_code 2 жыл бұрын
На практике понятно невозможно без переменных, допустим база данных - можно сказать что это огромная сложная переменная и по сути изменяя ее мы используем переменную Но ФП предлагает подход для таких случаев который позволяет сохранить СП при работе с такими ситуациями (можете посмотреть мое видео с заголовком "Нельзя просто так написать чистый код") дальше можете почитать про ленивые вычисления
@igor6185
@igor6185 2 жыл бұрын
@@wolf_code Я видел ваш ролик про быстрые сортировки, и там вы использовали переменные в качестве хранения промежуточных значений, и вы утверждаете что можно переписать этот алгоритм с помощью, например ленивых списков или ленивых вычислений? Если возможно, запишите видео ролик об этом, думаю много кому будет интересно.
@wolf_code
@wolf_code 2 жыл бұрын
@@igor6185 да промежуточные значения я сохранял в переменные (но значения их потом не менял - их потом нельзя менять) По сути это переменные - но их называют "иммутабельные переменные" Это переменные которые впоследствии после инициализации не могут изменять своего значения Поэтому когда я сказал программируем без переменных это было не совсем верно, это было сделано в угоду привлечения людей - согласитесь что "Программируем используя только иммутабельные переменные" было бы так себе заголовком Поэтому да - тут надо уточнить мое утверждение: любой код с переменными можно переделать на код с иммутабельными переменными (они создаются но потом не меняют своего значения)
@serufim
@serufim 2 жыл бұрын
Ну и а точно всегда будет коллекция на любой случай жизни?
@wolf_code
@wolf_code 2 жыл бұрын
Да
@DeadInside-ki4hh
@DeadInside-ki4hh 2 жыл бұрын
Лучше не палить группы в телеге)) ну так на будущее
@wolf_code
@wolf_code 2 жыл бұрын
))
@vladislavlankaster
@vladislavlankaster 2 жыл бұрын
ну тема конечно интересная, но с моей точки зрения это усложнения кода, хотя он и стал короче. но всё же код друга более универсальный, и может применяться почти везде.
@wolf_code
@wolf_code 2 жыл бұрын
Почему?
@vladislavlankaster
@vladislavlankaster 2 жыл бұрын
@@wolf_code он довольно простой и понятный, и не использует спец функции. тут ещё вопрос какая производительность у каждого из вариантов.
@wolf_code
@wolf_code 2 жыл бұрын
@@vladislavlankaster может он кажется вам проще и понятнее потому что вы этот подход хорошо знаете?
@MichailLLevin
@MichailLLevin Жыл бұрын
с одной стороны теоретические соображения, с другой - вы держите в памяти совершенно ненужные массивы чисел от 0 до 2000000 и найденных простых. Потому и тормоза видны даже на этом не слишком большом примере.
@wolf_code
@wolf_code Жыл бұрын
Не совсем, под капотом такой массив не генерируется, советую почитать про то как устроены стримы в той же джаве
@0_fuck_society_0
@0_fuck_society_0 2 жыл бұрын
А что за яп?
@wolf_code
@wolf_code 2 жыл бұрын
scala
@LoveSoySause
@LoveSoySause 2 жыл бұрын
Зачем тебе такие друзья
@wolf_code
@wolf_code 2 жыл бұрын
😆😆😆
@scarlatum
@scarlatum 2 жыл бұрын
"ТОП 10 ЛАЙФХАКОВ В ПРОГРАМИРОВАНИИ! ПИШЕМ КОД РАСКАЛЁННЫМ НОЖОМ 10 ЧАСОВ!". Самого-то не корёжит со своих заголовков?
@wolf_code
@wolf_code 2 жыл бұрын
kzbin.info/www/bejne/p6OaiqdjlN2HrJo
@wolf_code
@wolf_code 2 жыл бұрын
нет
@mariownyou
@mariownyou 2 жыл бұрын
Что это да ide?
@wolf_code
@wolf_code 2 жыл бұрын
intellij idea
ONE MORE SUBSCRIBER FOR 6 MILLION!
00:38
Horror Skunx
Рет қаралды 12 МЛН
Sprinting with More and More Money
00:29
MrBeast
Рет қаралды 24 МЛН
1🥺🎉 #thankyou
00:29
はじめしゃちょー(hajime)
Рет қаралды 74 МЛН
Сети для самых маленьких
1:11:54
Fox Devs
Рет қаралды 9 М.
Роевой интеллект. Муравьиный алгоритм.
20:57
foo52ru ТехноШаман
Рет қаралды 365 М.
ONE MORE SUBSCRIBER FOR 6 MILLION!
00:38
Horror Skunx
Рет қаралды 12 МЛН