CoffeeScript bir kapsamdaki son öğeyi otomatik olarak döndürüyor gibi görünüyor. Bu işlevsellikten kaçınabilir miyim?
CoffeeScript bir kapsamdaki son öğeyi otomatik olarak döndürüyor gibi görünüyor. Bu işlevsellikten kaçınabilir miyim?
Yanıtlar:
Açıkça hiçbir şey döndürmemeniz veya işlevinizin altında tanımsız olarak değerlendirilen bir ifade bırakmanız gerekir:
fun = ->
doSomething()
return
Veya:
fun = ->
doSomething()
undefined
Kavramları kullanırken dokümanın önerdiği şey budur:
Bu durumlarda, işlevinizin altına anlamlı bir dönüş değeri (true gibi) veya boş olarak ekleyerek , anlama sonuçlarını yanlışlıkla döndürmediğinizden emin olun .
Ancak bunun gibi bir paketleyici yazabilirsiniz:
voidFun = (fun) ->
->
fun(arguments...)
return
( Buradaki uyarı operatörüne dikkat edin ( ...
))
Ve fonksiyonları tanımlarken şu şekilde kullanın:
fun = voidFun ->
doSomething()
doSomethingElse()
Veya bunun gibi:
fun = voidFun(->
doSomething()
doSomethingElse()
)
return
, undefined
ya null
benim fonksiyonun sonuna kadar. Ancak eklemek null
bazı nedenlerden dolayı bana yanlış geliyor. Üçü arasında en kötü seçim olduğunu varsaymakta haklı mıyım?
undfined
da sonunda bir bırakmaktır . Boş bir return
ifade kullanmak , işlevin sonunda bir bırakmaktan daha iyi bir şey ifade etmiyor gibi görünüyor undefined
, bu nedenle boş return
daha iyi bir seçenek gibi görünüyor.
fun(arguments...)
aramak daha iyi olur fun.apply(this, arguments)
.
Evet, bir return
bir işlevin son satırı olarak a.
Örneğin,
answer = () ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
Kahvenin neye derlendiğini görmek isterseniz, http://bit.ly/1enKdRl'yi deneyin . (Örneğim için kahve reçetesi redux kullandım)
Sadece eğlenceli bir şey (kurgusal)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototype
kendisi her zaman hiçbir şey döndürmeyen bir işlevdir. Dönüş değerinizi bu kara deliğe yönlendirmek için compose kullanabilirsiniz ve oluşturulan işlev hiçbir zaman hiçbir şey döndürmez.
Görünüşe göre CoffeeScript'teki işlevler her zaman bir şey döndürmelidir null
. C'de, void
dönüş türünüz var.
->
, boş işlev için derlenir (function() {})
, dolayısıyla hiçbir şey döndürmeyen tek işlevdir.
return;
bir void değeri döndürmek için C, JavaScript ve CoffeeScript'te çalışır.