Jika Anda melihat IntFunction
mungkin menjadi lebih jelas: IntFunction<R>
adalah a FunctionalInterface
. Ini mewakili fungsi yang mengambil int
dan mengembalikan nilai tipe R
.
Dalam hal ini, tipe kembaliannya R
juga a FunctionalInterface
, yaitu IntUnaryOperator
. Jadi yang pertama (luar) itu sendiri mengembalikan fungsi.
Dalam hal ini: Ketika diterapkan ke int
, curriedAdd
diharapkan untuk mengembalikan fungsi yang lagi mengambil int
(dan kembali lagi int
, karena itulah IntUnaryOperator
).
Dalam pemrograman fungsional, adalah umum untuk menulis jenis fungsi sebagai param -> return_value
dan Anda melihatnya persis di sini. Jadi jenisnya curriedAdd
adalah int -> int -> int
(atau int -> (int -> int)
jika Anda menyukainya lebih baik).
Sintaks lambda Java 8 sejalan dengan ini. Untuk mendefinisikan fungsi seperti itu, Anda menulis
a -> b -> a + b
yang sangat mirip dengan kalkulus lambda sebenarnya:
λa λb a + b
λb a + b
adalah fungsi yang mengambil satu parameter b
dan mengembalikan nilai (jumlah). λa λb a + b
adalah fungsi yang menerima satu parameter a
dan mengembalikan fungsi lain dari satu parameter. λa λb a + b
kembali λb a + b
dengan a
set ke nilai parameter.