🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #6877

Re: Romper 2 bucles a la vez en C

#6877
From: Samuel
Date: Fri, 02 May 2003 07:44
57 lines
3401 bytes
El Fri, 2 May 2003 04:30:34 +0200, desorden 
 <nedrosed@yahoo.es> dijo:
> En el siguiente art�culo, Seba F escribi�:
>> 
>> No estoy de acuerdo con esto de tomar como un pecado mortal el uso del
>> goto, ademas como dijeron en el mail anterior el uso del break, es un
>> uso del goto camuflado. En algunos tipos de algoritmos un buen uso del
>> goto disminuye considerablemente la cantidad de lineas de codigo y
>> hasta hace mucho mas comprensible al algoritmo.
>> Siempre y cuando tengamos en cuenta que el uso de case, break y goto
>> no son eficientes a nivel compilacion, en determinadas situaciones su
>> uso es razonable y pr�ctico.
>>
> 
> Depende del tipo de programaci�n, �no? En programaci�n estructurada los
> bloques de c�digo se tienen que recorrer desde la primera l�nea hasta la
> �ltima.
> 
> Programar usando la sentencia goto est�... �anticuado?
> 
> Un saludo...

No si ya sab�a yo que �sto iba a salir ;-) ...

Lo que est� anticuado es decir que "el goto est� anticuado" (ya ha
llovido desde el "goto" considered "harmful"). Es l�gico
que cada funci�n o bucle tenga _un solo punto de entrada_, pero lo que
no lo es, es que tambi�n tenga que tener _un solo punto de salida_. De
hecho en estos dos casos se usa return y break para salir y es m�s
claro, m�s sencillo(KISS) y m�s eficiente.

Para el caso de los dos bucles la soluci�n ideal es la de Perl, que te
permite etiquetar los bucles y usarlos desde el next y last(equivalentes
a continue y break).

OUTER: for(;;){
	INNER: for(;;){
		...
		last OUTER;
	}
}

El otro caso donde se suele usar el goto (y mucho), es en el manejo de
situaciones de error (situaci�n que el propio Dijikstra admite en su
"Goto Considered Harmful"). De nuevo, las situaci�n que resuelve eso de
manera adecuada son las excepciones...

Pero C no tiene ninguna de estas dos posibilidades, as� que o usas goto,
o haces virguer�as. Es mi opini�n.

Saludos

Samuel

-- 
Samuel Mo�ux Salvador
PGP Key pgp.rediris.es    -----         KeyID 0x822583C2
Technical Details
Message-ID: <slrnbb48en.si.444398NOSPAM@tizona.dummy.net>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!headwall.stanford.edu!fu-berlin.de!nsnmpen1-lo.nuria.telefonica-data.net!nsnmpen2-lo.nuria.telefonica-data.net!not-for-mail
References: <b8n8kd$bm3re$1@ID-146085.news.dfncis.de> <slrnbaur1q.ih.444398NOSPAM@tizona.dummy.net> <20030430205521.487.2.NOFFLE@BlackSpark.local> <403d26cd.0305011347.576e901e@posting.google.com> <slrnbb3m2a.q4.nedrosed@debianedrosed.org>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,d2bd500edfc3d6fa
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2003-05-02 00:44:26 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!headwall.stanford.edu!fu-berlin.de!nsnmpen1-lo.nuria.telefonica-data.net!nsnmpen2-lo.nuria.telefonica-data.net!not-for-mail
From: Samuel <444398NOSPAM@celes.unizar.es>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Romper 2 bucles a la vez en C
Date: Fri, 2 May 2003 07:44:24 +0000 (UTC)
Organization: Telefonica Data Espagna
Lines: 57
Message-ID: <slrnbb48en.si.444398NOSPAM@tizona.dummy.net>
References: <b8n8kd$bm3re$1@ID-146085.news.dfncis.de> <slrnbaur1q.ih.444398NOSPAM@tizona.dummy.net> <20030430205521.487.2.NOFFLE@BlackSpark.local> <403d26cd.0305011347.576e901e@posting.google.com> <slrnbb3m2a.q4.nedrosed@debianedrosed.org>
NNTP-Posting-Host: 80-25-246-165.uc.nombres.ttd.es
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: nsnmpen2-gest.nuria.telefonica-data.net 1051861464 5067 80.25.246.165 (2 May 2003 07:44:24 GMT)
X-Complaints-To: usenet@nsnmpen2-gest.nuria.telefonica-data.net
NNTP-Posting-Date: Fri, 2 May 2003 07:44:24 +0000 (UTC)
User-Agent: slrn/0.9.7.4 (FreeBSD)