Lambda adalah fungsi anonim yang tidak memerlukan nama dan dapat diteruskan sebagai parameter ke fungsi atau metode lain. Topik ini menjelaskan batasan, sintaksis, serta contoh penggunaan fungsi lambda.
Ekspresi lambda merupakan fungsi anonim yang dapat digunakan sebagai parameter dalam fungsi atau metode lain. Ekspresi ini memungkinkan penerapan transformasi dan filter tingkat elemen pada array serta struktur data kompleks secara inline, tanpa perlu mendefinisikan fungsi bernama.
Sintaksis
parameter_list -> expression
Daftar parameter dapat kosong atau berisi satu atau beberapa parameter. Gunakan tanda kurung apabila terdapat beberapa parameter. Pembatas -> memisahkan daftar parameter dari ekspresi atau blok kode. Jenis parameter ditentukan oleh fungsi yang memanggilnya.
Batasan
-
Subquery tidak didukung. Contohnya,
x -> 2 + (SELECT 3)tidak valid. -
Operasi agregat tidak didukung. Contohnya,
x -> max(y)tidak valid.
Contoh
Semua contoh berikut menggunakan fungsi transform(), yaitu fungsi orde tinggi yang menerapkan ekspresi lambda ke setiap elemen array.
Kuadratkan setiap elemen dalam array
SELECT numbers, transform(numbers, n -> n * n) AS squared_numbers
FROM (
VALUES (ARRAY(1, 2)), (ARRAY(3, 4)), (ARRAY(5, 6, 7))
) AS t(numbers);
Hasil:
+------------+-----------------+
| numbers | squared_numbers |
+------------+-----------------+
| [5,6,7] | [25,36,49] |
| [3,4] | [9,16] |
| [1,2] | [1,4] |
+------------+-----------------+
Format elemen array sebagai string harga
Ekspresi lambda mengonversi setiap bilangan bulat menjadi string dan menambahkan simbol mata uang.
SELECT transform(prices, n -> CAST(n AS STRING) || '$') AS price_tags
FROM (
VALUES (ARRAY(100, 200)), (ARRAY(30, 4))
) AS t(prices);
Hasil:
+-----------------+
| price_tags |
+-----------------+
| ["100$","200$"] |
| ["30$","4$"] |
+-----------------+
Evaluasi fungsi linear pada array
Selain kolom array yang sedang ditransformasi, ekspresi lambda juga dapat mereferensikan kolom lain dari baris yang sama. Contoh ini mengevaluasi f(x) = ax + b untuk setiap elemen.
SELECT xvalues, a, b,
transform(xvalues, x -> a * x + b) AS linear_function_values
FROM (
VALUES (ARRAY(1, 2), 10, 5), (ARRAY(3, 4), 4, 2)
) AS t(xvalues, a, b);
Hasil:
+---------+----+---+------------------------+
| xvalues | a | b | linear_function_values |
+---------+----+---+------------------------+
| [3,4] | 4 | 2 | [14,18] |
| [1,2] | 10 | 5 | [15,25] |
+---------+----+---+------------------------+