Beberapa waktu yang lalu saya ditegur oleh Simon Urbanek dari tim inti R (saya percaya) karena merekomendasikan pengguna untuk secara eksplisit menelepon return
di akhir fungsi (komentarnya sudah dihapus):
foo = function() {
return(value)
}
sebaliknya dia merekomendasikan:
foo = function() {
value
}
Mungkin dalam situasi seperti ini diperlukan:
foo = function() {
if(a) {
return(a)
} else {
return(b)
}
}
Komentarnya menjelaskan mengapa tidak menelepon return
kecuali sangat dibutuhkan adalah hal yang baik, tetapi ini telah dihapus.
Pertanyaan saya adalah: Mengapa tidak menelepon return
lebih cepat atau lebih baik, dan karenanya lebih disukai?
return
tidak perlu bahkan dalam contoh terakhir. Menghapusreturn
mungkin membuatnya sedikit lebih cepat, tetapi dalam pandangan saya ini karena R dikatakan sebagai bahasa pemrograman fungsional.return
menginduksi lompatan non-lokal, dan lompatan non-lokal eksplisit tidak biasa untuk FP. Sebenarnya, misalnya, skema tidak punyareturn
. Saya pikir komentar saya terlalu pendek (dan mungkin salah) sebagai jawaban.return
,break
,continue
baik, yang kadang-kadang membosankan.Jawaban:
Pertanyaannya adalah: Mengapa tidak (secara eksplisit) menelepon kembali lebih cepat atau lebih baik, dan karenanya lebih disukai?
Tidak ada pernyataan dalam dokumentasi R yang membuat asumsi seperti itu.
Halaman utama? 'Function' mengatakan:
Apakah lebih cepat tanpa menelepon kembali?
Keduanya
function()
danreturn()
merupakan fungsi primitif danfunction()
itu sendiri mengembalikan nilai yang dievaluasi terakhir bahkan tanpa menyertakanreturn()
fungsi.Memanggil
return()
sebagai.Primitive('return')
dengan itu nilai terakhir sebagai argumen akan melakukan pekerjaan yang sama tetapi membutuhkan satu panggilan lagi. Sehingga.Primitive('return')
panggilan ini (seringkali) tidak perlu dapat menarik sumber daya tambahan. Namun pengukuran sederhana menunjukkan bahwa perbedaan yang dihasilkan sangat kecil dan karenanya tidak dapat menjadi alasan untuk tidak menggunakan pengembalian eksplisit. Plot berikut dibuat dari data yang dipilih dengan cara ini:Gambar di atas mungkin sedikit berbeda pada platform Anda. Berdasarkan data yang diukur, ukuran objek yang dikembalikan tidak menyebabkan perbedaan, jumlah pengulangan (bahkan jika ditingkatkan) membuat perbedaan yang sangat kecil, yang dalam kata nyata dengan data nyata dan algoritma nyata tidak dapat dihitung atau membuat Anda skrip berjalan lebih cepat.
Apakah lebih baik tanpa menelepon kembali?
Return
adalah alat yang baik untuk secara jelas merancang "daun" kode di mana rutin harus berakhir, keluar dari fungsi dan mengembalikan nilai.Itu tergantung pada strategi dan gaya pemrograman programmer gaya apa yang dia gunakan, dia tidak dapat menggunakan return () karena tidak diperlukan.
Pemrogram inti R menggunakan kedua pendekatan tersebut yaitu. dengan dan tanpa pengembalian eksplisit () karena dimungkinkan untuk menemukan di sumber fungsi 'basis'.
Berkali-kali hanya return () digunakan (tidak ada argumen) mengembalikan NULL dalam kasus untuk menghentikan fungsi secara kondisional.
Tidak jelas apakah lebih baik atau tidak sebagai pengguna standar atau analis yang menggunakan R tidak dapat melihat perbedaan nyata.
Pendapat saya adalah bahwa pertanyaannya seharusnya: Apakah ada bahaya dalam menggunakan pengembalian eksplisit yang berasal dari implementasi R?
Atau, mungkin lebih baik, pengguna menulis kode fungsi harus selalu bertanya: Apa efek tidak menggunakan pengembalian eksplisit (atau menempatkan objek untuk dikembalikan sebagai daun terakhir dari cabang kode) dalam kode fungsi?
sumber
return
, dan itu tergantung pada preferensi programmer apakah akan menggunakannya atau tidak.return
adalah hal terakhir yang harus Anda khawatirkan.return
panggilan fungsi yang tidak perlu . Pertanyaan yang harus Anda ajukan bukanlah pertanyaan yang Anda ajukan pada akhirnya. Alih-alih, ini: “mengapa saya harus menggunakan redundanreturn
? Manfaat apa yang diberikannya? ” Ternyata, jawabannya adalah "tidak banyak", atau bahkan "tidak sama sekali". Balasan Anda gagal menghargai ini.return
adalah seperti komentar eksplisit yang mengatakan “increment x by 1”, di sebelah kode yang dikerjakanx = x + 2
. Dengan kata lain, kesaksiannya adalah (a) sama sekali tidak relevan, dan (b) itu menyampaikan informasi yang salah . Karenareturn
semantik dalam R adalah, murni, "batalkan fungsi ini". Itu tidak berarti sama denganreturn
di bahasa lain.Jika semua orang setuju itu
return
tidak perlu di akhir fungsi tubuhreturn
sedikit lebih cepat (menurut uji @ Alan, 4,3 mikrodetik versus 5.1)haruskah kita semua berhenti menggunakan
return
di akhir fungsi? Saya tentu tidak mau, dan saya ingin menjelaskan alasannya. Saya berharap mendengar jika orang lain membagikan pendapat saya. Dan saya minta maaf jika ini bukan jawaban langsung untuk OP, tetapi lebih seperti komentar subyektif yang panjang.Masalah utama saya dengan tidak menggunakan
return
adalah bahwa, seperti yang ditunjukkan Paul, ada tempat lain di tubuh fungsi di mana Anda mungkin membutuhkannya. Dan jika Anda terpaksa menggunakanreturn
suatu tempat di tengah fungsi Anda, mengapa tidak membuat semuanyareturn
pernyataan eksplisit? Aku benci menjadi tidak konsisten. Saya juga berpikir bahwa kode membaca lebih baik; seseorang dapat memindai fungsi dan dengan mudah melihat semua titik keluar dan nilai-nilai.Paulus menggunakan contoh ini:
Sayangnya, orang dapat menunjukkan bahwa itu dapat dengan mudah ditulis ulang sebagai:
Versi terakhir bahkan sesuai dengan beberapa standar pemrograman kode yang menganjurkan satu pernyataan kembali per fungsi. Saya pikir contoh yang lebih baik adalah:
Ini akan jauh lebih sulit untuk ditulis ulang menggunakan pernyataan pengembalian tunggal: itu akan membutuhkan banyak
break
s dan sistem variabel boolean yang rumit untuk menyebarkannya. Semua ini untuk mengatakan bahwa aturan pengembalian tunggal tidak cocok dengan R. Jadi jika Anda perlu menggunakannyareturn
di beberapa tempat di tubuh fungsi Anda, mengapa tidak konsisten dan menggunakannya di mana-mana?Saya tidak berpikir argumen kecepatan itu valid. Perbedaan 0,8 mikrodetik tidak ada artinya ketika Anda mulai melihat fungsi yang benar-benar melakukan sesuatu. Hal terakhir yang bisa saya lihat adalah kurang mengetik tapi hei, saya tidak malas.
sumber
return
pernyataan dalam beberapa kasus, seperti yang ditunjukkan @flodel. Atau, ada situasi di mana pernyataan kembali dihilangkan, misalnya banyak dan banyak panggilan fungsi kecil. Dalam semua yang lain, katakanlah 95%, dari kasus-kasus itu tidak terlalu penting apakah seseorang menggunakanreturn
atau tidak, dan itu menjadi pilihan. Saya suka menggunakan return karena lebih eksplisit dalam apa yang Anda maksud, sehingga lebih mudah dibaca. Mungkin diskusi ini mirip dengan<-
vs=
?return
untuk mengembalikan nilai tidak masuk akal, setara dengan menulis,if (x == TRUE)
bukanif (x)
.foo
sesuaifoo <- function(x) if (a) a else b
(dengan linebreaks sesuai kebutuhan). Tidak perlu untuk pengembalian eksplisit atau nilai menengah.Ini diskusi yang menarik. Saya pikir contoh @ flodel sangat bagus. Namun, saya pikir ini mengilustrasikan poin saya (dan @koshke menyebutkan ini dalam komentar) yang
return
masuk akal ketika Anda menggunakan imperatif alih-alih gaya pengkodean fungsional .Bukan untuk mempercayai intinya, tetapi saya akan menulis ulang
foo
seperti ini:Gaya fungsional menghindari perubahan status, seperti menyimpan nilai
output
. Dalam gaya ini,return
tidak pada tempatnya;foo
lebih mirip fungsi matematika.Saya setuju dengan @flodel: menggunakan sistem variabel boolean yang rumit di
bar
akan menjadi kurang jelas, dan tidak ada gunanya saat Anda memilikinyareturn
. Apa yang membuatnyabar
begitu menerimareturn
pernyataan adalah bahwa itu ditulis dalam gaya imperatif. Memang, variabel boolean mewakili perubahan "negara" yang dihindari dengan gaya fungsional.Sangat sulit untuk menulis ulang
bar
dengan gaya fungsional, karena ini hanya pseudocode, tetapi idenya adalah seperti ini:The
while
Loop akan menjadi yang paling sulit untuk menulis ulang, karena dikendalikan oleh negara perubahan kea
.Kehilangan kecepatan yang disebabkan oleh panggilan ke
return
diabaikan, tetapi efisiensi yang diperoleh dengan menghindarireturn
dan menulis ulang dengan gaya fungsional sering kali sangat besar. Memberitahu pengguna baru untuk berhenti menggunakanreturn
mungkin tidak akan membantu, tetapi membimbing mereka ke gaya fungsional akan memberikan hasil.@ Paul
return
diperlukan dalam gaya imperatif karena Anda sering ingin keluar dari fungsi pada titik yang berbeda dalam satu lingkaran. Gaya fungsional tidak menggunakan loop, dan karenanya tidak perlureturn
. Dalam gaya fungsional murni, panggilan terakhir hampir selalu merupakan nilai pengembalian yang diinginkan.Dalam Python, fungsi membutuhkan
return
pernyataan. Namun, jika Anda memprogram fungsi Anda dalam gaya fungsional, kemungkinan Anda hanya akan memiliki satureturn
pernyataan: di akhir fungsi Anda.Menggunakan contoh dari posting StackOverflow lain, katakanlah kita menginginkan fungsi yang mengembalikan
TRUE
jika semua nilai dalam suatu diberix
memiliki panjang ganjil. Kita bisa menggunakan dua gaya:Dalam gaya fungsional, nilai yang akan dikembalikan secara alami jatuh di ujung fungsi. Sekali lagi, ini lebih mirip fungsi matematika.
@GSee Peringatan yang diuraikan dalam
?ifelse
pasti menarik, tapi saya tidak berpikir mereka mencoba untuk menghalangi penggunaan fungsi. Bahkan,ifelse
memiliki keunggulan fungsi vectorizing secara otomatis. Misalnya, pertimbangkan versi yang sedikit dimodifikasifoo
:Fungsi ini berfungsi dengan baik ketika
length(a)
1. Tetapi jika Anda menulis ulangfoo
denganifelse
Sekarang
foo
bekerja pada ukuran berapa puna
. Bahkan, itu akan berfungsi ketikaa
matriks. Mengembalikan nilai dengan bentuk yang samatest
dengan fitur yang membantu vektorisasi, bukan masalah.sumber
return
tidak cocok dengan gaya pemrograman fungsional. Jika seseorang memprogram secara imperatif atau fungsional, pada tahap tertentu suatu fungsi atau subrutin perlu mengembalikan sesuatu. Sebagai contoh, pemrograman fungsional dalam python masih membutuhkanreturn
pernyataan. Bisakah Anda menguraikan lebih lanjut tentang hal ini.ifelse(a,a,b)
adalah hewan peliharaan saya kesal. Sepertinya setiap baris?ifelse
berteriak, "jangan gunakan aku, bukanif (a) {a} else b
." mis. "... mengembalikan nilai dengan bentuk yang sama dengantest
", "jikayes
atauno
terlalu pendek, elemen-elemennya didaur ulang.", "mode hasil mungkin tergantung pada nilaitest
", "atribut kelas dari hasil diambil daritest
dan mungkin tidak sesuai untuk nilai yang dipilih dariyes
danno
"foo
tidak masuk akal; itu akan selalu mengembalikan BENAR ataub
. Menggunakannyaifelse
akan mengembalikan 1 atau beberapa TRUE, dan / atau 1 atau beberapab
s. Awalnya, saya pikir maksud dari fungsi itu adalah untuk mengatakan "jika beberapa pernyataan BENAR, kembalikan sesuatu, jika tidak, kembalikan sesuatu yang lain." Saya tidak berpikir itu harus di-vektor-kan, karena dengan begitu akan menjadi "kembalikan elemen-elemen dari beberapa objek yang BENAR, dan untuk semua elemen yang tidak BENAR, kembalikanb
.Tampaknya tanpa
return()
itu lebih cepat ...____ EDIT__ _ __ _ __ _ __ _ __ _ ___
Saya melanjutkan ke tolok ukur orang lain (
benchmark(fuu(x),foo(x),replications=1e7)
) dan hasilnya terbalik ... Saya akan mencoba di server.sumber
return()
, satu jika Anda tidak. Ini benar-benar berlebihan pada akhir fungsi karenafunction()
mengembalikan nilai terakhirnya. Anda hanya akan memperhatikan hal ini dalam banyak pengulangan fungsi di mana tidak banyak yang dilakukan secara internal sehingga biayareturn()
menjadi bagian besar dari total waktu komputasi fungsi.Masalah dengan tidak menempatkan 'kembali' secara eksplisit di akhir adalah bahwa jika seseorang menambahkan pernyataan tambahan di akhir metode, tiba-tiba nilai kembali salah:
Ini mengembalikan nilai
dosomething()
.Sekarang kami datang keesokan harinya dan menambahkan baris baru:
Kami ingin kode kami mengembalikan nilai
dosomething()
, tetapi sebaliknya tidak lagi.Dengan pengembalian eksplisit, ini menjadi sangat jelas:
Kita dapat melihat bahwa ada sesuatu yang aneh dengan kode ini, dan memperbaikinya:
sumber
return
bukanlah jalan pintas, itu gaya yang tepat dalam pemrograman fungsional. Menggunakanreturn
panggilan fungsi yang tidak perlu adalah contoh pemrograman pemujaan kargo .return
pernyataan Anda dan tidak menyadari bahwa itu tidak akan dieksekusi. Anda bisa menambahkan komentar setelah nilai yang ingin Anda kembalikan misalnyadosomething() # this is my return value, don't add anything after it unless you know goddam well what you are doing
Ini lebih cepat karena
return
merupakan fungsi (primitif) dalam R, yang berarti bahwa menggunakannya dalam kode menimbulkan biaya pemanggilan fungsi. Bandingkan ini dengan sebagian besar bahasa pemrograman lain, di manareturn
kata kunci, tetapi bukan panggilan fungsi: ini tidak diterjemahkan ke setiap eksekusi kode runtime.Yang mengatakan, memanggil fungsi primitif dengan cara ini cukup cepat di R, dan memanggil
return
menimbulkan overhead yang sangat kecil. Ini bukan argumen untuk menghilangkanreturn
.Karena tidak ada alasan untuk menggunakannya.
Karena itu berlebihan, dan itu tidak menambahkan redudansi yang berguna .
Untuk menjadi jelas: redundansi dapat kadang-kadang berguna . Tetapi kebanyakan redundansi tidak seperti ini. Alih-alih, itu adalah jenis yang menambahkan kekacauan visual tanpa menambahkan informasi: itu adalah pemrograman yang setara dengan kata pengisi atau bagan sampah ).
Pertimbangkan contoh komentar penjelasan berikut, yang secara universal diakui sebagai redundansi buruk karena komentar tersebut hanya memparafrasekan apa yang sudah diungkapkan oleh kode:
Menggunakan
return
dalam R jatuh dalam kategori yang sama, karena R adalah bahasa pemrograman fungsional , dan dalam R setiap panggilan fungsi memiliki nilai . Ini adalah properti fundamental dari R. Dan begitu Anda melihat kode R dari perspektif bahwa setiap ekspresi (termasuk setiap panggilan fungsi) memiliki nilai, pertanyaannya kemudian menjadi: "mengapa saya harus menggunakanreturn
?" Perlu ada alasan positif, karena standarnya bukan untuk menggunakannya.Salah satu alasan positif tersebut adalah untuk memberi sinyal keluar awal dari suatu fungsi, misalnya dalam klausa penjaga :
Ini adalah, valid penggunaan non-berlebihan dari
return
. Namun, klausa penjaga seperti itu jarang di R dibandingkan dengan bahasa lain, dan karena setiap ekspresi memiliki nilai, regulerif
tidak memerlukanreturn
:Kami bahkan dapat menulis ulang
f
seperti ini:... dimana
if (cond) expr
sama denganif (cond) expr else NULL
.Akhirnya, saya ingin mencegah tiga keberatan umum:
Beberapa orang berpendapat bahwa menggunakan
return
menambahkan kejelasan, karena ini menandakan "fungsi ini mengembalikan nilai". Tetapi seperti yang dijelaskan di atas, setiap fungsi mengembalikan sesuatu dalam R. Berpikirreturn
sebagai penanda untuk mengembalikan nilai tidak hanya berlebihan, secara aktif menyesatkan .Terkait, Zen Python memiliki pedoman luar biasa yang harus selalu diikuti:
Bagaimana menjatuhkan berlebihan
return
tidak melanggar ini? Karena nilai pengembalian fungsi dalam bahasa fungsional selalu eksplisit: itu adalah ekspresi terakhirnya. Lagi-lagi ini argumen yang sama tentang explicitness vs redundancy.Faktanya, jika Anda ingin saksi mata, gunakan itu untuk menyorot pengecualian pada aturan: tandai fungsi yang tidak mengembalikan nilai bermakna, yang hanya dipanggil untuk efek sampingnya (seperti
cat
). Kecuali R memiliki penanda yang lebih baik daripadareturn
untuk kasus ini:invisible
. Sebagai contoh, saya akan menulisTapi bagaimana dengan fungsi yang panjang? Tidakkah mudah kehilangan jejak apa yang dikembalikan?
Dua jawaban: pertama, tidak juga. Aturannya jelas: ekspresi terakhir dari suatu fungsi adalah nilainya. Tidak ada yang perlu dilacak.
Tetapi yang lebih penting, masalah dalam fungsi yang panjang bukanlah kurangnya
return
penanda eksplisit . Itu panjang fungsinya . Fungsi panjang hampir (?) Selalu melanggar prinsip tanggung jawab tunggal dan bahkan jika tidak, mereka akan mendapat manfaat dari dipisahkan untuk dibaca.sumber
return
agar lebih mirip dengan bahasa lain. Tapi itu argumen yang buruk: bahasa pemrograman fungsional lainnya cenderung tidak menggunakanreturn
keduanya. Ini hanya bahasa imperatif , di mana tidak setiap ekspresi memiliki nilai, yang menggunakannya.return
dukungan secara eksplisit lebih baik, dan membaca jawaban Anda dengan kritik penuh. Jawaban Anda telah membuat saya merenungkan pandangan itu. Saya berpikir bahwa kebutuhan untuk menggunakanreturn
secara eksplisit (setidaknya dalam kasus saya sendiri), terkait dengan kebutuhan untuk dapat lebih baik untuk merevisi fungsi saya di titik waktu kemudian. Dengan gagasan bahwa fungsi saya mungkin terlalu kompleks, saya sekarang dapat melihat bahwa tujuan untuk meningkatkan gaya pemrograman saya, adalah berusaha untuk menyusun kode untuk mempertahankan kejelasan tanpa areturn
. Terima kasih atas refleksi dan wawasan itu !!Saya anggap
return
sebagai trik. Sebagai aturan umum, nilai ekspresi terakhir yang dievaluasi dalam suatu fungsi menjadi nilai fungsi - dan pola umum ini ditemukan di banyak tempat. Semua yang berikut ini dievaluasi menjadi 3:Apa
return
yang tidak benar-benar mengembalikan nilai (ini dilakukan dengan atau tanpa itu) tetapi "keluar" dari fungsi dengan cara yang tidak teratur. Dalam hal itu, itu adalah setara dengan pernyataan GOTO terdekat dalam R (ada juga break dan next). Saya menggunakanreturn
sangat jarang dan tidak pernah di akhir fungsi.... ini dapat ditulis ulang karena
if(a) a else b
lebih mudah dibaca dan tidak terlalu keriting. Tidak perlureturn
sama sekali di sini. Kasus prototipikal saya tentang penggunaan "pengembalian" akan menjadi seperti ...Secara umum, kebutuhan akan banyak pengembalian menunjukkan bahwa masalahnya buruk atau terstruktur dengan buruk
<>
return
tidak benar-benar membutuhkan fungsi untuk bekerja: Anda dapat menggunakannya untuk keluar dari rangkaian ekspresi yang akan dievaluasi.sumber
return
(contoh jelek saya di atas sangat buatan): misalkan Anda perlu menguji apakah suatu nilaiNULL
atauNA
: dalam kasus ini, kembalikan string kosong, jika tidak kembalikancharacter
nilainya. Tapi tesis.na(NULL)
memberikan kesalahan, jadi sepertinya itu hanya bisa dilakukanif(is.null(x)) return("")
dan dilanjutkanif(is.na(x)) .....
. (Satu dapat menggunakanlength(x)==0
bukannyais.null(x)
tapi tetap saja, tidak mungkin untuk menggunakanlength(x)==0 | is.na(x)
jikax
adalahNULL
.)|
(vektorisasi ATAU di mana kedua sisi dievaluasi) alih-alih||
(korsleting ATAU, tidak vektorisasi, di mana predikat dievaluasi pada gilirannya). Pertimbangkanif (TRUE | stop()) print(1)
versusif (TRUE || stop()) print(1)
return
dapat meningkatkan keterbacaan kode:sumber
foo <- function() a || b
(yang IMO lebih mudah dibaca; dalam hal apa pun, tidak ada keterbacaan "murni" tetapi keterbacaan menurut pendapat seseorang: ada orang yang mengatakan bahasa assembly mudah dibaca)Argumen redundansi telah banyak muncul di sini. Menurut saya itu bukan alasan yang cukup untuk dihilangkan
return()
. Redundansi tidak secara otomatis merupakan hal yang buruk. Ketika digunakan secara strategis, redundansi membuat kode lebih jelas dan lebih dapat dikelola.Pertimbangkan contoh ini: Parameter fungsi sering memiliki nilai default. Jadi, tentukan nilai yang sama dengan standarnya adalah redundan. Kecuali itu membuat jelas perilaku yang saya harapkan. Tidak perlu membuka halaman fungsi untuk mengingatkan diri saya apa defaultnya. Dan tidak perlu khawatir tentang versi masa depan dari fungsi yang mengubah standarnya.
Dengan penalti kinerja yang dapat diabaikan untuk pemanggilan
return()
(sesuai dengan tolok ukur yang diposting di sini oleh orang lain) itu menjadi gaya daripada benar dan salah. Agar sesuatu menjadi "salah", harus ada kerugian yang jelas, dan tidak ada orang di sini yang telah menunjukkan dengan memuaskan bahwa memasukkan atau menghilangkanreturn()
memiliki kerugian yang konsisten. Tampaknya sangat spesifik kasus dan khusus pengguna.Jadi di sinilah saya berdiri di sini.
Saya tidak nyaman dengan variabel "yatim" seperti pada contoh di atas. Apakah
abcd
akan menjadi bagian dari pernyataan yang belum selesai saya tulis? Apakah ini merupakan sisa dari sambungan / edit dalam kode saya dan perlu dihapus? Apakah saya secara tidak sengaja menempel / memindahkan sesuatu dari tempat lain?Sebaliknya, contoh kedua ini membuat jelas bagi saya bahwa itu adalah nilai pengembalian yang dimaksudkan, daripada beberapa kode kecelakaan atau tidak lengkap. Bagi saya redundansi ini sama sekali tidak sia-sia.
Tentu saja, begitu fungsi selesai dan bekerja saya bisa menghapus pengembalian. Tetapi menghapus itu sendiri merupakan langkah ekstra yang berlebihan, dan menurut saya lebih berguna daripada termasuk
return()
di tempat pertama.Semua yang dikatakan, saya tidak menggunakan
return()
fungsi satu-liner pendek tanpa nama. Itu membuat sebagian besar dari kode fungsi dan karena itu sebagian besar menyebabkan kekacauan visual yang membuat kode kurang terbaca. Tetapi untuk fungsi yang lebih besar didefinisikan dan dinamai secara resmi, saya menggunakannya dan kemungkinan akan terus demikian.sumber
return()
in R tidak mengeluarkan biaya. Itu secara objektif berlebihan, tetapi menjadi "tidak berguna" adalah penilaian subyektif Anda. Redundan dan tidak berguna tidak selalu sama artinya. ITULAH di mana kita tidak setuju.return
, dan meskipun saya tidak yakin saya pikir ini berpotensi valid (pasti dalam bahasa imperatif ... keyakinan saya adalah bahwa itu tidak diterjemahkan ke bahasa fungsional).