Achei muito interessante este artigo comparando a sintaxe de Smalltalk com Java. Implementei os mesmos exemplos em Python, para que você possa comparar a sintaxe:
Problema: cálculo de fatorial
def factorialRecursive(n): if n<0:return 0 if n==0:return 1 return n*factorialRecursive(n-1)
Ou assim:
def factorialNonRecursive(n): if n<0:return 0 return reduce(lambda a,b:a*b,[1]+range(1,n+1))
A recursividade pode parecer uma solução elegante, mas o consumo de memória é assombroso nesse caso, em qualquer linguagem. Calcular a fatorial de um número grande qualquer pode ser um problema com a recursividade. Por isso, prefira a versão não recursiva.
No novo Python 2.5 você pode fazer:
def fact(x): return ( 0 if x<0 else reduce(lambda a,b:a*b,[1]+range(1,x+1)) )
Aqui é difícil dizer qual é mais prática, Smalltalk ou Python. Você pode palpitar sobre qual é mais elegante, uma vez que as soluções são radicalmente diferentes, mas a escolha final é subjetiva.
Problema: imprimir os números de 1 a 10
Eu faria usando os recursos de programação funcional:
print "\n".join(map(str,range(1,11)))
Mas você pode preferir:
for i in range(1,11): print i
De qualquer maneira, ponto para o Python aqui.
Problema: trabalhando com Collections
l=[ 'Em Python,', 'chamamos as', 'collections', 'de "listas"', ] print "\n".join(l)
Aqui, indiscutivelmente, ponto para o Python.
Problema: mostrar os pares e ímpares entre 1 e 10
for i in range(1,11): print i,["is even","is odd"][i % 2]
Novamente, o Python ganha disparado.
Problema: invocar um método via Reflection
É bem fácil:
o=MyClass() getattr(o,"showMessage")()
Aqui o páreo é duro, Python e Smalltalk correm cabeça-a-cabeça. Na minha opinição, Python ganha por um focinho.
Para saber mais sobre Python recomendo o PythonBrasil.
Além disso, sou professor do Curso de Python da Visie.
Deixe um comentário