간단히 말해서 Elixir 패턴 매칭

6736 단어 elixir

간단히 말해서 패턴 매칭



Elixir를 처음 사용하는 경우 패턴 매칭이 생소할 수 있습니다. 익숙해지면 그것이 얼마나 강력한지 알게 될 것입니다. 그리고 나는 당신이 그것을 확실히 좋아할 것이라고 확신합니다.

패턴 매칭은 elixlir 코드의 모든 곳에서 사용됩니다. 그리고 나는 그것을 내가 사용하는 다른 언어로 가져올 것입니다 (가능하다면 : D)

하지만 그렇게 어렵지는 않습니다.

패턴 매칭은 무엇을 합니까?



당신에게 변수/값을 주고, 당신이 원할 수도 있습니다
  • 데이터 유형이 예상 데이터 유형과 일치하는지 확인하십시오
  • .
  • 데이터 구조가 예상 데이터 구조와 일치하는지 확인
  • 데이터의 일치하는 부분을 변수에 할당

  • 그리고 패턴 매칭은 당신을 위해 이 모든 일을 합니다. 몇 가지 예를 살펴보십시오.

    이 예제를 시도할 때 데이터가 패턴과 일치하지 않으면 예외가 발생합니다. 실제 Elixir 앱에서는 이런 식으로 사용하지 않을 것입니다. 이 기사의 끝에서 사용된 위치를 확인하세요.

    Map/Struct와 패턴 매칭



    1. 이 데이터가 지도인지 확인

    %{} = params
    


    2. 데이터가 맵이고 키email가 있고 이메일 값이[email protected]인지 확인합니다.

    %{"email" => "[email protected]"} = params
    


    3. 데이터가 맵이고 키email가 있는지 확인하고 패턴과 일치하면 키email의 값을 변수my_email에 할당합니다.

    %{"email" => my_email} = params
    


    4. 데이터가 맵이고 키가 있는지 확인email, 값을 추출하고 싶지 않습니다.

    값을 무시하려면 _를 사용하십시오.

    %{"email" => _} = params
    


    5. 패턴 매칭 중첩 맵

    %{"address" => %{"city" => city}} = params
    


    6. 데이터가 구조체 유형인지 확인User
    %User{} = params
    


    The rest is same with map. Struct is basically a map with atom key.



    List와 패턴 매칭



    1. 데이터가 비어 있는지 확인

    [] = params
    


    2. 데이터가 목록이고 비어 있지 않은지 확인

    [_|_] = params
    


    3. 데이터가 정확한 목록인지 확인

    [1, 2] = params
    


    4. 데이터가 목록인지 확인하고 첫 번째 요소와 나머지 요소 추출

    [first_element | remaining] = params
    


    튜플과 패턴 매칭



    튜플과 일치시킬 패턴이 많지 않습니다.

    1. 데이터가 2개 요소의 튜플인지 확인

    {_, _} = params
    


    2. 데이터가 튜플이고 특정 값이 있는지 확인

    {:ok, data} = result
    # you use this most of time
    


    패턴 일치를 사용하는 위치



    1. 케이스 조항

    case user do
        %User{is_active: true} -> "Log you in"
        %User{is_active: false} -> "Check your email"
        _others -> "Not a user"
    end
    


    2. 조항 포함

    with {:ok, user} <- create_user(params) do
        # your code
    end
    


    3. 기능

    def is_admin(%User{role: "admin"}), do: true
    def is_admin(%User{role: _}), do: false
    def is_admin(_), do: raise "Not a user"
    


    결론



    처음에는 이해하기가 조금 낯설지만 점차 없이도 살 수 있습니다. 내가 가장 사랑하는 Elixir의 기능 중 하나입니다. 그리고 나는 당신이 할 것이라고 생각합니다. 그것을 더 많이 사용하고 그 힘은 당신의 손에 있습니다.

    좋은 웹페이지 즐겨찾기