Untuk bahasa yang mendukung kari dan aplikasi parsial dengan mudah, ada satu rangkaian argumen yang menarik, yang berasal dari Chris Okasaki:
- Letakkan struktur data sebagai argumen terakhir
Mengapa? Anda kemudian dapat membuat operasi pada data dengan baik. Mis insert 1 $ insert 2 $ insert 3 $ s
. Ini juga membantu untuk fungsi di negara bagian .
Pustaka standar seperti "kontainer" mengikuti konvensi ini .
Argumen alternatif terkadang diberikan untuk meletakkan struktur data terlebih dahulu, sehingga dapat ditutup, menghasilkan fungsi pada struktur statis (misalnya pencarian) yang sedikit lebih ringkas. Namun, konsensus umum tampaknya adalah bahwa ini kurang menguntungkan, terutama karena ini mendorong Anda ke kode yang diberi tanda kurung.
- Letakkan argumen yang paling beragam di akhir
Untuk fungsi rekursif, biasanya meletakkan argumen yang paling bervariasi (misalnya akumulator) sebagai argumen terakhir, sedangkan argumen yang paling sedikit bervariasi (misalnya argumen fungsi) di awal. Ini cocok dengan gaya terakhir struktur data.
Ringkasan tampilan Okasaki diberikan di pustaka Edison miliknya (sekali lagi, pustaka struktur data lain):
- Penerapan parsial : argumen yang lebih cenderung statis biasanya muncul sebelum argumen lain untuk memfasilitasi penerapan parsial.
- Koleksi muncul terakhir : dalam semua kasus di mana operasi meminta satu koleksi atau mengubah koleksi yang ada, argumen collection akan muncul terakhir. Ini adalah semacam standar de facto untuk pustaka struktur data Haskell dan memberikan tingkat konsistensi ke API.
- Urutan paling umum : di mana operasi merepresentasikan fungsi matematika terkenal pada lebih dari satu struktur data, argumen dipilih untuk mencocokkan urutan argumen yang paling umum untuk fungsi tersebut.
Tempatkan argumen yang kemungkinan besar akan Anda gunakan kembali terlebih dahulu. Argumen fungsi adalah contoh yang bagus untuk ini. Anda lebih cenderung ingin
map f
lebih dari dua daftar yang berbeda, daripada Anda ingin memetakan banyak fungsi yang berbeda di atas daftar yang sama.sumber
map ($myList)
lebih dari daftar itu.Saya cenderung melakukan apa yang Anda lakukan, memilih beberapa pesanan yang tampaknya bagus dan kemudian melakukan refactor jika ternyata pesanan lain lebih baik. Urutannya sangat bergantung pada bagaimana Anda akan menggunakan fungsi (secara alami).
sumber