|>演算子は、パイプ演算子と呼ばれます。関数呼び出しをつなげるために使うことができ、前の関数呼び出しが返した値が次の関数呼び出しに渡されます。
"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)
この演習では、高校時代の恋人同士がSNSで愛を告白できるように、二人のイニシャルをあしらった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関数を実装しましょう。2つのフルネームを受け取り、ASCIIのハートの中にイニシャルを入れたものを返します。前のステップで定義したinitialsを再利用しましょう。
pair("Blake Miller", "Riley Lewis")
// -> "
// ****** ******
// ** ** ** **
// ** ** ** **
// ** * **
// ** **
// ** B. M. + R. L. **
// ** **
// ** **
// ** **
// ** **
// ** **
// ** **
// ***
// *
// "