Bueno, el foreach de Java no es igual al for in de Python. Para usar el foreach tienes que recurrir a parametrizar el vector o la colección que sea (menos los array, que ya le indicas el tipo al crearlos). Por lo que o haces supercasting a Object de todo lo que tengas que meter y luego haces downcasting o sólo puedes meter objetos de una clase. Aunque el casting sea parte de la construcción. Es mínimamente mejor que usar un iterador pero sigo prefiriendo el modo de Python. Aunque esto es más debido a la colección en sí más que a la forma de iterar sobre ella.
Esto no es cierto. Puedes hacer un foreach en Java sobre cualquier clase que implemente
Iterable. Además, no existe ni downcasting ni upcasting, los tipos parametrizados NO EXISTEN en tiempo de ejecución. Así que al runtime le da lo mismo.
Es más, internamente, no existe tampoco la construcción foreach, el compilador te genera un while.
Y ahora que lo pienso. También es un coñazo tener que pasar los tipos primitivos por las clases wraping correspondientes para poder meterlas, ya que no son objetos.
Tampoco es cierto, Java 1.5 tiene autoboxing.
- ferdy
------------
El gran problema que tienes con esto:
Pero es que además puede ser incluso más compacto. Por ejemplo para modificar una lista puedes hacer algo como esto:
lista = [0, 1, 2]
lista2 = [x ** 2 for x in lista]
lista2
[0, 1, 4]
Es esto:
>>> lista = [0, 1, 2]
>>> lista2 = [ x ** 2 for x in lista ]
>>> lista2
[0, 1, 4]
>>> x
2
>>>
Que es extremadamente no-intuitivo para cualquiera que programe en otros lenguajes de programación.
No todo se reduce al número de líneas, si no que también hay que tener en cuent las cosas 'inesperadas' que pueden ocurrir en esas líneas.
- ferdy