В языке программирования Elixir,
существует две аналогичные конструкции cond и case.
Оба они напоминают операторы switch или select из других языков
оба cond и case описаны на этой странице
В языке программирования Elixir,
существует две аналогичные конструкции cond и case.
Оба они напоминают операторы switch или select из других языков
оба cond и case описаны на этой странице
Позвольте мне поместить if в клуб. Вы используете if с одним условием и возможным else, чтобы оно было. Вы используете оператор cond, когда у вас более одного условия, а оператора if недостаточно, к концу, оператор case используется, когда вы хотите, чтобы шаблон соответствовал некоторым данным.
Объясните примерами: предположите, что вы хотите есть яблоко, если сегодня идет дождь или рис, если нет, тогда вы можете использовать:
if weather == :raining do
IO.puts "I'm eating apple"
else
IO.puts "I'm eating rice"
end
Это ограниченный мир, поэтому вы хотите расширить свои параметры, и из-за этого вы будете есть разные вещи на некоторых условиях, поэтому оператор cond для этого:
cond do
weather == :raining and not is_weekend ->
IO.puts "I'm eating apple"
weather == :raining and is_weekend ->
IO.puts "I'm will eat 2 apples!"
weather == :sunny ->
IO.puts "I'm happy!"
weather != :raining and is_sunday ->
IO.puts "I'm eating rice"
true ->
IO.puts "I don't know what I'll eat"
end
Последний true должен быть там, иначе он вызовет исключение.
Ну так что насчет case? Он используется, чтобы сопоставить что-то. Предположим, что вы получаете информацию о погоде и дне недели в качестве сообщения в кортеже, и вы зависите от этого, чтобы принять решение, вы могли бы написать свои намерения как:
case { weather, weekday } do
{ :raining, :weekend } ->
IO.puts "I'm will eat 2 apples!"
{ :raining, _ } ->
IO.puts "I'm eating apple"
{ :sunny, _ } ->
IO.puts "I'm happy!"
{ _, :sunday } ->
IO.puts "I'm eating rice"
{ _, _ } ->
IO.puts "I don't know what I'll eat"
end
Итак, case предлагает вам подход к сопоставлению шаблонов с данными, которые у вас отсутствуют с if или cond.
Мой простой ответ:
cond не получает никаких аргументов и позволяет использовать в каждой ветки другое условие.case получает аргумент, и каждая ветвь сопоставляется с шаблоном против аргумента.