Hahmonsovitus ja ohjausvirta
Ottakaa Elixirin tehokas hahmonsovitus ja keskeiset ohjausvirtarakenteet, kuten `if`, `case` ja `cond`, haltuun.
Hahmonsovitus ja ohjausvirta on ilmainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.
Johdatus hahmonsovitukseen
Hahmonsovitus on Elixirin ydin. Tässä = on match-operaattori, ei sijoitusoperaattori — se sovittaa vasemman puolen oikeaan puoleen.
Muuttujien perussovitus
Yksinkertaisimmillaan sovitus sitoo sitomattoman muuttujan arvoon. Jos muuttuja on jo sidottu, Elixir tarkistaa sen sijaan, että osapuolet todella sopivat yhteen.
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()Sovitus literaalien kanssa
Kun sijoitatte literaalin vasemmalle puolelle, sovituksesta tulee väite: se onnistuu vain, jos molemmat puolet ovat yhtäsuuret, muuten syntyy virhe. Tämä on kätevää tarkistuksissa.
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()Tuplien hajottaminen
Sovitus on parhaimmillaan tuplien kanssa — voitte hajottaa ne suoraan muuttujiksi. Näin puretaan esimerkiksi {:ok, value}-tulokset.
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()Listojen hajottaminen
Hajottakaa listoja mallilla [head | tail]: head on ensimmäinen alkio ja tail loput alkiot. Käyttäkää _-merkkiä osiin, joista ette välitä.
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()Pin-operaattori (^)
Pin-operaattori ^ tarkoittaa: ”älä sido muuttujaa uudelleen, vaan sovita sen nykyiseen arvoon”. Se sopii erinomaisesti yhtäsuuruuden varmistamiseen.
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()Yksinkertaiset ehdot: if/unless
Käyttäkää yksinkertaisissa haaroissa if-rakennetta ja sen vastinetta unless; kumpaankin voi liittää valinnaisen else-haaran. Ne ovat selkein väline yhteen tosi/epätosi-ehtoon.
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()Useiden hahmojen käsittely casella
case-lauseke sovittaa yhden arvon useisiin hahmoihin ja suorittaa ensimmäisen sopivan haaran — hahmonsovitusta ohjausvuona.
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()Useita ehtoja cond-rakenteella
Kun tarkistettavana on useita totuusarvoisia ehtoja (kuten muualla toteutettu if/else-if-ketju), cond suorittaa ensimmäisen lausekkeen, jonka ehto on tosi.
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()Hahmonsovitushaaste
Tarkastelkaa seuraavaa Elixir-koodiesimerkkiä:
data = ["apple", {:fruit, "banana"}, "cherry"]
[first, {:fruit, second}, _] = dataMitkä ovat muuttujien first ja second lopulliset arvot tämän koodin suorittamisen jälkeen?
Kertaus: hahmonsovitus ja ohjaus
Kertaus: = suorittaa sovituksen, tuplat ja listat hajotetaan osiin, ^ lukitsee arvon ja if/case/cond ohjaavat ohjelman kulkua.
Opi Elixir tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Hahmonsovitus ja ohjausvirta” ilmainen?
Kyllä – oppitunnin ”Hahmonsovitus ja ohjausvirta” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Elixir ja Phoenix: skaalautuva backend-kehitys-kurssin, päivitä CoddyKit PROhon. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Hahmonsovitus ja ohjausvirta”?
Ottakaa Elixirin tehokas hahmonsovitus ja keskeiset ohjausvirtarakenteet, kuten `if`, `case` ja `cond`, haltuun. Harjoittelet Elixir ja Phoenix: skaalautuva backend-kehitys-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Elixir ja Phoenix: skaalautuva backend-kehitys-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Hahmonsovitus ja ohjausvirta”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunnilla?
Kyllä. Jokainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Elixir-kielen esittely
- Perustietotyypit ja operaattorit
- Hahmonsovitus ja ohjausvirta
- Merkkijonot, binäärit ja sigilit Elixirissä