Colegas, ontem lendo um artigo sobre programação e hoje lendo um livro, me deparei duas vezes com o expressão açúcar sintético. Por exemplo: tal coisa é um açúcar sintético que faz tal coisa por baixo dos panos.
Nao eh acucar sintetico, eh syntax sugar, ou syntactic, que seria sintatico ou sintaxe.
Agora o que significa?? Bom sao facilidades na sintaxe da linguagem para fazer certas coisas.
Por exemplo em Scala, o . nao eh necessario em alguns casos, ex:
scala> val nome = "abcde"
nome: String = abcde
scala> nome foreach println
a
b
c
d
e
//nome foreach println eh um syntax suggar para:
nome.foreach(println)
1 + 1 // eh um syntax sugar para
1.+(1)
Deu pra entender? Sao maneiras mais curtas ou mais faceis de se escrever certas coisas.
N
norbAns
Entendi sim, obrigado!
W
windsofhell
hahahah Isso que da ler livro traduzido para o Portugues!! hahahaha
E
entanglement
De fato, quando ele foi procurar no Google, deve ter achado a seguinte página:
Obviamente isso não faz nenhum sentido.
M
Marky.Vasconcelos
Um exemplo no Java seria os for-each iterators.
for(Objetoobj:listaObjetos)//Fazalgocomobj
Em tempo de compilação isso vai virar um for (y = 0 | y < size(listaObjetos) | y++) ou entao um while com Iterator.
entanglement:
De fato, quando ele foi procurar no Google, deve ter achado a seguinte página:
Obviamente isso não faz nenhum sentido.
kk
S
Schuenemann
Marky.Vasconcelos:
Um exemplo no Java seria os for-each iterators.
for(Objetoobj:listaObjetos)//Fazalgocomobj
Em tempo de compilação isso vai virar um for (y = 0 | y < size(listaObjetos) | y++) ou entao um while com Iterator.
Fiz uma classe com esse código e outra usando for de i até size().
Olhando os códigos gerados com “javap -c <nome_classe>”, a primeira classe gerou um código com iterator e a segunda com chamadas a size() e get().
Então não seria açúcar sintático, certo?
G
gomesrod
Schuenemann:
Fiz uma classe com esse código e outra usando for de i até size().
Olhando os códigos gerados com “javap -c <nome_classe>”, a primeira classe gerou um código com iterator e a segunda com chamadas a size() e get().
Se não me engano é assim:
Isso:
Collection<MyClass> col = //..... considere qualquer herdeiro de Collection
for (MyClass elem : col) {
dosomething(elem);
}
vira isso:
Collection<MyClass> col = //.....
for (Iterator<MyClass> iter = col.iterator(); iter.hasNext(); ) {
MyClass elem = iter.next();
dosomething(elem);
}