Niveles de anidamiento de IF

649 views
Skip to first unread message

Foxero

unread,
Aug 27, 2013, 1:49:51 PM8/27/13
to publice...@googlegroups.com
Hola grupo alguien recuerda hasta cuantos IF se pueden anidar en VFP 7 ??

Por sus respuestas, gracias anticipadas.

Saludos
David


Ricardo Pina

unread,
Aug 27, 2013, 5:39:15 PM8/27/13
to Grupo VFP
Hola Foxero
 
Desconozco que haya un límite, pero creo que te queda el código más limpio con la estructura DO CASE cuando tienes muchos anidados.
 
Saludos
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Fernando D. Bozzo

unread,
Aug 27, 2013, 5:52:14 PM8/27/13
to publice...@googlegroups.com
Hola Foxero, no sé si hay un límite técnico, creo que no, pero si hay un límite dado por las buenas prácticas, donde no debería superar los 3 niveles, ya que mucho anidamiento hace que el código sea difícil de analizar.

¿Nececitás hacer algo especial?


Saludos.-

Foxero

unread,
Aug 27, 2013, 8:54:24 PM8/27/13
to publice...@googlegroups.com
Gracias por responder Ricardo.

Aragdesco tu sugerencia, pero creo que seria cuestion de re-analizar el uso de CASE, pues lo que necesito es que se ejecuten todos los codigos ELSE en cascada en el caso de que todos los IF anidados den falso. Trate primero con CASE, pero no le encontre la forma. Obviamente el codigo de cada ELSE es distino, por lo que no es factible ponerlo en OTHERWISE.

Saludos
David

Foxero

unread,
Aug 27, 2013, 9:00:04 PM8/27/13
to publice...@googlegroups.com
Gracias por tu respuesta Fernando.

Estoy de acuerdo contigo en que demasiados IF anidados (en mi caso 10) hacen el codigo poco elegante y complicado de analizar, pero ya le di vueltas al asunto varios dias (uso de CASE, usar procedimientos recursivos, etc.) y creo que la alterniativa mas adecuada es el uso de IF anidados.

Por lo pronto te puedo comentar que con los IF anidados ya funciona adecuadamente el codigo y VFP no dio problemas con los 10 niveles de anidamiento.

Saludos
David

Foxero

unread,
Aug 27, 2013, 9:12:37 PM8/27/13
to publice...@googlegroups.com
La estructura de IF anidados es asi:

IF condicion1
    codigo a ejecutar
    sale de los if
ELSE
    codigo a ejecutar
    IF condicion2
        codigo a ejecutar
        sale de los if
    ELSE
        codigo a ejecutar
        IF condicion3
            codigo a ejecutar
            sale de los if
        ELSE
            codigo a ejecutar
            IF condicion4
                codigo a ejecutar
                sale de los if
            ELSE
                codigo a ejecutar
                IF condicion5
               
Asi hasta 10 niveles de if

Si se les ocurre alguna forma de hacer esto con CASE sera bienvenida su contribucion. Gracias

Saludos
David


On Tuesday, August 27, 2013 4:39:15 PM UTC-5, Ricardo Pina wrote:

Ricardo Pina

unread,
Aug 27, 2013, 10:14:49 PM8/27/13
to Grupo VFP
Hola
 
Veo que por cada condicion sale de los if, con lo que pensaria en los case por la negacion o afirmacion contraria
 
 
Saludos
 

Douglas Sánchez

unread,
Aug 27, 2013, 10:20:53 PM8/27/13
to publice...@googlegroups.com
La logica esta mal estructurada, para dar una mejor opinion deberias de mostrar el codigo real

yo lo haria mas asi. dependiendo claro de la condicion respectiva de cada uno

saludes

Douglas




--
Ing. Douglas Sánchez Guillén
      Consultor Informatico
Claro: 505 88495476

Fer

unread,
Aug 28, 2013, 6:00:41 AM8/28/13
to publice...@googlegroups.com

Hola Foxero, hay otra forma de hacer lo mismo y que  quede más claro :

Try
   Código a ejecutar
   If condic. 1
      Código a ejecutar
      Exit
   Endif

   Código a ejecutar
   If condic. 2
      Código a ejecutar
      Exit
   Endif

   Código a ejecutar
   If condic. 3
      Código a ejecutar
      Exit
   Endif

   Etc.

Endtry

Igualmente, si pudieras poner el código, tal vez se vea otra forma.

Saludos

Carlos Miguel FARIAS

unread,
Aug 28, 2013, 8:44:52 AM8/28/13
to Grupo Fox
La pregunta del límites de IF (o cualquier combinación de instrucciones estructuradas, como FOR, SCAN, DO WHILE, DO CASE etc) es de 384. Valor que sale de la ayuda de VFP
Coincido con los colegas, deberías analizar de reestructurar tu código.
Por el esquema planteado, cada una de las partes de código a ejecutar antes de cada if, debería incluirse dentro de una función procedimiento que si devuelva verdadero o falso, según corresponda o convenga y ejecutar en un do case
DO CASE
   CASE Pregunta1(parametros si hacen falta)
   CASE Pregunta2
(parametros si hacen falta)
   CASE Pregunta3
(parametros si hacen falta)
...
   CASE PreguntaN
(parametros si hacen falta)
ENDCASE

FUNCTION Pregunta1(parametros si hacen falta)
   IF Condicion1
      Codigo a Ejecutar1
      RETURN .T.
   ELSE
      RETURN .F.

FUNCTION Pregunta2(parametros si hacen falta)
   Codigo a Ejecutar al entrar aqui
   * Esto se ejecuta solo si Pregunta anterior, respondio No.
   IF Condicion2
      Codigo a Ejecutar2
      RETURN .T.
   ELSE
      RETURN .F.
             
El resto igual que pregunta 2, la ventaja, mucho más facil para depurar código, mejor encapsulamiento, si es necesario, si se necesitan pasar valores a otras funciones, se pueden usar parámetros por referencia, y se puede reutilizar còdigo si en alguna rama es necesario.
Saludos: Miguel, La Pampa (RA)


Foxero

unread,
Aug 28, 2013, 11:52:13 AM8/28/13
to publice...@googlegroups.com
Hola de nuevo!

Excelentes soluciones las de Fernado y Miguel, una vez analizadas creo que la de Fernado se ve mas elegante y clara, asi que me quedare con esa.

Gracias a todos por sus sugerencias.

Sabia que en el foro encontraria mejores soluciones alternas!!

Saludos
David
Reply all
Reply to author
Forward
0 new messages