Saya tahu itu obj.func1().func2()
disebut metode chaining, tetapi apa istilah teknis untuk:
func1(func2(), func3());
Di mana pengembalian fungsi digunakan sebagai argumen ke yang lain.
terminology
zhenka
sumber
sumber
obj.func1().func2() is called method chaining
- Koreksi: Ini disebut kecelakaan kereta.obj.func1()
selalu mengembalikan objek yang memilikifunc2()
fungsi anggota.Jawaban:
Saya tidak berpikir itu komposisi fungsi. Komposisi fungsi berarti mengambil dua fungsi atau lebih dan mengubahnya menjadi fungsi baru, seperti
f . g . h
di Haskell. Perhatikan bahwa tidak ada fungsi yang dipanggil saat ini.Secara pribadi, saya akan merujuk ke konstruksi seperti
func1(func2(), func3())
sebagai "panggilan fungsi bersarang".sumber
f(g())
lakukan adalah memanggilf()
dengan ekspresi untuk argumen pertama, dan itu terjadi pemanggilan fungsig()
memenuhi syarat sebagai ekspresi. Tetapi jika harus ada nama untuk itu, ini sedekat yang didapat.Dalam matematika, ini disebut komposisi fungsi . Saya pikir saya belum pernah mendengar istilah yang diterapkan pada pemrograman. Itu mungkin karena penggunaannya sebagian besar dihindari karena beberapa alasan. Itu dapat memperkenalkan bug aneh ketika fungsi memiliki efek samping, karena kompiler bebas untuk mengevaluasi func3 sebelum func2. Lebih sulit untuk di-debug karena Anda tidak dapat mengaktifkan breakpoints atau mencetak hasil-hasil antara, dan kebanyakan orang merasa kesulitan untuk membaca.
sumber
printf("%d %d\n", strlen(a), strlen(b));
daripada menggunakan variabel perantara.func1(func2(func3(x)))
. Atau teknis, mengacu pada fungsi sendiri: jikag(x) = f1(f2(f3(x)))
, makag
( tidakg(x)
) adalah komposisif1
,f2
danf3
. Sementara saya bisa melihat cara di mana Anda bisa menyebut struktur dalam pertanyaan "komposisi fungsi," itu menurut saya penggunaan istilah yang sangat tidak biasa, dalam pengertian matematika.Seperti @Karl Bielefeldt tunjukkan, itu disebut komposisi fungsi dalam Matematika.
Tidak ada istilah teknis untuk pemrograman ini. Dan saya pikir ini adalah hal yang baik, karena itu menunjukkan bahwa operasi itu normal dan orthogonal .
Orthogonality dalam bahasa pemrograman berarti bahwa Anda dapat menggunakan instruksi / operasi yang terlepas dari konteksnya . Misalnya, Anda dapat memanggil fungsi / metode dalam semua cara berikut, dan itu akan berperilaku sama ...
Anda dapat membaca lebih lanjut tentang Orthogonality dalam Pemrograman di Wikipedia , dan ada pertanyaan tentang StackOverflow tentang ini.
sumber
Saya benar-benar tidak begitu mahir dengan istilah-istilah, tetapi saya baru saja membaca sebuah artikel beberapa hari yang lalu yang merujuk pada istilah fungsi-fungsi Tingkat Tinggi , dan inilah abstrak definisi per Wikipedia:
http://en.wikipedia.org/wiki/Higher-order_function
jadi dalam kasus ini, karena skenario itu memang mengambil setidaknya satu fungsi sebagai input / param, itu akan dianggap sebagai fungsi urutan yang lebih tinggi, saya percaya.
sumber
func1(func2, func3)
. Perhatikan tanda kurung yang tidak ada.