Y cual era esencialmente la gran diferencia entre referencias y apuntadores?
Pues que en vez de tener que dereferenciar el apuntador para cambiar el valor de una variable (*identificador), podias hacerlo como se de la mismisima variable que es pasada como parametro se tratara, asi como todos nosotros ingenuos intentamos cambiar una variable en una funcion y nos dimos cuenta de que no cambiaba
variable = miFuncionBienPirata(variable, parche, pataDePalo, loro);
Dada la definicion de la funcion:
int miFuncionBienPirata(int variable, struct Parche, struct PataDePalo, struct Loro);
Pues bien, si queriamos cambiar "variable" en la funcion, se nos mostro que era algo asi:
void JackSparrow(int *variable){
*variable = loQueTimBurtonTengaEnElGuion;
}
Stroustrup dandole las 10 tablas de C++ a Moises. |
Pero pues muchos de la carrera se hacen bolas desde segundo y hasta que salen con los dichosos apuntadores, cosa que se me hace increible dado el grado educativo en el que nos encontramos. Y entonces Stroustrup dijo al crear C++:
"Hagase el paso por referencia, para que lostontosn00bsprogramadoresineptosinexpertos puedan librarse de los apuntadores y puedan de perdis titularse..." (o algo asi.)
El chiste es que nos dio permiso de usar la siguiente sintaxis:
void JackSparrow(int &variable){
variable = loQueTimBurtonTengaEnElGuion;
}
Ayyy
Asi lucia Hamtaro al enterarse del uso de referencias |
Y como se usa??? Papita!!!
// Here be Krakens
int kraken;
JackSparrow(krakens);
// No Krakens in sight, Captain! Ahoy!!!
No entiendes el uso de apuntadores? |
Y no faltara quien llore y patalee diciendo "pero se la estas pasando por valor!!!"... No le hagan caso a esa gente, escucha reggaeton y seguro en su Facebook estan registrados como PriInChexHXzhiTo emMozxhiTOp... D:
Es el milagro de C++, puede
El simple hecho de que una referencia no pueda contener un valor NULL, hace que me parezcan inutiles (y les dire porque).
Mas de alguna vez vamos a necesitar saber si una de esas referencias son NULL, nos tenemos que hacer a la idea de que los apuntadores no son inevitables, son parte del lenguaje y en particular, en C++ son el pan de diario si vamos a aprovechar el polimorfismo que nos ofrece su orientacion a objetos. A lo mejor les parece que mi postura es extremista estilo musulman radical, y lo es... Pero es que yo prefiero saber que estoy manejando un apuntador a no saber si la variable se paso por referencia o por valor y estar releyendo el codigo para saberlo, ademas me gusta complicarme la vida y para lo de las referencias NULL, pueden pasar los apuntadores por referencia /* void funcion(int *&variable) */ y pueden evitarse la pena de tener que pasar dobles apuntadores y todo el show...
La decision es finalmente personal, cuestion de que hagas tus pruebas y programes como te gusta!!! :D A mi me gustan mis variables con muchos asteriscos (
Ademas, cuando van a poder hacer una expresion como:
const char* const miVariable;
sin usar apuntadores??? Ahhh verda??? xD
Stroustrup Approves! :D |
Deberan disculpar la falta total de acentos y de la letra Alt+164, pero no he podido acomodar la tonta distrubucion del teclado en mi Arch Linux, que mas mejor dicho soy yo el tonto por no hacerlo, pero bueno, cuando tengas duda, culpa a la computadora o al proceso... :D Estamos trabajando en ello, espero que para cuando se haga publica esta direccion los post nuevos ya tengan acentos.
Ademas, Stroustrup aprueba este post. :D
Espero que hayan pasado Felices Fiestas!!! Gracias en especial a Diana, Lenin
Log finished.
Si quieren leer mas de Stroustrup, visiten su pagina de Texas A&M!
Muy interesante y muy elaborado el blog, espero que no lo hallas abandonado (por la fecha de la entrada).
ReplyDeleteAntes de comentar me imagine que los comentarios aparecerían entre /* */
Delete;)
Abandonadísimo por cuestiones laborales/escolares y deportivas... Pero pienso regresar ahora que estoy en vacaciones y que ya me liberé del futbol americano...
DeleteGracias por el comment y por la sugerencia! Iré de a poco reviviendo este show... :D