hariharasudhan94

hariharasudhan94

How to use return statement with if condition in elixir?

lets say i have a sample like

a = 20; b = 10;
if (a > b) do
{:ok, "a"}
end

if (a < b) do
{:ok, b}
end

if (a == b) do
{:ok, "equal"}
end

when i run this code first condition satisfied ,instead of returning {:ok, "a"} tuple it starts executing next block of code, how can i stop the execution once first condition is met, and return result

Marked As Solved

LostKobrakai

LostKobrakai

You can’t return early in elixir, but there’s another constuct for such operations:

cond do
  a > b -> {:ok, "a"}
  a < b -> {:ok, "b"}
  a == b -> {:ok, "equal"}
end

Also Liked

OvermindDL1

OvermindDL1

To be more specific, there are no statements, everything returns something, including those lines, they just return it ‘up’ (so the if returns it, but the if is not being assigned to anything so it vanishes). :slight_smile:

peerreynders

peerreynders

Just to add to the spectrum (i.e. I’m not recommending this) I see Greg’s suggestion as a “cleaned up” version of

a = 20 
b = 10

result = 
  case {a,b} do
    {c,c} -> "equal"
    {c,d} when c > d -> "a"
    {c,d} when c < d -> "b"
  end
reply = {:ok, result}

IO.inspect(reply)

which could also be written as

a = 20 
b = 10

result = 
  case {a,b} do
    _ when a > b -> "a"
    _ when a < b -> "b"
    _ -> "equal"
  end
reply = {:ok, result}

IO.inspect(reply)

leading to the accepted solution

a = 20 
b = 10

result = 
  cond do
    a > b -> "a"
    a < b -> "b"
    true -> "equal"
  end
reply = {:ok, result}

IO.inspect(reply)

And if do always has a “second” value it evaluates to when the condition is false - it will return nil

a = 10 
b = 20

value1 = 
  if a > b do
    "a"  
  end
  
value2 = 
  cond do
    a > b -> "a"
    true -> nil
  end

IO.inspect({value1,value2})

> {nil, nil}
gregvaughn

gregvaughn

You could use a cond, as shown above, or even different named function heads with pattern matching

def compare(a, a), do: {:ok, “equal”}
def compare(a, b) when a > b, do: {:ok, “a”}
def compare(a, b) when a < b, do: {:ok, “b”}

Where Next?

Popular in Questions Top

chrisalley
ExUnit now has describe blocks which is a welcome addition coming from RSpec. In the docs, it states that nested hierarchies of describe ...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New

Other popular topics Top

Nvim
Anybody knows a comprehensive comparison of Django and Phoenix, thanks for the help. Where are they similar? Where do they differ the m...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod -- where is this set? Thanks.
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
nobody
Hi! In PHP: $SERVER['SERVERADDR'] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
boundedvariable
I am going through the kafka architecture. All the features what the kafka is providing are already in Erlang. I would like hear your opi...
New
marick
I had some trouble figuring out how to make many-to-many associations work. Once I got it working, I wrote a blog post. Because I'm a nov...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement