Оператор |> називається оператором конвеєра. Його можна використовувати, щоб обʼєднувати виклики функцій у ланцюжок так, що значення, яке повернув попередній виклик функції, передається наступному виклику.
"hello"
|> string.uppercase
|> string.append("?!")
// -> "HELLO?!"
Наведений вище код еквівалентний такому:
string.append(string.uppercase("hello"), "?!")
Оператор конвеєра передає значення або як перший аргумент до виклику функції, або як єдиний аргумент до нового виклику, залежно від того, який варіант матиме правильний тип.
100
|> function_that_takes_two_arguments(1)
// Is equivalent to
function_that_takes_two_arguments(100, 1)
100
|> function_that_returns_a_function(1)
// Is equivalent to
function_that_returns_a_function(1)(100)
Іноді ми хочемо передати значення в іншу позицію. У такому разі можна використати заповнювач _, щоб указати, куди саме слід вставити значення.
100
|> some_function(1, _, 2)
У цій вправі ми допоможемо закоханим старшокласникам зізнатися в коханні в соцмережах, згенерувавши ASCII-серце з їхніми ініціалами:
****** ******
** ** ** **
** ** ** **
** * **
** **
** J. K. + M. B. **
** **
** **
** **
** **
** **
** **
***
*
Реалізуйте функцію first_letter. Вона має приймати імʼя та повертати його першу літеру. Вона має прибирати з імені всі зайві пробіли.
first_letter("Jane")
// -> "J"
Реалізуйте функцію initial. Вона має приймати імʼя та повертати його першу літеру у верхньому регістрі, після якої йде крапка. Обовʼязково застосуйте повторно функцію first_letter, яку ми визначили на попередньому кроці.
initial("Robert")
// -> "R."
Реалізуйте функцію initials. Вона має приймати повне імʼя, що складається з імені та прізвища, розділених пробілом, і повертати ініціали. Обовʼязково застосуйте повторно функцію initial, яку ми визначили на попередньому кроці.
initials("Lance Green")
// -> "L. G."
Реалізуйте функцію pair. Вона має приймати два повні імені та повертати ініціали всередині ASCII-серця. Обовʼязково застосуйте повторно функцію initials, яку ми визначили на попередньому кроці.
pair("Blake Miller", "Riley Lewis")
// -> "
// ****** ******
// ** ** ** **
// ** ** ** **
// ** * **
// ** **
// ** B. M. + R. L. **
// ** **
// ** **
// ** **
// ** **
// ** **
// ** **
// ***
// *
// "
Зареєструйтеся на Exercism, щоб вивчати й опановувати Gleam, а також 33 концепції122 вправи та справжнє наставництво від людей, і все це безкоштовно.