Konvensi penamaan untuk fungsi tingkat tinggi? [Tutup]

15

Apakah ada konvensi penamaan untuk fungsi-fungsi tingkat tinggi? Yaitu, fungsi yang mengembalikan fungsi lainnya.

Contoh dalam Javascript:

function onlyDivisibleBy(div) { // <-- higher order function
  return function (n) {
    return n % div === 0;
  }
}

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9]
arr.filter(onlyDivisibleBy(5)); // [0, 5]

Saya cenderung menulisnya seperti di atas: yaitu, mengoptimalkan keterbacaan pada titik doa (saya akan membaca baris terakhir di atas sebagai "filter array untuk mendapatkan barang yang hanya dapat dibagi 5"), namun pada titik definisi pergi dari konteks di mana ia digunakan, tidak begitu mudah untuk memahami apa fungsi ini dari namanya.

nickf
sumber
4
Itu mengejutkan, saya selalu mengerti istilah "fungsi tingkat tinggi" berarti fungsi yang menerima fungsi lain sebagai argumen. Saya tidak mengatakan Anda salah, saya hanya menemukan perbedaan dalam pengertian kami menarik.
Racheet
6
Fungsi @Racheet yang mengembalikan fungsi juga urutan lebih tinggi. Mereka dapat melakukan keduanya.
itsbruce
3
@Racheet itu poin yang bagus dan cukup relevan dengan contoh ini: apa yang sebenarnya diterapkan OP adalah aplikasi parsial. Banyak (semua? Tidak yakin) menggunakan fungsi yang dikembalikan dapat dilihat sebagai aplikasi parsial. @ nickf: inilah cara yang lebih bersih untuk menerapkan contoh Anda

Jawaban:

14

Tidak, saya rasa Anda tidak perlu konvensi penamaan khusus untuk menunjukkan Anda mengembalikan fungsi. Seperti yang dapat kita lihat dari bahasa-bahasa di mana fungsi-fungsi digulung , mengembalikan fungsi pada dasarnya sama dengan memiliki fungsi dengan banyak argumen. misalnya ada sedikit perbedaan antara onlyDivisibleBy(3)(6)danonlyDivisibleBy(3,6)

Saya akan mengubah nama dari onlyDivisibleBymenjadi isDivisibleBykarena saya pikir isadalah cara yang lebih umum untuk menunjukkan predikat dan onlyDivisibleBy(3)(6)tampaknya aneh untuk kembali truemengingat bahwa 6 jelas juga dapat dibagi 2.

jk.
sumber
5

Dalam bahasa fungsional yang sangat diketik, jelas dari tanda tangan fungsi apa yang merupakan fungsi tingkat tinggi dan apa yang tidak, jadi tidak perlu.

Dalam bahasa lain, saya tidak pernah menemukan konvensi penamaan seperti itu dan saya tidak bisa memikirkan yang tidak praktis. Lebih baik berkonsentrasi pada fungsi penamaan dengan baik daripada membebani nama-nama seperti itu, saya pikir.

itu otaknya
sumber
4

Tidak, dan Anda tidak boleh menggunakannya.

Mengapa?

Karena itu akan menjadi semacam notasi Hongaria . Idenya adalah persis bahwa fungsi yang diteruskan ke fungsi tingkat tinggi hanyalah semacam variabel. Jadi perlakukan mereka seperti itu.

Wilbert
sumber
1
Implikasinya adalah bahwa notasi Hungaria harus dihindari dengan cara apa pun? Saya akan merekomendasikan membaca Making Wrong Code Look Wrong
TehShrike
4
Saya pernah membaca itu sebelumnya, dan saya masih percaya notasi Hongaria itu buruk :)
Wilbert
@TehShrike Tautan Anda rusak.
corvus_192
1
@ corvus_192 pasti tersesat dalam desain ulang blog Joel! Url baru tampaknya joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong
TehShrike