Açúcar sintético

7 respostas
N

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.

O que quer dizer essa expressão açúcar sintético?

7 Respostas

F

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

Entendi sim, obrigado!

W

hahahah Isso que da ler livro traduzido para o Portugues!! hahahaha

E

De fato, quando ele foi procurar no Google, deve ter achado a seguinte página:

Obviamente isso não faz nenhum sentido.

M

Um exemplo no Java seria os for-each iterators.

for(Objeto obj : listaObjetos)
//Faz algo com obj

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

Marky.Vasconcelos:
Um exemplo no Java seria os for-each iterators.

for(Objeto obj : listaObjetos)
//Faz algo com obj

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

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); }

E isso:

MyClass[] array = //..... for (MyClass elem : array) { dosomething(elem); }
vira isso:

MyClass[] array = //..... for (int i = 0; i < array.length ; ++i) { elem = array[i]; dosomething(elem); }

Criado 14 de junho de 2013
Ultima resposta 18 de jun. de 2013
Respostas 7
Participantes 7