Elixir en Phoenix: schaalbare backendontwikkeling · Les

Pattern matching en control flow

Beheers Elixirs krachtige functie voor pattern matching en essentiële controlflowconstructies zoals `if`, `case` en `cond`.

Les 3 van 411 stappen

Pattern matching en control flow is een gratis Elixir en Phoenix: schaalbare backendontwikkeling-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Elixir en Phoenix: schaalbare backendontwikkeling. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Elixir en Phoenix: schaalbare backendontwikkeling bevat in totaal 4 lessen.

Introductie tot patroonvergelijking

Patroonvergelijking vormt het hart van Elixir. Hier is = een vergelijkingsoperator, geen toewijzing — de linkerkant moet gelijk zijn aan de rechterkant.

Eenvoudige variabelevergelijking

De eenvoudigste vergelijking koppelt een niet-gebonden variabele aan een waarde. Als de variabele al gebonden is, controleert Elixir in plaats daarvan of beide kanten daadwerkelijk overeenkomen.

defmodule BasicMatchDemo do
  def run do
    # 'a' is unbound, so it's assigned 10
    a = 10
    IO.puts "a is: #{a}"

    # 'b' is unbound, so it's assigned 20
    b = 20
    IO.puts "b is: #{b}"

    # This matches 'a' to the value of 'b' (20)
    # 'a' is re-bound to 20
    a = b
    IO.puts "After a = b, a is: #{a}"
  end
end

BasicMatchDemo.run()

Vergelijken met letterlijke waarden

Als je links een letterlijke waarde plaatst, wordt de vergelijking een assertie: deze slaagt alleen als beide kanten gelijk zijn; anders wordt een fout gegenereerd. Handig voor validatie.

defmodule LiteralMatchDemo do
  def run do
    # This matches because 1 is equal to 1
    1 = 1
    IO.puts "1 = 1 matched successfully!"

    # This matches because 'hello' is equal to 'hello'
    "hello" = "hello"
    IO.puts "'hello' = 'hello' matched successfully!"

    # If you uncomment the line below, it will cause a MatchError
    # 1 = 2
    # IO.puts "This line would not be reached if 1 = 2 failed"
  end
end

LiteralMatchDemo.run()

Tupels ontleden

Patroonvergelijking komt goed tot zijn recht bij tupels — ontleed ze rechtstreeks in variabelen, precies zoals je resultaten van {:ok, value} uitpakt.

defmodule TupleMatchDemo do
  def run do
    # Match a tuple to extract its elements
    {:person, name, age} = {:person, "Alice", 30}
    IO.puts "Name: #{name}, Age: #{age}"

    # Match a common result tuple
    {:ok, data} = {:ok, "User fetched successfully"}
    IO.puts "Status: ok, Data: #{data}"

    # If you uncomment the line below, it will cause a MatchError
    # {:error, reason} = {:ok, "Success"}
  end
end

TupleMatchDemo.run()

Lijsten ontleden

Ontleed lijsten met het patroon [head | tail]: head is het eerste element en tail de rest. Gebruik _ voor onderdelen die je niet nodig hebt.

defmodule ListMatchDemo do
  def run do
    list = [1, 2, 3, 4, 5]

    # Match head and tail
    [head | tail] = list
    IO.puts "Head: #{head}, Tail: #{inspect tail}"

    # Match specific elements
    [first, second, third | _rest] = list
    IO.puts "First: #{first}, Second: #{second}, Third: #{third}"

    # Match an empty list
    [] = []
    IO.puts "Empty list matched!"
  end
end

ListMatchDemo.run()

De pinoperator (^)

De pinoperator ^ betekent "niet opnieuw koppelen — vergelijk in plaats daarvan met de huidige waarde van deze variabele". Ideaal om gelijkheid af te dwingen.

defmodule PinOperatorDemo do
  def run do
    value_a = 10
    value_b = 10

    # This uses the current value of value_a (10) to match against value_b
    # It succeeds because 10 matches 10
    ^value_a = value_b
    IO.puts "Match successful: value_a = #{value_a}, value_b = #{value_b}"

    value_c = 5

    # If you uncomment the line below, it will cause a MatchError
    # because ^value_a (10) is not equal to value_c (5)
    # ^value_a = value_c
    # IO.puts "This line would not be reached if ^value_a = value_c failed"
  end
end

PinOperatorDemo.run()

Eenvoudige voorwaarden: if/unless

Gebruik voor eenvoudige vertakkingen if en het tegenovergestelde unless, elk met een optionele else. Het duidelijkste hulpmiddel voor één ware/onware voorwaarde.

defmodule IfUnlessDemo do
  def run do
    number = 7

    if number > 5 do
      IO.puts "Number is greater than 5"
    else
      IO.puts "Number is 5 or less"
    end

    unless rem(number, 2) == 0 do
      IO.puts "Number is odd"
    else
      IO.puts "Number is even"
    end
  end
end

IfUnlessDemo.run()

Meerdere patronen verwerken met case

De case-expressie vergelijkt één waarde met meerdere patronen en voert het eerste passende patroon uit — patroonvergelijking als besturingsstroom.

defmodule CaseExpressionDemo do
  def run do
    status = {:ok, "Data loaded"}

    case status do
      {:ok, message} ->
        IO.puts "Success: #{message}"
      {:error, reason} ->
        IO.puts "Failed: #{reason}"
      _ ->
        IO.puts "Unknown status"
    end

    # Another example with a simple value
    grade = "B"
    case grade do
      "A" -> IO.puts "Excellent!"
      "B" -> IO.puts "Good job!"
      _ -> IO.puts "Keep trying!"
    end
  end
end

CaseExpressionDemo.run()

Meerdere voorwaarden met cond

Wanneer je veel booleaanse controles hebt (zoals elders een if/else-if-keten), voert cond de eerste clausule uit waarvan de voorwaarde waar is.

defmodule CondExpressionDemo do
  def run do
    score = 85

    cond do
      score >= 90 -> IO.puts "Grade: A"
      score >= 80 -> IO.puts "Grade: B"
      score >= 70 -> IO.puts "Grade: C"
      true -> IO.puts "Grade: D or lower" # The 'true' clause acts as a catch-all
    end

    temperature = 25
    cond do
      temperature > 30 -> IO.puts "It's hot!"
      temperature > 20 -> IO.puts "It's warm."
      true -> IO.puts "It's cool."
    end
  end
end

CondExpressionDemo.run()

Uitdaging: patroonvergelijking

Bekijk het volgende Elixir-codefragment:

data = ["apple", {:fruit, "banana"}, "cherry"]
[first, {:fruit, second}, _] = data

Wat zijn de uiteindelijke waarden van de variabelen first en second nadat deze code is uitgevoerd?

Samenvatting: patroonvergelijking en besturing

Samenvatting: = vergelijkt, je ontleedt tupels en lijsten, ^ zet een waarde vast en if/case/cond bepalen je besturingsstroom.

Gratis beginnen

Leer Elixir met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Pattern matching en control flow” gratis?

Ja — de volledige tekst van “Pattern matching en control flow” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Elixir en Phoenix: schaalbare backendontwikkeling wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Elixir en Phoenix: schaalbare backendontwikkeling bevat in totaal 4 lessen.

Wat leer ik in “Pattern matching en control flow”?

Beheers Elixirs krachtige functie voor pattern matching en essentiële controlflowconstructies zoals `if`, `case` en `cond`. Je oefent met Elixir en Phoenix: schaalbare backendontwikkeling door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Elixir en Phoenix: schaalbare backendontwikkeling te beginnen?

Ervaring vooraf is niet nodig. Elixir en Phoenix: schaalbare backendontwikkeling op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Pattern matching en control flow”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Elixir en Phoenix: schaalbare backendontwikkeling?

Ja. Elke les over Elixir en Phoenix: schaalbare backendontwikkeling bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Inleiding tot de programmeertaal Elixir
  2. Basisedatatypen en operatoren
  3. Pattern matching en control flow
  4. Strings, binaries en sigils in Elixir
← Terug naar Elixir en Phoenix: schaalbare backendontwikkeling