interruptor de caída para ejecutar una secuencia de pasos


9

Mi programa necesita ejecutar una secuencia de pasos de principio a fin. Pero en función de una entrada diferente, el punto de inicio variará, por ejemplo, algunos se ejecutarán desde el primer paso hasta el final, algunos se ejecutarán desde el segundo paso hasta el final, algunos se ejecutarán desde el 3er hasta el final, etc.

Solo necesito un diseño simple, actualmente utilizo un interruptor de caída como este:

switch (step) {
case 1:
     //do the 1st step
     //fall through, so no break here
case 2:
    //do the 2nd step
    //fall through
case 3:
    //do the 3rd step
    //fall through
...
}

Funciona, pero la caída del código siempre me incomoda. ¿Hay una manera mejor y más simple de hacerlo?


1
No deberías hacer crosspost. Creo que su pregunta tiene sentido en este sitio web, por lo que si fuera usted, eliminaría la pregunta sobre Stack Overflow.
Vincent Savard el

1
OK, lo eliminé en SO y actualizo mi pregunta aquí también. Gracias.
Qiulang

¿Los datos requeridos para cada paso son los mismos? ¿Puedes extraer cada paso en su propia función con los mismos argumentos y tipo de retorno?
Greg Burghardt

no, es por eso que la solución de matriz puede no aplicarse a mi caso
Qiulang

Respuestas:


4

Dependiendo del idioma que esté utilizando, puede crear una variedad de funciones y utilizarlas stepcomo punto de partida para recorrerlas. Algo como:

var functions = function[]
{
    step1,
    step2,
    step3,
    …
}

foreach (var index = step-1; index <= function.count; index++)
{
    functions[index]();
}

Gracias, actualmente estoy usando javascript pero creo que su solución también se aplica a c / c ++. ¡Gracias!
Qiulang

Esta sería la solución ideal, siempre que la entrada y salida de cada función sea la misma.
Greg Burghardt

4

La forma en que lo haces es perfectamente buena y simple; es para lo que es el fracaso en primer lugar. Si te hace sentir más cómodo, puedes agregar un comentario que explique lo que estás haciendo (para que otra persona no tarde media hora en entender por qué es así).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.