WebHU - Programozási kérdések és válaszok

Hogyan működik a paraméter-összerendelés a PhoenixFrameworkben (Elixir).

Ezért írok egy gyors aszinkron felhasználónév-ellenőrzést, és a PhoenixFrameworks webhelyen található oktatóanyagot követve meg tudom csinálni a következőképpen:

def validateUsername(conn, %{"username" => user}) do
    IO.inspect(conn)
    query = from u in User,
      where: u.username == ^user,
      select: [u.username]

    case Repo.all(query) do
      [[username]] -> 
        conn
        |> json(%{ success: false, error: "Username has been taken" })
      [] ->
        conn
        |> json(%{ success: true })
      nil -> 
        conn
        |> json(%{ success: true })
      _ ->
        conn
        |> json(%{ success: false, error: "Internal Server Error"})
    end

De ez számomra nem teljesen értelmes, mivel soha nem foglalkoztam funkcionális programozási nyelvvel, és tudom, hogy az elixírben a =-vel való adatkötés másképp működik. De az én fejemben úgy érzem, hogy meg kellene fordítani:

def validateUsername(conn, %{user => "username"})

Vagy valami ilyesmi, így a fő kérdésem

Hogyan tölti fel a %{"username" => user}) a user változót a releváns információkkal?


  • A mintaillesztés nem velejárója a funkcionális programozásnak. Ez csak egy kiemelkedő funkció számos FP nyelvi megvalósításban. 27.04.2016

Válaszok:


1

A mintaillesztés olyan dolognak tekinthető, amely az összes változót hozzárendeli a kifejezés bal oldalához, ha a jobb oldalnak "megfelelő alakja" van.

{a, b} = {1, 2} # now a = 1, b = 2
%{"username" => user} = %{"username" => "Tomasz", "password" => "secret"} # now user = "Tomasz"
[a, b, c] = [:a, "b", 1] # a = :a, b = :b, c = 1
{a, b} = {1, 2, 3} # error

És beágyazott adatok esetén is működik!

{[a, b, 3], {c, 5}} = {[1, 2, 3], {4, 5}}

A "Programming Phoenix"-ben található egy igazán átfogó útmutató a mintaillesztéshez, amely tartalmazza a tűs operátor

27.04.2016

2

Hogyan tölti fel a %{"username" => user}) a felhasználói változót a releváns információkkal?

Pontosan így működik a mintaillesztés az Elixirben. A kulcsnak meg kell egyeznie a térképen lévő kulccsal, és az értéknek olyan mintának kell lennie, amely illeszkedik a kulcs értékével a térképen. Ha ez egy normál változó, akkor csak hozzárendeli az értéket.

Ezenkívül, ha feltételezzük, hogy az adatbázisban egyedi megszorítások vannak a felhasználók táblájában a felhasználónévre vonatkozóan, átírnám az eredeti kódot a Repo.get_by/2 használatára:

def validateUsername(conn, %{"username" = user}) do
  case Repo.get_by(User, username: user) do
    nil -> 
      conn
      |> json(%{ success: true })
    user -> 
      conn
      |> json(%{ success: false, error: "Username has been taken" })
  end
end

or

def validateUsername(conn, %{"username" = user}) do
  if Repo.get_by(User, username: user) do
    conn
    |> json(%{ success: false, error: "Username has been taken" })
  else
    conn
    |> json(%{ success: true })
  end
end
27.04.2016
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..