Saya bisa memikirkan setidaknya dua argumen yang mendukung fungsi panjang:
Ini berarti Anda memiliki banyak konteks di sekitar setiap baris. Cara memformalkan ini: menggambar grafik aliran kontrol kode Anda. Pada titik (~ = garis) antara entri fungsi dan keluar fungsi, Anda tahu semua tepi yang masuk. Semakin lama fungsinya, semakin banyak simpul yang ada.
Banyak fungsi kecil berarti ada grafik panggilan yang lebih besar dan lebih kompleks. Pilih garis acak dalam fungsi acak, dan jawab pertanyaan "di konteks manakah baris ini dijalankan?" Ini menjadi lebih sulit dan lebih kompleks grafik panggilan, karena Anda harus melihat lebih banyak simpul dalam grafik itu.
Ada juga argumen yang menentang fungsi panjang — unit-testabilitas muncul dalam pikiran. Gunakan t experienceh̶e one ̶f̶o̶r̶c̶e̶ pengalaman Anda saat memilih antara satu dan yang lainnya.
Catatan: Saya tidak mengatakan bos Anda benar, hanya saja sudut pandangnya mungkin tidak sepenuhnya tanpa nilai.
Saya pikir pandangan saya adalah bahwa parameter optimasi yang baik tidak berfungsi. Saya pikir desiderata lebih berguna untuk berpikir dalam hal adalah sebagai berikut: semua yang lain sama, lebih disukai untuk dapat membaca kode deskripsi tingkat tinggi dari kedua logika bisnis dan implementasinya. (Detail implementasi level rendah selalu dapat dibaca jika Anda dapat menemukan sedikit kode yang relevan.)
Mengomentari jawaban David Arno :
Menulis fungsi kecil itu menyebalkan karena memaksa Anda untuk beralih ke setiap fungsi kecil untuk melihat apa yang dilakukan kode.
Jika fungsinya dinamai dengan baik, ini bukan masalahnya. isApplicationInProduction jelas dan tidak perlu memeriksa kode untuk melihat apa yang dilakukannya. Kenyataannya kebalikannya adalah benar: memeriksa kode mengungkapkan kurang tentang niat daripada nama fungsi tidak (itulah sebabnya bos Anda harus menggunakan komentar)
Nama membuat jelas apa nilai kembali berarti , tetapi mengatakan apa-apa tentang efek mengeksekusi kode (= apa kode tidak ). Nama (hanya) menyampaikan informasi tentang maksud , kode menyampaikan informasi tentang perilaku (dari bagian mana maksud tersebut kadang-kadang dapat disimpulkan).
Terkadang Anda menginginkan satu, kadang-kadang yang lain, sehingga pengamatan ini tidak membuat aturan keputusan yang satu sisi secara universal valid.
Letakkan semuanya dalam loop besar utama bahkan jika loop utama lebih dari 300 baris, lebih cepat dibaca
Mungkin lebih cepat untuk memindai, tetapi untuk benar-benar "membaca" kode, Anda harus dapat secara efektif menjalankannya di kepala Anda. Itu mudah dengan fungsi kecil dan sangat, sangat sulit dengan metode yang panjangnya 100-an.
Saya setuju bahwa Anda harus menjalankannya di kepala Anda. Jika Anda memiliki 500 baris fungsi dalam satu fungsi besar vs. dalam banyak fungsi kecil, tidak jelas bagi saya mengapa ini menjadi lebih mudah.
Misalkan kasus ekstrem 500 baris kode garis lurus sangat berpengaruh, dan Anda ingin tahu apakah efek A terjadi sebelum atau setelah efek B. Dalam kasus fungsi besar, gunakan Page Up / Down untuk menemukan dua baris dan kemudian membandingkan nomor baris. Dalam banyak-fungsi kecil kasus, Anda harus ingat di mana di pohon panggilan efek terjadi, dan jika Anda lupa Anda harus menghabiskan banyak waktu untuk menemukan kembali struktur pohon ini.
Saat melintasi pohon panggilan fungsi pendukung, Anda juga dihadapkan dengan tantangan untuk menentukan kapan Anda beralih dari logika bisnis ke detail implementasi. Saya mengklaim tanpa bukti * bahwa semakin sederhana grafik panggilan, semakin mudah untuk membuat perbedaan ini.
(*) Setidaknya saya jujur tentang hal itu ;-)
Sekali lagi, saya pikir kedua pendekatan memiliki kekuatan dan kelemahan.
Tulis hanya fungsi-fungsi kecil jika Anda harus menggandakan kode
Saya tidak setuju. Seperti yang ditunjukkan oleh contoh kode Anda, fungsi-fungsi kecil dan bernama baik meningkatkan keterbacaan kode dan harus digunakan kapan pun [mis.] Anda tidak tertarik pada "bagaimana", hanya "apa" dari suatu fungsi.
Apakah Anda tertarik pada "bagaimana" atau "apa" adalah fungsi dari tujuan Anda membaca kode (misalnya mendapatkan ide umum vs melacak bug). Tujuan membaca kode tidak tersedia saat menulis program, dan Anda kemungkinan besar akan membaca kode untuk tujuan yang berbeda; keputusan yang berbeda akan dioptimalkan untuk tujuan yang berbeda.
Yang mengatakan, ini adalah bagian dari pandangan bos yang mungkin paling tidak saya setujui.
Jangan menulis fungsi dengan nama komentar, letakkan kode kompleks Anda (3-4 baris) dengan komentar di atas. Seperti ini, Anda dapat memodifikasi kode gagal secara langsung
Saya benar-benar tidak dapat memahami alasan di balik yang satu ini, dengan asumsi itu benar-benar serius. [...] Komentar memiliki kelemahan mendasar: komentar tidak dikompilasi / ditafsirkan sehingga tidak dapat diuji unit. Kode akan diubah dan komentar dibiarkan sendiri dan Anda akhirnya tidak tahu mana yang benar.
Compiler hanya membandingkan nama untuk kesetaraan, mereka tidak pernah memberi Anda MisleadingNameError. Juga, karena beberapa situs panggilan dapat memanggil fungsi yang diberikan berdasarkan nama, kadang-kadang lebih sulit dan rawan kesalahan untuk mengubah nama. Komentar tidak memiliki masalah ini. Namun, ini agak spekulatif; untuk benar-benar menyelesaikan ini, orang mungkin akan membutuhkan data tentang apakah programmer lebih mungkin memperbarui komentar yang menyesatkan vs nama yang menyesatkan, dan saya tidak memilikinya.