Elixir에서 중첩 된 if 문을 피하는 방법은 무엇입니까?

kgpdeveloper

Elixir에서 더 읽기 쉽게 리팩토링하는 방법이 있습니까?

  def validate(params) do
    Repo.start_link

    if validate_oauth_params(params) === true do
      oauth_client = Repo.get_by(OauthClient, random_id: params["client_id"], secret: params["secret"])

      if oauth_client != nil do
        allowed_grant_types = Poison.Parser.parse!(oauth_client.allowed_grant_types)
        if Map.has_key?(allowed_grant_types, params["grant_type"]) do
          case params["grant_type"] do
            "password" ->
              process_password_grant(params, oauth_client)
            "refresh_token" ->
              process_refresh_token_grant(params["refresh_token"], oauth_client)
            "client_credentials" ->
              process_client_credentials_grant(oauth_client)
            nil ->
              %{message: "Invalid oauth credentials", code: 400}
          end
        end
      else
        %{message: "Invalid oauth credentials", code: 400}
      end
    else
      %{message: "Invalid oauth credentials", code: 400}
    end
  end

이 코드는 PHP처럼 보이기 때문에 Elixir 방식은 무엇입니까? 나는 그것을 쓰지 않았다.

Webdeb

맞습니다. PHP처럼 보입니다. 패턴 매칭과 같은 엘릭서의 이점은 사용되지 않습니다.

이 부분을 리팩토링하기는 어렵습니다. 다른 방법도 리팩토링해야 더 깔끔하게 처리 할 수 ​​있기 때문입니다. 예를 들어 validate_oauth_params"could"함수는 부울 값 대신 튜플을 반환하므로 이에 대해 패턴 일치를 수행하고 다음과 같이 수행합니다.

def validate(params) do
  case validate_oauth_params(params) do
    {:ok, params} -> choose_oauth_method params
    {:error} -> handle_error "Invalid params"
  end
end

defp choose_oauth_method(%{"grant_type" => "password"} = params) do
  process_password_grant(params)
end
defp choose_oauth_method(%{"grant_type" => nil}) do
  handle_error "Method undefined"
end

defp handle_error(msg), do: %{message: msg, code: 400}
defp handle_error(msg, code), do: %{message: msg, code: code}
defp handle_error(), do: %{message: "Default error massage", code: 400}

이런 식으로, 이것은 전혀 작동하지 않는 코드입니다. 단지 아이디어를 제공하고 패턴 일치가 작동하는 방식과 그 이점을 제공합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

중첩 된 클래스 구조에서 속성 중복을 피하는 방법은 무엇입니까?

분류에서Dev

Angular에서 중첩 된 리피터를 구문 분석하는 방법은 무엇입니까?

분류에서Dev

여러 Mongoose 작업에서 중첩 된 약속을 피하는 방법은 무엇입니까?

분류에서Dev

C에서 중첩 된 if를 피하는 방법은 무엇입니까?

분류에서Dev

중첩 된 ng-repeat 지시문에서 제어문 (if 문)을 사용하는 방법은 무엇입니까?

분류에서Dev

Oracle에서 중첩 된 XML을 쿼리하는 방법은 무엇입니까?

분류에서Dev

FaunaDB에서 중첩 된 문서를 얻는 방법은 무엇입니까?

분류에서Dev

중첩 된 개체에서 중첩 된 배열을 만드는 방법은 무엇입니까?

분류에서Dev

중첩 된 스키마에서만 속성 값을 구문 분석하는 방법은 무엇입니까?

분류에서Dev

dart flutter에서 json 객체로 중첩 된 json 문자열을 변환하는 방법은 무엇입니까?

분류에서Dev

중첩 선택에서 중첩 된 두 값을 얻는 방법은 무엇입니까? mysql

분류에서Dev

R : 중첩 된 목록을 data.frame에 "중첩 해제"하는 방법은 무엇입니까?

분류에서Dev

경로없이 중첩 된 문서의 값을 쿼리하는 방법은 무엇입니까?

분류에서Dev

SpringData Mongo-중첩 된 값에 대해 중첩 된 고유 배열을 얻는 방법은 무엇입니까?

분류에서Dev

중첩 된 if / else 문을 단축하는 방법은 무엇입니까?

분류에서Dev

중첩 된 if 문을 반복하는 방법은 무엇입니까?

분류에서Dev

중첩 된 if 문을 switch 문으로 바꾸는 방법은 무엇입니까?

분류에서Dev

Firestore에서 읽고 모든 해결을 기다리는 중첩 된 약속을 피하는 방법은 무엇입니까?

분류에서Dev

반응에서 중첩 된 JSON을 렌더링하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

루비에서 중첩 된 조건을 처리하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

중첩 된 지시문에서 범위에 액세스하는 방법은 무엇입니까?

분류에서Dev

들여 쓰기 된 중첩 된 약속을 피하는 방법은 무엇입니까?

분류에서Dev

SQL에서 중첩 SELECT 문을 사용하는 방법은 무엇입니까?

분류에서Dev

두 개의 중첩 된 jquery 메서드에서 값을 반환하는 방법은 무엇입니까?

분류에서Dev

중첩 된 JSON에서 값을 추출하고 계산하는 방법은 무엇입니까?

분류에서Dev

"중첩 된 div"구성을 중앙에 배치하는 방법은 무엇입니까?

분류에서Dev

중첩 된 원격 세션에서 Byobu 키 바인딩을 사용하는 방법은 무엇입니까?

분류에서Dev

Object에서 중첩 된 속성을 확산하는 방법은 무엇입니까?

분류에서Dev

중첩 된 json을 Javascript에서 객체 배열로 변환하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    중첩 된 클래스 구조에서 속성 중복을 피하는 방법은 무엇입니까?

  2. 2

    Angular에서 중첩 된 리피터를 구문 분석하는 방법은 무엇입니까?

  3. 3

    여러 Mongoose 작업에서 중첩 된 약속을 피하는 방법은 무엇입니까?

  4. 4

    C에서 중첩 된 if를 피하는 방법은 무엇입니까?

  5. 5

    중첩 된 ng-repeat 지시문에서 제어문 (if 문)을 사용하는 방법은 무엇입니까?

  6. 6

    Oracle에서 중첩 된 XML을 쿼리하는 방법은 무엇입니까?

  7. 7

    FaunaDB에서 중첩 된 문서를 얻는 방법은 무엇입니까?

  8. 8

    중첩 된 개체에서 중첩 된 배열을 만드는 방법은 무엇입니까?

  9. 9

    중첩 된 스키마에서만 속성 값을 구문 분석하는 방법은 무엇입니까?

  10. 10

    dart flutter에서 json 객체로 중첩 된 json 문자열을 변환하는 방법은 무엇입니까?

  11. 11

    중첩 선택에서 중첩 된 두 값을 얻는 방법은 무엇입니까? mysql

  12. 12

    R : 중첩 된 목록을 data.frame에 "중첩 해제"하는 방법은 무엇입니까?

  13. 13

    경로없이 중첩 된 문서의 값을 쿼리하는 방법은 무엇입니까?

  14. 14

    SpringData Mongo-중첩 된 값에 대해 중첩 된 고유 배열을 얻는 방법은 무엇입니까?

  15. 15

    중첩 된 if / else 문을 단축하는 방법은 무엇입니까?

  16. 16

    중첩 된 if 문을 반복하는 방법은 무엇입니까?

  17. 17

    중첩 된 if 문을 switch 문으로 바꾸는 방법은 무엇입니까?

  18. 18

    Firestore에서 읽고 모든 해결을 기다리는 중첩 된 약속을 피하는 방법은 무엇입니까?

  19. 19

    반응에서 중첩 된 JSON을 렌더링하는 가장 좋은 방법은 무엇입니까?

  20. 20

    루비에서 중첩 된 조건을 처리하는 가장 좋은 방법은 무엇입니까?

  21. 21

    중첩 된 지시문에서 범위에 액세스하는 방법은 무엇입니까?

  22. 22

    들여 쓰기 된 중첩 된 약속을 피하는 방법은 무엇입니까?

  23. 23

    SQL에서 중첩 SELECT 문을 사용하는 방법은 무엇입니까?

  24. 24

    두 개의 중첩 된 jquery 메서드에서 값을 반환하는 방법은 무엇입니까?

  25. 25

    중첩 된 JSON에서 값을 추출하고 계산하는 방법은 무엇입니까?

  26. 26

    "중첩 된 div"구성을 중앙에 배치하는 방법은 무엇입니까?

  27. 27

    중첩 된 원격 세션에서 Byobu 키 바인딩을 사용하는 방법은 무엇입니까?

  28. 28

    Object에서 중첩 된 속성을 확산하는 방법은 무엇입니까?

  29. 29

    중첩 된 json을 Javascript에서 객체 배열로 변환하는 방법은 무엇입니까?

뜨겁다태그

보관