트랙
/
Elixir
Elixir
/
연습 문제
/
농구 웹사이트
농구 웹사이트

농구 웹사이트

학습 연습 문제

소개

Access Behaviour

Elixir는 코드 _Behaviour_를 사용해, 공통된 범용 인터페이스를 제공하면서도 각 모듈이 그 인터페이스를 구체적으로 구현할 수 있게 해줘요. 그중 대표적인 예가 바로 _Access Behaviour_예요.

_Access Behaviour_는 키 기반 데이터 구조에서 값을 가져오기 위한 공통 인터페이스를 제공해요. _Access Behaviour_는 맵과 키워드 리스트에 대해 구현되어 있는데, 감을 잡을 수 있도록 맵에서의 사용법을 살펴봐요. _Access Behaviour_는 맵이 있으면 그 뒤에 _대괄호_를 붙이고, 키를 사용해 그 키에 연결된 값을 가져올 수 있다고 정의해요.

# Suppose we have these two maps defined (note the difference in the key type)
my_map = %{key: "my value"}
your_map = %{"key" => "your value"}

# Obtain the value using the Access Behaviour
my_map[:key] == "my value"
your_map[:key] == nil
your_map["key"] == "your value"

데이터 구조에 키가 없으면 nil이 반환돼요. 이 때문에 의도하지 않은 동작이 생길 수 있는데, 오류를 발생시키지 않기 때문이에요. 참고로 nil 자체도 Access Behaviour를 구현하고 있어서, 어떤 키에 대해서도 항상 nil을 반환해요.

지침

지역 농구팀의 웹사이트를 유지 관리하기 위해 웹 개발팀과 함께 일하고 있어요. 웹 개발팀은 Elixir에 익숙하지 않아서, 빠른 개발을 위해 중첩된 맵에서 데이터를 추출할 수 있는 함수를 부탁했어요.

1. 중첩된 맵 구조에서 데이터 추출하기

extract_from_path/2 함수를 구현해요. 이 함수는 두 개의 인자를 받아요:

  • data: 농구팀에 대한 데이터가 담긴 중첩된 맵 구조예요.
  • path: 마지막 키에 연결된 값을 얻기 위해 마침표로 구분된 키로 이루어진 문자열이에요.

경로 상의 어느 지점에서든 값이나 키가 존재하지 않으면 nil을 반환해야 해요

data = %{
  "team_mascot" => %{
    "animal" => "bear",
    "actor" => %{
      "first_name" => "Noel"
    }
  }
}

BasketballWebsite.extract_from_path(data, "team_mascot.animal")
# => "bear"
BasketballWebsite.extract_from_path(data, "team_mascot.colors")
# => nil

이 함수를 구현할 때는 _Access Behaviour_를 사용해요.

중첩된 맵 데이터 구조를 다룰 때는 Map이나 Kernel 모듈의 함수를 사용하지 마세요.

2. 포함된 함수를 사용해 리팩터링하기

코드를 리뷰하던 동료가 여러분의 구현과 아주 비슷한 일을 하는 Kernel 모듈 함수를 알려줘요.

get_in_path/2를 이 Kernel 모듈 함수를 사용하도록 구현해요.

기대하는 인자는 1번과 같아요.

BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Elixir Exercism

농구 웹사이트 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.