Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Ver: Modo: Orden:
Aprendiendo a programar | 37 comentarios (37 temáticos, editoriales, 0 ocultos)
Depende de lo que busques (none / 0) (#19)
por thuban a las Fri Jul 23rd, 2004 at 12:46:19 PM CET
(Información Usuario)

Si no le encuentras sentido a la eficiencia, pues enhorabuena. Vives en un mundo de recursos ilimitados. Pero para los que nos preocupamos por la eficiencia, es absurdo usar un lenguaje en el que no controlas cuando se libera la memoria. ¿Y si el GC tarda en entrar? La memoria se queda ocupada. Simplemente.

¿Seguridad? Pues si, el java es muy seguro porque si no te deja hacer nada donde puedas meter la pata no metes la pata. Por el camino te pierdes el control sobre TU programa. Pero eso si, es seguro. Ahora, ¿no es un poco triste que el diseñador del lenguaje reduzca tus posibilidades para que no puedas meter la pata? ¿No te jode que un tipo desde un despacho decida que eres un torpe? O que decida que si le pasas un entero a una funcion te vas a equivocar si le cambias el valor dentro y no te deje pasarlo por referencia (¿no te joden los p**tos IntHelper cuando programas con Corba?).

Yo prefiero un lenguaje que me deje hacer todo lo que pueda hacer el ordenador y encargarme yo de *programar* las devoluciones de memoria, las comprobaciones... No se trata de volver al ensamblador, pero tampoco de limitarse a lo que un teorico ha decidido que es un "paradigma de programacion".

En Java se pueden hacer muchas cosas y es un lenguaje cojonudo. Pero para aprender a programar algoritmos o para hacer cualquier cosa en la que la eficiencia sea importante, hay mejores opciones.

Y ni siquiera se puede decir que el Java libre de los errores debidos a los punteros salvajes. Si no eres cuidadoso la cagas igual. Como en Java todo es muy facil y no hay punteros, en pocos manuales se distingue entre la referencia y el valor apuntado por la referencia, por ejemplo, en los String. Es facil encontrase con codigo por ahi donde de pronto donde dijo "Digo" dice "Diego" porque desde dos sitios diferentes se tiene la misma referencia del mismo String (los dos punteros apuntan al mismo valor) y al cambiar los datos en uno se cambia en los dos.

Como nadie distingue entre puntero y valor, los que no tienen el concepto del puntero no ven problemas en este codigo:
import java.util.*;

class Prueba {
  public String nombre;
  
  Prueba( String nom) {
    nombre = nom;
  }
  
  public static void main( String args[]) {
    Vector vec = new Vector();
    
    Prueba p = new Prueba( "Digo");
    vec.add( p);

    p.nombre = "Diego";
    
    Prueba g = (Prueba)vec.elementAt( 0);
    System.out.println( g.nombre);
  }
}
(Para los que no lo ejecuten, el programa escribe "Diego" aunque muestra el valor recien sacado del vector, que se metio diciendo "Digo". Mucha gente piensa que el valor dentro del Vector esta a salvo de modificaciones y se dan cuenta cuando su vector con 32324 objetos tiene valores incorrectos)

Pero los que saben lo que es un puntero se dan cuenta de que lo correcto es hacer:

p = new Prueba( "Diego"); //p.nombre = "Diego";

Alguien que empieza a programar no necesita lidiar estos problemas sin que nadie le explique porque ocurren, y no te imaginas la cantidad de veces que he tenido que explicar esto a gente que se habia tirado de los pelos delante del monitor sin comprender porque todos los objetos de su vector tenian el mismo valor.

Porque nadie espera que eso pase en Java porque es seguro.

Y la diferencia en la velocidad de comprension entre alguien que habia programado en C o Pascal y sabia lo que es un puntero y entre alguien que habia aprendido a programar en Java sin necesitar punteros se mide en cuartos de hora...

Si los punteros existen y estan ahi agazapados dandote por culo, al menos que te cuenten lo que son. Y si estan ahi, ya seria un gesto que te permitan aprovecharte de ellos si quieres...

Y en cuanto a lo de pasar metodos a las funciones, yo ni entro ni salgo en si tiene sentido pasar funciones como parametros. De hecho, pocas veces he tenido que hacerlo. Yo solo digo que se puede y donde puede leer como se hace. Y es una chapuza porque es lento. Yo hablo de ejecutar un metodo donde sea y tu hablas de pasarle una funcion a un algoritmo generico, que si las clases estan diseñadas como es debido no tiene sentido porque, como bien dices, se pasa dentro del objeto y no es una chapuza porque forma parte de la gracia de la POO. Hablamos de cosas diferentes.

[ Padre ]


Aprendiendo a programar | 37 comentarios (37 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:
Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda