24.12.12

Goto: Here Be Dragons

 Goto es del diablo, es un mal necesario o es un feature satanizado???


En mis pocos a;os de experiencia en programacion, una de las cosas que mas revuelo causa /*y amistades separa*/ es esa discusion acerca del uso de la sentencia goto en los lenguajes que la permiten (C y Pascal, por nombrar los mas comunes). Y es que me causa asombro/risa/diversion/miedo/ansiedad sexual las opiniones que tienen diferentes personas, colegas del trabajo y de la escuela acerca del goto.

Y pues bueno, que es goto???

// Es el esposo de la gota :D  play("ba_dum_tsss.wav");

Es una sentencia que transfiere el control de un programa de manera incondicional a la etiqueta que se le provee despues. Y pues esta chido para saltarse codigo que tal vez no quieres que se ejecute dada cierta condicion, o si quieres regresarte a hacer algo de nuevo, pero uno como todo buen n00b de la programacion, uno puede ignorar todas las implicaciones que tiene el hecho de andar saltando de un lado a otro como canguro, grillo, pulga o gato siguiendo un punto laser.

Recuerdo que la primera aproximacion que me dieron hacia los ciclos en C implicaba el uso de goto con condiciones, y todo suave y bonito, las cosas se repetian segun una condicion y cuando ya no era valida, se botaba del ciclo...

PERO (siempre hay un pero)...

Es inevitable equivocarse, pero la vida sigue!

Hubo un programa, que la verdad no recuerdo ni de que trataba, el chiste es que un contador se reseteaba a cada "iteracion" y esto se solucionaba moviendo la etiqueta que devolvia a la "rutina", y se lo atribui en su momento a que usabamos Borland Turbo C y que todos me dijeron que era software viejo, que ya no se usaba y que pues asi literalmente "valia queso"... Y me fui feliz a Dev-C, no use goto y de ahi no me han sacado (en Windows)...


Hoy mismo, mientras escribo estas lineas, me puse a leer una tarea que en su momento realize acerca de las palabras reservadas, que anexo para cualquier referencia, hice un goto a la seccion de goto (<risasPregrabadasAqui>) y leyendo las cosas que implica su uso, caigo en la cuenta de que no era un bug del compilador ni nada (al cual respeto, pues me vengo enterando que Borland Turbo C tenia un interprete de C y sigue siendo de los mejores en existencia), sino una consecuencia directa del uso de goto... Flaaaaashbaaaaaack!!! :D

goto ~/.nastyCode/snippetDeCuandoProgramabaDeLaBurger.c


La explicacion es simple y es que goto destruye todas las declaraciones de variables automaticas que hayan sido realizadas luego de la etiqueta a la que se realiza el salto...

A ch1n64!!! Y yo cuando declare automatica la variable??? Si ni le puse auto!!! D:

Y pues resulta que toda variable dentro de una funcion sea main o sea uno definido por el usuario, auto es una palabra inherente, por lo que esas variables son automaticas por default...


By Oncl Ven, retired programmer

Y cuando yo hice eso, pues ni entendia que carambas eran las variables auto!!! Y ohhh sorpresa!!! Iluminacion!!! Epifania!!! Milagro!!! (atribuida a Salazar Navarro)... Compilaba y no se quejaba por la redefinicion, suponia que la pasaba por alto... PERO NO!!! D:



Y con esto comprendi las implicaciones de usar goto, y dado el infinito y absoluto poder que goto otorga, cai en el cliche de las peliculas Hollywoodenses...




Y bueno, luego del bla bla bla tecnico, hora de causar polemica!!! x3!


Consejos de Fanboy

En mi coordinacion de carrera, los del club de Toby allegados ahi todos dicen que goto es del diablo, que no debe ser usado porque rompe el paradigma estructurado de C y no se que tanta basura mas (con todo respeto, pero creo que esos argumentos son bastante tontos), por otro lado hay quienes defienden su uso en CIERTAS SITUACIONES, especificas y en las cuales no hay riesgo de generar tonterias o codigo spaghetti que despues sera una pesadilla mantener... Pensamiento con el cual comulgo totalmente con algunos agregados mios.

Y es que como menciono, andar saltando de lado a lado pues la computadora como sea, pero piensen en los ni;os programadores que despues vamos a tener que debuggear esa jalada de codigo, mas enredado que mis gre;as de 11 meses de no cortarme el cabello ni peinarme y que da mas asco aun... Dicen en StackOverflow que un programador bueno debe poder seguir el flujo por mas intrincado que sea, pero hay limites en los que no importa tanto la capacidad de lectura de codigo, sino la paciencia de hacerlo... Y la mayoria somos bastante maniaticos sexuales desesperados en ese aspecto.

El uso basico y mas abiertamente aceptado de goto es para salir de ciclos altamente anidados 4 o mas for/while, capacidad que incluso se incluye en lenguajes de otro paradigma, como los break <etiqueta> en Java (prueba de su utilidad)... Es cierto que no existen problemas que no puedan realizarse sin goto, pero a veces la solucion "ortodoxa" hace exactamente lo que segun eso evitamos al no usar goto, codigo complejo y criptico, pesadilla para los que planchamos leemos codigo ajeno.

Y en lo personal, yo condono y apoyo el uso de goto!!! Por que??? Simplemente porque es parte del lenguaje, y creo que si no usas un feature del lenguaje lo estas desaprovechando!!! Yo en lo personal lo utilizo para cosas personales, jugando con juegos de palabras con las etiquetas y haciendo tonterias en el codigo! Por que??? Porque el chiste de programar es divertirse haciendolo o sufrir toda tu vida haciendo algo que aborreces! La decision la tomas tu!!! :D

Y bueno, todo por hoy, tengo sue;ito!!! Feliz primer post para mi!!! nwn

Busco novia, por si se les ofrece!!! Juego americano y me dejo pegar!!! :D
xD

(Forever alone!!! u.u)

Log Finished.

Title One
This is the example text for title one.

No comments :

Post a Comment

Hazmela de tos aqui abajito!!! :D