Article View: es.comp.os.linux.programacion
Article #16285[POLEMICA CON GOTO] (Era-->Re: Saltos en bash)
From: Ignacio Arenaza
Date: Tue, 02 May 2000 00:00
Date: Tue, 02 May 2000 00:00
95 lines
3880 bytes
3880 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
>>>>> "batsman" == batsman <batsman@simpsons.for.ever> writes:
batsman> La �nica vez que he visto un goto en un programa en C fue
batsman> en el c�digo de megahal, un simulador de conversaci�n.
Ya te voy a decir donde puedes ver unos cuantos juntos ;-)
batsman> Eso s�, s� que a veces es necesario por necesidades de
batsman> velocidad, etc... pero s�lo se justifica si el programa
batsman> es por ejemplo el n�cleo. Si no, no tiene excusa y merece
batsman> la reprobaci�n �nanime.
Tan malo es usar el goto a diestro y siniestro como prohibirlo y
vilipendiarlo. Lo digo yo y gente tan seria y prestigiosa como
Kernigham y Rithchie (entre otros).
�Que es mas claro y facil de entender _y mantener_ de los dos ejemplos
siguientes? Supon que los pasos paso1, paso2, paso3, etc solo se
pueden ejecutar si el paso anterior se ha llevado a cabo de forma
correcta y podemos obtener los recursos necesarios para este paso. En
caso contrario hay que deshacer todo lo hecho y liberar los recursos,
vamos, una especie de sistema transaccional, o se hace todo, o no se
hace nada.
EJEMPLO_1: (la forma "oficial", si lo se, se puede resumir, pero la
"legibilidad del codigo" pierde)
if ( reservar_cosas_para_1() ) {
hacer_cosas_de_1();
if ( reservar_cosas_para_2() ) {
hacer_cosas_de_2();
if ( reservar_cosas_para_3() ) {
hacer_cosas_de_3();
if ( reservar_cosas_para_4() ) {
hacer_cosas_de_4();
liberar_cosas_de_4();
}
liberar_cosas_de_3();
}
liberar_cosas_de_2();
}
liberar_cosas_de_1();
}
EJEMPLO_2: (la forma "pagana", pero mas "legible" y "mantenible" en mi
opinion)
if ( !reservar_cosas_para_1() ) goto liberar_1;
hacer_cosas_de_1();
if ( !reservar_cosas_para_2() ) goto liberar_2;
hacer_cosas_de_2();
if ( reservar_cosas_para_3() ) goto liberar_3;
hacer_cosas_de_3();
if ( reservar_cosas_para_4() ) goto libear_4;
hacer_cosas_de_4();
liberar_4:
liberar_cosas_de_4();
liberar_3:
liberar_cosas_de_3();
liberar_2:
liberar_cosas_de_2();
liberar_1:
liberar_cosas_de_1();
Creo que la segunda solucion se ajusta mas a la forma de pensar
habitual a la hora de hacer las cosas: si tienes todo lo que te hace
falta hasta ahora, sigues. Sino, limpias todo lo que has usado de una
vez.
Saludos. I�aki.
- --
Sabias que Benjamin Albi�ana tiene htdig en marcha y va de cine?
Get PGP/GPG Keys at http://personales.jet.es/inaki.arenaza/pgpkey.html
A proud member of GULA - http://gula.jet.es/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.0 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.4 and Gnu Privacy Guard
iD8DBQE5Dzc5ZXLnGT1HLgcRAt6KAJ4hyhu8ZlIzleue1C2Wt9vLgeTbjwCfWwre
cA3g0lUoBggU4XSodkuibGM=
=xdF5
-----END PGP SIGNATURE-----
Technical Details
Message-ID:
<871z3k4slh.fsf_-_@eb2ebu.ampr.org>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<slrn8gtnu0.pc.scandisk@localhost.localdomain> <aodne8.je1.ln@simpsons4ever>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,e073e16083571582 X-Google-Attributes: gidf86c8,public From: Ignacio Arenaza <inaki.arenaza@jet.es> Subject: [POLEMICA CON GOTO] (Era-->Re: Saltos en bash) Date: 2000/05/02 Message-ID: <871z3k4slh.fsf_-_@eb2ebu.ampr.org> X-Deja-AN: 618888382 Content-Transfer-Encoding: 8bit References: <slrn8gtnu0.pc.scandisk@localhost.localdomain> <aodne8.je1.ln@simpsons4ever> Organization: Servidor NNTP de eb2ebu.ampr.org Content-Type: text/plain; charset=iso-8859-1 User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.3 Mime-Version: 1.0 Newsgroups: es.comp.os.linux.programacion