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.