Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Println com o seu parenteses

Boa tarde,

Existe alguma diferença entre essas duas statements no que diz respeito a execução?

println "Hello World"

Para essa

(println "Hello World")

Grato,

3 respostas
(println "Hello World")

vai imprimir Hello World e retornar o valor nil

println "Hello World"

não executa a função println, pela falta de parentêses. E é a mesma coisa que você rodar

println
"Hello World"

ou seja, println vai retornar uma função (não vai executar, vai só retornar um "objeto" do tipo função, que em clojure é algo que implementa a interface clojure.lang.IFn) e depois retornar a string Hello World

Se sua você tiver uma função com esse conteúdo

(defn minha-funcao []
  println "Hello World")

e você chamar essa função (minha-funcao) você vai receber apenas a string Hello World como retorno. Note que você vai receber a string como retorno de chamar minha-funcao e esse valor não foi imprimido, como seria caso tivesse parentêses ao redor de println "Hello World"

Entendi, obrigado meu amigo. Aproveitando gostaria de entender pq que de sempre ele imprimir nil no console. Tem algum motivo?

solução!

o console do clojure normalmente é chamado de repl repl significa Read-Eval-Print loop Ou seja, tudo que você digitar o repl vai ler o que você digitou, avaliar (executar) isso, imprimir o resultado que foi retornado Se você digitar (println "Hello world") ele vai ler isso, executar. Quando ele executa ele imprime na tela o Hello world. E depois vai imprimir o retorno que a função println deu, essa função sempre retorna nil. Então ele imprime esse valor também.

Um outro exemplo é você digitar só "Hello world". O repl vai ler isso e executar. A execução não faz nada. E depois imprimir o retorno do que executou, que vai ser a string "Hello world". Então na sua tela vai aparecer só

Hello world

, enquanto no exemplo anterior foi

Hello world
nil