diff --git a/modules/30-flow/10-pattern-matching/description.ru.yml b/modules/30-flow/10-pattern-matching/description.ru.yml index 9efc9a7..d0c6c02 100644 --- a/modules/30-flow/10-pattern-matching/description.ru.yml +++ b/modules/30-flow/10-pattern-matching/description.ru.yml @@ -34,9 +34,9 @@ theory: | IO.puts(age) # => 25 ``` - Первая строка опять выглядит как присваивание. Только значение более сложное -- кортеж из трех элементов. А вот вторая строка уже интереснее. + Первая строка опять выглядит как присваивание. Только значение более сложное -- кортеж из трех элементов. А вот вторая строка уже интереснее. - Слева от оператора `=` шаблон, который ограничивает множество значений. Этот шаблон может совпасть только с такими значениями, которые являются кортежами из трех элементов, первым элементом обязательно должен быть атом `:user`, а второй и третий элемент могут быть любыми. + Слева от оператора `=` шаблон, который ограничивает множество значений. Этот шаблон может совпасть только с такими значениями, которые являются кортежами из трех элементов, первым элементом обязательно должен быть атом `:user`, а второй и третий элемент могут быть любыми. Справа от оператора `=` находится значение, которое мы сравниваем с шаблоном. В данном случае значение извлекается из переменной `user`, но оно может быть и результатом вызова функции или литералом. @@ -69,7 +69,7 @@ theory: | Обратите внимания на символ подчеркивания. Он совпадает с любым значением, и применяется, когда это значение не нужно, мы не хотим сохранять его в переменную. - Если переменная встречается два раза, то значения в этих местах должны быть одинаковыми: + Если переменная встречается два раза, то значения в этих местах должны быть одинаковыми: ```elixir {a, a, 42} = {10, 10, 42} # match @@ -78,7 +78,7 @@ theory: | ``` Но это не касается символа подчеркивания: - + ```elixir {_, _, 42} = {10, 10, 42} # match {_, _, 42} = {20, 20, 42} # match @@ -90,7 +90,7 @@ theory: | ```elixir [pattern] = [value] ``` - + Шаблон может включать: - литералы - переменные @@ -107,30 +107,29 @@ theory: | - конструкция case - клозы функций (clause) - обработка исключений (rescue, catch) - - чтение сообщений из mailbox процесса (receive) + - чтение сообщений из mailbox процесса (receive) Конструкции case и function clause рассмотрим в следующей теме. Обработка исключений и чтение сообщений будут позже в курсе. instructions: | - Реализовать функцию `get_age(user)`, которая принимает объект `user`, представленный в виде кортежа `{:user, name, age}`, и возвращает возраст (age). + Реализуйте функцию `get_age(user)`, которая принимает объект `user`, представленный в виде кортежа `{:user, name, age}`, и возвращает возраст (age). - Реализовать функцию `get_names(users)`, которая принимает список из трёх объектов `user`, представленных такими же кортежами, и возвращает список из трёх имен. + Реализуйте функцию `get_names(users)`, которая принимает список из трёх объектов `user`, представленных такими же кортежами, и возвращает список из трёх имен. ```elixir - defmodule Solution do + bob = {:user, "Bob", 42} + helen = {:user, "Helen", 20} + kate = {:user, "Kate", 22} - def get_age(user) do - # TODO реализация - end + Solution.get_age(bob) # => 42 + Solution.get_age(helen) # => 20 + Solution.get_age(kate) # => 22 - def get_names(users) do - # TODO реализация - end - - end + Solution.get_names([bob, helen, kate]) + # => ["Bob", "Helen", "Kate"] ``` - + tips: - | [Про pattern matching](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D1%86%D0%BE%D0%BC)