Sepertinya CoffeeScript secara otomatis mengembalikan item terakhir dalam sebuah lingkup. Bisakah saya menghindari fungsi ini?
Sepertinya CoffeeScript secara otomatis mengembalikan item terakhir dalam sebuah lingkup. Bisakah saya menghindari fungsi ini?
Jawaban:
Anda harus secara eksplisit tidak mengembalikan apa pun, atau membiarkan ekspresi mengevaluasi menjadi tidak terdefinisi di bagian bawah fungsi Anda:
fun = ->
doSomething()
return
Atau:
fun = ->
doSomething()
undefined
Inilah yang direkomendasikan oleh dok, saat menggunakan pemahaman:
Berhati-hatilah agar Anda tidak secara tidak sengaja mengembalikan hasil pemahaman dalam kasus ini, dengan menambahkan nilai pengembalian yang bermakna - seperti true - atau null, ke bagian bawah fungsi Anda .
Namun, Anda bisa menulis pembungkus seperti ini:
voidFun = (fun) ->
->
fun(arguments...)
return
(Perhatikan operator percikan di sini ( ...
))
Dan gunakan seperti ini saat mendefinisikan fungsi:
fun = voidFun ->
doSomething()
doSomethingElse()
Atau seperti ini:
fun = voidFun(->
doSomething()
doSomethingElse()
)
return
, undefined
atau null
ke akhir fungsi saya. Namun, menambahkan null
tampaknya salah bagi saya karena beberapa alasan. Apakah saya benar menganggapnya sebagai pilihan terburuk dari ketiganya?
undfined
di akhir. Menggunakan return
pernyataan kosong tampaknya mengungkapkan tidak ada yang lebih baik daripada meninggalkan undefined
di akhir fungsi, jadi kosong return
tampaknya menjadi pilihan yang lebih baik.
fun(arguments...)
, akan lebih baik menelepon fun.apply(this, arguments)
.
Ya, dengan a return
sebagai baris terakhir dari suatu fungsi.
Sebagai contoh,
answer = () ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
Jika Anda ingin melihat apa saja yang dikompilasi kopi, coba http://bit.ly/1enKdRl . (Saya telah menggunakan coffeescript redux untuk contoh saya)
Hanya sesuatu yang menyenangkan (ctional)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
itu sendiri adalah fungsi yang selalu tidak menghasilkan apa-apa. Anda dapat menggunakan compose untuk memasukkan nilai yang dikembalikan ke dalam lubang hitam ini dan fungsi yang dibuat tidak akan pernah mengembalikan apa pun.
Tampaknya fungsi di CoffeeScript harus selalu mengembalikan sesuatu, bahkan null
. Di C, Anda memiliki void
tipe pengembalian.
->
, fungsi kosong, dikompilasi (function() {})
, jadi itu satu-satunya fungsi yang tidak mengembalikan apa pun.
return;
bekerja di C, JavaScript dan CoffeeScript untuk mengembalikan nilai kosong.