Parece que o CoffeeScript retorna automaticamente o último item em um escopo. Posso evitar essa funcionalidade?
Parece que o CoffeeScript retorna automaticamente o último item em um escopo. Posso evitar essa funcionalidade?
Respostas:
Você não deve retornar nada explicitamente ou deixar uma expressão avaliada como indefinida na parte inferior de sua função:
fun = ->
doSomething()
return
Ou:
fun = ->
doSomething()
undefined
Isso é o que o doc recomenda, ao usar compreensões:
Tenha cuidado para não retornar acidentalmente os resultados da compreensão nesses casos, adicionando um valor de retorno significativo - como true - ou nulo, na parte inferior de sua função .
Você poderia, no entanto, escrever um wrapper como este:
voidFun = (fun) ->
->
fun(arguments...)
return
(Observe o operador splat aqui ( ...))
E use-o assim ao definir funções:
fun = voidFun ->
doSomething()
doSomethingElse()
Ou assim:
fun = voidFun(->
doSomething()
doSomethingElse()
)
return, undefinedou nullaté o fim da minha função. No entanto, adicionar nullparece errado para mim por algum motivo. Estou certo em presumir que é a pior escolha entre as três?
undfinedno final. Usar uma returninstrução vazia parece expressar return nada melhor do que deixar um undefinedno final da função, portanto, vazio returnparece ser a melhor opção.
fun(arguments...), seria melhor ligar fun.apply(this, arguments).
Sim com um return como a última linha de uma função.
Por exemplo,
answer = () ->
42
extrovert = (question) ->
answer()
introvert = (question) ->
x = answer()
# contemplate about the answer x
return
Se você gostaria de ver o que js o café compila, tente http://bit.ly/1enKdRl . (Eu usei redux do coffeescript para o meu exemplo)
Apenas algo divertido (opcional)
suppressed = _.compose Function.prototype, -> 'do your stuff'
Function.prototypeem si é uma função que sempre não retorna nada. Você pode usar compose para canalizar seu valor de retorno para este buraco negro e a função composta nunca retornará nada.
Parece que as funções em CoffeeScript devem sempre retornar algo, mesmo null. Em C, você tem voidcomo tipo de retorno.
->, a função vazia compila para (function() {}), portanto, é a única função que não retorna nada.
return;funciona em C, JavaScript e CoffeeScript para retornar um valor void.