Всегда хотелось попробовать функциональный язык. Выбор пал на эликсир и теперь возник вопрос. Каков был опыт перехода из мира ООП у вас в ФП, также ещё что вы читали/смотрели для того, чтобы освоить эликсир?
Я из джавы, в эликсир и безмерно рад
Когда-то пописывал хеловорлды на Хаскеле. Эликсир как язык удивления не вызвал, сложнее было вникнуть в OTP.
Мне зашла вот эта книга, чтобы как-то понять ФП - https://grokkingsimplicity.com
я по работе кусок монолита с рельсы на эликсир переписывал - так и вкатывался. для меня было сложно осознать пару концептов, но когда осознал - всё очень быстро пошло. после ООП-языков могут быть сложности. а так - стандартный путь. пытаешься делать в лоб и гуглишь всё непонятное
Поставили задачу перещелать чаты. Сел - переписал. Получилось говно, но опыт поимел
Что за концепты кстати ?
мне очень долго не давалось переписать дважды вложенный цикл с внешними обновляемыми переменными, потому что в эликсире так не сделаешь. тебе нужно всегда новую переменную размечать. плюс у тебя нет по сути классического цикла - у тебя есть итератор или map/reduce, где всё вычисление внутри производится в изолированной анонимной функции. поэтому я для себя выделил по итогу два больших концепта, которые надо осознать для перекатывания с распространённого ЯП на функциональный: - почти полная невозможность модификации переменных - нужно при каждом изменении результат заново переназначать (добавил что-то в map - размечаешь новый map из этого результата) - анонимные функции/замыкания. я был знаком с замыканиями в js, но там это не очень хорошо сделано, у тебя всегда есть откуда угодно доступ к внешним переменным. а тут нет - ты можешь замкнуть что-то внутри функции и только таким образом внешние переменные прокинуть куда-либо глубже, но модифицировать из замыкания что-то снаружи никак нельзя вот когда я эти две вещи полностью осознал и научился применять, остальное вообще никаких проблем не стало вызывать. а фишки OTP со всеми этими genserver, async/await и прочим было делом техники освоить, вообще не вызвало затруднений
Ну да имутабельность к счастью в Эликсире имеется, а если хочется иметь доступ к стейту откуда угодно делаешь генсервер. И очень плохо что в других языках не так))
я сейчас снова по некоторым причинам вернулся в рельсу и часто ловлю себя на мысли, что пишу код так, как писал бы в эликсир - т.е. отдельные модули с методами без сайд-эффектов. и даже внутри методов инстанса по-привычке не работаю с атрибутами, а прокидываю это через аргументы в отдельные методы. такой код и тестировать проще, и очевиднее как-то работает, а не вот эта лапша из непонятных изменений внутренних атрибутов объекта, которые ещё надо распутать если что-то рефакторишь
У меня коллега писал про опыт перехода с php, советую, если заинтересован https://medium.com/from-php-to-elixir
Обсуждают сегодня