Size: a a a

Эликсир и Вунш

2018 May 23

KA

Kurmet Aubanov in Эликсир и Вунш
Konstantin
ну и еще мои 5 копеек.
Очень много раз натыкался на то, что просят избегать использование if/else
Самый true elixir way - считается (не истина в последней инстанции) создание доп функций с паттерн матчингом

def get_message(a, b) when a > b do
 :ok
end

def get_message(a, b) do
 :error
end
Благодарю
источник

DS

Dmitry Shpagin in Эликсир и Вунш
Спасибо за обсуждение, вышло продуктивно и интересно 🙂
источник

AB

Alexey Bolshakov in Эликсир и Вунш
Dmitry Shpagin
nil[«params»] # => nil
с параметрами это я как пример. суть именно  в краткой записи в однострочку если то иначе сё
источник

AB

Alexey Bolshakov in Эликсир и Вунш
Konstantin
ну и еще мои 5 копеек.
Очень много раз натыкался на то, что просят избегать использование if/else
Самый true elixir way - считается (не истина в последней инстанции) создание доп функций с паттерн матчингом

def get_message(a, b) when a > b do
 :ok
end

def get_message(a, b) do
 :error
end
я где-то читал, что из case и паттерн матчинга через функций получается практически одно и то же в байткоде
источник

AB

Alexey Bolshakov in Эликсир и Вунш
так что оба варианта - правильные
источник

AB

Alexey Bolshakov in Эликсир и Вунш
if плох потому, что там могут начать присваивать значения переменным в этих блоках
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
Konstantin
if/case очень интересная тема, тут есть несколько интересных нюансов
1. if/unless - это не конструкция языка, это просто макрос
2. if/unless сделаны не просто чтоб проверять значения (как в других языках), а больше для выполнения доп кода по ходу функции
def some(file) do 
 if !File.exist?(file), do: File.create()
 // working with file
end


3 case - это как раз структура языка и основывается на паттерн матчинге (и работает очень быстро)
4. почти всегда в исходниках самого elixir используется case для проверки true -> и только в части Mix - используется if else для возвращения значений функций
https://github.com/elixir-lang/elixir/blob/26d53e60a718d34c4dc723811d924d58288282ab/lib/elixir/lib/file/stream.ex#L87

https://github.com/elixir-lang/elixir/blob/ab302d23e4b632486645cdf0fcc392e66b7abb99/lib/mix/lib/mix/tasks/deps.get.ex#L30
@marinintim Ну не всегда, вот тот пример, что ты привел, сразу же пару строк выше идет if
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
Насколько я знаю, все сильно зависит от контрибьютера, у каждого свой стиль, кому нравится if, cond, кому case - поэтому здесь нет одного стиля и if встречается очень часто в коде самого Elixir.
источник

K

Konstantin in Эликсир и Вунш
Dmitry Russ (Aleksandrov)
@marinintim Ну не всегда, вот тот пример, что ты привел, сразу же пару строк выше идет if
Aga.
Я ьам чуть ниже писал про inline if
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
@konstantin_zo Не нашел, но с этим утверждением я не согласен: "4. почти всегда в исходниках самого elixir используется case для проверки true -> и только в части Mix - используется if else для возвращения значений функций".
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
Везде в коде Elixir и if и cond и case-ов полно.
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
Я знаю контрибьютера, которому к примеру не нравится if, и от него идут только case и cond, другие используют if, где проверка на истинность идет.
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
источник

K

Konstantin in Эликсир и Вунш
абсолютно согласен. Не говорю, что мое слово - истина.
Писал всего-лишь свой опыт и наблюдения
источник

AB

Alexey Bolshakov in Эликсир и Вунш
case - это когда действия зависят от одного значения. а когда у тебя надо сделать действия одного типа, но условия их разные, то тут как раз хорошо заходит cond do
источник

AB

Alexey Bolshakov in Эликсир и Вунш
а if удобно для однострочки. но, не стоит забывать, что case/if/cond еще и возвращают значения и их можно присвоить
источник

AD

Artem Denezhny in Эликсир и Вунш
источник
2018 May 24

АТ

Алексей Терехов in Эликсир и Вунш
они по 2 года готовят, пока текущая версия не перестанет быть актуальной. а там можно и для следующей версии начать готовить
источник

АТ

Алексей Терехов in Эликсир и Вунш
The Paper Book will ship on 2018-09-10 (roughly).
источник