comutador fall-through para executar uma sequência de etapas


9

Meu programa precisa executar uma sequência de etapas do início ao fim. Mas, com base em entradas diferentes, o ponto de partida variará, por exemplo, alguns serão executados desde o primeiro passo até o fim, outros serão executados do 2º passo até o final, outros serão executados do 3º ao final, etc.

Eu só preciso de um design simples, atualmente eu uso o switch fall-through assim:

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, mas a queda no código sempre me deixa desconfortável. Existe uma maneira melhor e simples de fazer isso?


1
Você não deve cruzar. Acredito que sua pergunta faça sentido neste site. Portanto, se eu fosse você, eu a excluiria no Stack Overflow.
Vincent Savard

1
OK, eu apaguei no SO e atualizei minha pergunta aqui também. Obrigado.
precisa saber é o seguinte

Os dados necessários para cada etapa são os mesmos? Você pode extrair cada etapa em sua própria função com os mesmos argumentos e tipo de retorno?
precisa

não é por isso que a solução matriz pode não se aplicar ao meu caso
Qiulang

Respostas:


4

Dependendo do idioma que você está usando, é possível criar uma matriz de funções e usá-lo stepcomo ponto de partida para fazer um loop sobre elas. Algo como:

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

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

Obrigado, atualmente estou usando javascript, mas acho que sua solução também se aplica ao c / c ++. Obrigado!
precisa saber é o seguinte

Essa seria a solução ideal, desde que a entrada e a saída de cada função sejam iguais.
precisa

4

A maneira como você está fazendo isso é perfeitamente boa e simples; é para isso que serve a inovação em primeiro lugar. Se você ficar mais confortável, poderá adicionar um comentário explicando o que está fazendo (para que outra pessoa não demore meia hora para entender por que é assim).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.