5 votes

Existe-t-il un moyen de ressembler simplement à une table de vérité ?

Existe-t-il un moyen simple de ressembler à une table de vérité en code ? Elle comporte 2 entrées et 4 résultats, comme indiqué ci-dessous :

enter image description here

Mon code actuel est :

private void myMethod(bool param1, bool param2)
{
    Func<int, int, bool> myFunc;
    if (param1)
    {
        if (param2)
            myFunc = (x, y) => x >= y;
        else
            myFunc = (x, y) => x <= y;
    }
    else
    {
        if (param2)
            myFunc = (x, y) => x < y;
        else
            myFunc = (x, y) => x > y;
    }
    //do more stuff
}

5voto

Dmitry Bychenko Points 17719

Je suggère d'utiliser un array c'est-à-dire

  // XOR truth table
  bool[][] truthTable = new bool[][] {
    new bool[] {false, true},
    new bool[] {true, false},
  };

...

  private void myMethod(bool param1, bool param2, bool[][] table) {
    return table[param1 ? 0 : 1][param2 ? 0 : 1];
  }

0voto

Shannon Holsinger Points 1807
public int myTest(bool a, bool b)
{
  if(!b)
    return 3;
  return a ? 1 : 2;
}

0voto

René Vogt Points 2704

Pour simplifier votre code, vous pouvez utiliser param1 y param2 comme des bits d'une valeur indexée dans un tableau prédéfini :

private void myMethod(bool param1, bool param2)
{
    Func<int, int, bool>[] myFuncs = {
        (x, y) => x > y,
        (x, y) => x < y,
        (x, y) => x <= y,
        (x, y) => x >= y
    };

    int index = (param1 ? 2 : 0) + (param2 ? 1 : 0);
    Func<int, int, bool> myFunc = myFuncs[index];
    //do more stuff
}

Mais bien sûr, la simplicité et la lisibilité sont dans l'œil du lecteur.

Si les deux paramX son false , index sera 0 . Si les deux sont true , index sera 3 etc...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X