Metode chaining dalam bahasa berorientasi objek sedikit berbeda dari currying. Menurut definisi , hasil currying adalah bentuk yang lebih terbatas dari fungsi aslinya . Dengan konvensi , hasil dari metode chaining adalah bentuk modifikasi dari aslinya (biasanya non-fungsi) objek . Metode chaining dapat digunakan dengan metode yang tidak terkait pada kelas yang sama, sedangkan currying melibatkan mengembalikan fungsi di mana satu atau lebih parameter fungsi asli diperbaiki (ditentukan sebelumnya).
Di Jawa, metode chaining seperti:
String myString = new StringBuilder("Hi ").append(firstName)
.append(" ")
.append(lastName)
.append("!")
.toString();
Jadi, masing-masing panggilan metode .append () mengembalikan pointer ke objek StringBuilder anonim. Objek ini selesai setelah masing-masing. Append (), dan itu bukan fungsi.
Sebaliknya, dalam Scala, aplikasi sebagian atau currying seperti:
def simple(x:Int, y:Int, z:Int) = x * (y + z)
val simpler = simple(2, _:Int, _:Int)
simpler(3, 4) => 14
(Sampel diambil dari blog Daniel Yankowsky )
simpler()
dalam contoh ini adalah fungsi wrapper untuk simple()
. simpler()
masih merupakan fungsi yang membutuhkan lebih banyak parameter sebelum dapat mengevaluasi apa pun kecuali versi yang lebih terbatas.
EDIT: Membaca ini sehari kemudian, saya pikir "fungsi wrapper" adalah kuncinya. Aplikasi kari atau parsial mungkin paling baik disimulasikan di Jawa dengan metode wrapper.
public interface Simpler {
public int apply(int y, int z);
}
public class Simple {
public int apply(int x, int y, int z) { return x * (y + z); }
public Simpler partiallyApply(final int x) {
final simple = this;
return new Simpler() {
@Override
public int apply(int y, int z) {
// x is the final int parameter to partiallyApply()
simple.apply(x, y, z);
}
}
}
}
: AKHIR-EDIT
Metode chaining dapat mirip dengan aplikasi parsial atau currying, tetapi hanya bisa setara dengan metode yang mengembalikan metode lain (mencari Functors), dan kemudian metode perlu diatur dengan tipe-tipe return yang berarti memodelkan currying atau aplikasi parsial.
Metode chaining lebih sering digunakan untuk mengimplementasikan sesuatu seperti evaluasi malas, seperti yang dilakukan dengan pola desain "Builder" dan antarmuka Perpustakaan Koleksi baru di Jawa 8 .
Saya harap itu membantu.
toString()
panggilan, apakah kita tidak secara efektif meniru maksud menjelajah panggilan kita? Saya hanya mencoba untuk mendapatkan konsep currying in OO straight.append(charSeq)
fungsinya adalah bentuk kari dariinsert(destOffset, charSeq)
fungsi di manadestOffset
selalu panjang StringBuilder.