به عملگر |> عملگر پایپ میگویند. میتوان با آن فراخوانی توابع را به هم زنجیره کرد، به این شکل که مقدار برگرداندهشده از فراخوانی تابع پیشین به فراخوانی تابع بعدی فرستاده میشود.
"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. **
// ** **
// ** **
// ** **
// ** **
// ** **
// ** **
// ***
// *
// "