Hay muchas cosas que me han llamado la atención de la sintaxis de python, quizás por haber estado centrado mucho tiempo en lenguajes como C/C++ o java, que son muy similares en cuanto a sintaxis, y haber hecho alguna incursión en php, que también tiene muchas similitudes con C. El basic y el pascal me quedan ya lejanos….
De la sintaxis de python me ha llamado la atención la forma de asignar variables. Si hacemos esto
a,b,c=1,2,3
asigna los valores uno a uno, es decir, la a valdrá 1, la b 2 y la c 3. Es más, si d es una especie de Hastable, -en python creo que se llama defaultdict-, podemos hacer un bucle así
for clave,valor in d:
y se iran asignando automáticamente clave y valor en cada una de las iteraciones. Realmente cómodo si lo comparamos con java, que hay que pedir las keys() y luego iterar y con cada key pedir el get(key) correspondiente.
En cuanto a las clases python, también es curioso el tema de los atributos. Estos, al igual que el resto de las variables, NO se declaran. En el mismo constructor de la clase emprezamos a crearlas sobre la marcha asignándoles valores.
class UnaClase:
def __init__(self):
self.unAtributo="hola";
…
Todos los métodos, el constructor y demás métodos, reciben un parámetro self, equivalente al this, pero lo reciben explicitamente. Además, incluso desde fuera de la clase, cuando la estamos usando, podemos añadirle más atributos sobre la marcha. En el caso de UnaClase, podemos hacer perfectamente esto
a = UnaClase()
print a.unAtributo # escribe "hola"
a.otroAtributo="adios"
print a.otroAtributo # escribe "adios"
Y también es realmente curioso que no hay nada similar a abrir y cerrar llaves, ni begin-end, ni cosas de esas. El cuándo empieza o termina un bucle, una definición o cualquier otra cosa …. ¡¡ se hace con el sangrado !!. Bueno, no es totalmente cierto, hay que poner un dos puntos al final de la línea en la que empieza el bucle o definición y las siguientes líneas ponerlas sangradas hasta que queramos terminar el bucle o definición.
Un lenguaje realmente curioso.
Hombre la sintaxis de python es bastante normal, salvo la indentación. Para sintaxis curiosas o potentes, perl o ruby le dan mil vueltas, sobretodo éste último que a pesar de tener muchas más cosas que python, sigue siendo entendible (algo que difícilmente se puede decir en perl :P).
Pero bueno si lo comparas solo con Java/C++ obviamente hay una gran diferencia (a mejor claro :P)
ps: un «hashtable» en python es un tipo diccionario. Que es como se llaman a este tipo de datos, que luego esté implementado internamente con una tabla hash (como suele ser lo normal, entre otras cosas) es otro tema que no tiene nada que ver. Java nos atonta
No he conseguido encontrar tu correo para felicitarte personalmente, así que lo hago aquí.
Felicidades por el estupendísimo trabajo que haces con el tema de programación. Si te soy sincero, me has salvado el proyecto final de carrera, al leer un artículo tuyo acerca de sockets y los problemas que pueden presentar.
Sin más, muchas gracias, y sigue así 😉
P.S: Nombraré esta web en la bibliografía
un «hashtable» en java es tambien un tipo diccionario.
hefesto84. Gracias, me alegro que todo esto le sirva a alguien, aparte de a mi como entretenimiento.
En cuanto al «hashtable», sois muy detallistas 😀 Para mi cualquier cosa con claves y valores es un «hastable» entre comillas. Supongo que sí, es deformación de trabajar sólo en java y ver la clase java.util.Hashtable….
Sed buenos.
Yo a lo que me refería es que un HashTable es una implementación del tipo abstracto de datos comúnmente denominado diccionario.
Son conceptos distintos que indican la misma cosa en la práctica. Vale sé que es muy tocapelotas mi comentario :P, pero mezclarlos es caer en la decadencia, sino a los múltiples texto que han ido apareciendo sobre Java y la decadencia de la ingeniería informática me remito. He aquí un ejemplo claro del porqué.
Me has convencido. De ahora en adelante los llamaré a todos «chismes». 😛