Comparação de sintaxes básicas em PHP X Phyton X Smalltalk X Java
Publicado por marcelioleal em Setembro 3, 2007
Tudo começou no blog batteries not included com o post sobre Smalltalk X Java. Neste post são apresentados trechos de códigos básicos nas linguagens Java e Smalltalk, fazendo um comparativo entre as vantagens das sintaxes entre as linguagens. O resultado ficou subjetivo, mas com leve vantagem para a sintaxe do Smalltalk, embora os exemplos em Java pudessem ser melhorados, conforme foi descrito nos comentários.
Depois o negócio foi pro Fecha Tag, por sinal um belo blog. Lá o autor escreveu um post com os exemplos em Phyton.
Os exemplos comparados foram:
- Fatorial
- Listar números de 0 à 10
- Imprimir Colections
- Mostrar pares e ímpares entre 1 e 10
- Invocar métodos via Reflection
Nas comparações feitas entre o Smalltalk(vencedor do primeiro confronto) e o Phyton, ficam as minhas seguintes conclusões:
- As implementações são bastantes parecidas
- A simplicidade do Phyton é um pouco superior e elegante
- Em Smalltak Reflection é muito style
Nos comentários do fecha tag o leitor Fábio implementa os exemplos em PHP, abaixo transcrevo os códigos com uma modificação no fatorial.
FATORIAL
function factorial($n) {
if($n >0) return $n*factorial($n-1);
elseif($n ==0) return 1;
else return 0;
}
ou
function factorial($n) {
return ($n > 0)?$n*factorial($n-1):(($n==0)?1:0);
}
Listar Números
foreach(range(0, 10) as $n)
print $n;
Collections
$l = array (‘Em PHP,’,'chamamos as’,'collections’,'de “arrays”‘,);
echo implode($l, “\n”);
ODD/EVEN
foreach(range(0, 10) as $n)
echo (1 & $n) ? “$n is odd, ” : “$n is even, “;
Reflection
$o = new ReflectionClass(‘MyClass’);
$o->newInstance()->showMessage();
Um dia desses conversando com o meu amigo Antonio Fonseca sobre linguagens, mais especificamente sobre Phyton e sua simplicidade e elegância. Sem dúvida Phyton é simples e elegante, mas esses fatores não colocam essa linguagem acima do PHP ou do Ruby, pois cada linguagem tem seu principal ramo de aplicação trazendo a tona os seus principais benefícios e simplicidades.
Com estas implementações fica claro que em termos de simplicidade, Phyton e PHP se equivalem. Talvez em estilo alguns gostem mais de uma ou outra linguagem. Particularmente, existem pontos da sintaxe melhor em uma ou outra linguagem, o que, na minha opinião, as deixam num mesmo patamar.
Mas ainda vou fazer duas camisas com essas frases abaixo, só pra descrontrair:
“Toda Linguagem decente tem ;”
“Toda variável é String até que se prove o contrário”



Daniel F. Martins disse
Legal o post!
Cara, quando eu escrevi aquele post, eu jamais imaginei que daria tanta briga!
Mas é que, naquela época, eu praticamente não conhecia NADA de Smalltalk, por isso os exemplos de código que coloquei lá são até meio idiotas. Mas agora – conhecendo melhor o Smalltalk – digo com tranquilidade que ela dá pau no Java em termos de flexibilidade e poder, sem sombra de dúvidas. Quanto ao estilo, bom, aí já é uma questão de gosto mesmo, como você mesmo disse.
O Python.. bom, eu já cansei de ouvir as pessoas elogiando essa linguagem!
Então, para não ficar boiando na próxima vez que falarem dela por aí, já comprei um livro que pretendo ler assim que possível.
E o PHP… eu já programei bastante em PHP, gosto dela. Mas, se darmos uma procurada por aí, podemos encontrar diversos problemas da linguagem, especialmente no lado ‘orientado a objetos’ dela. Mas acho que a próxima versão resolverá esses problemas.
Bom, é isso aí!
Abraço.
marcelioleal disse
O post original no teu blog é muito bacana, dá pra avaliar de maneira interessante o algumas formações das linguagens. Esse tipo de comparação adicionam conhecimento mesmo.
Não conhecia também o Groovy, bem interessante.
JEAN disse
como se resolve esse problema ? Faça um programa que leia dez conjuntos de dois valores, o primeiro representando o
número do aluno e o segundo representando a sua altura em centímetros. Encontre o aluno
mais alto e o mais baixo. Mostre o número do aluno mais alto e o número do aluno mais
baixo, junto com suas alturas.
marcelioleal disse
Acho que tem várias maneiras de fazer isso, mas ai vai uma
for($i=0;$i<10;$i++)
$alunos[rand(0,1000)] = rand(130,200)*0.01;
asort($alunos);
$alunosCopy = $alunos;
print ” Maior aluno – matricula: “.($key = array_search(array_pop($alunos),$alunosCopy)).” – altura: “.$alunosCopy[$key];
print ” Menor aluno – matricula: “.($key = array_search(array_shift($alunos),$alunosCopy)).” – altura: “.$alunosCopy[$key];