8 votes

Ce type de fonction ou de technique a-t-il un nom ?

Bonjour, je suis un peu novice en programmation, plutôt un hobby. Je me demande si la logique ou la technique suivante a un nom ou un terme spécifique. Mon projet actuel comporte 7 cases à cocher, une pour chaque jour de la semaine. J'avais besoin d'un moyen facile de sauvegarder les cases cochées.

La méthode suivante permet de sauvegarder les cases cochées en un seul nombre. Chaque case cochée reçoit une valeur qui est le double de la dernière case cochée. Lorsque je veux savoir quelles cases sont cochées, je travaille à rebours et je vois combien de fois je peux diviser la valeur totale par la valeur de la case à cocher.

private int SetSelectedDays()
{
     int selectedDays = 0;
     selectedDays += (dayMon.Checked) ? 1 : 0;
     selectedDays += (dayTue.Checked) ? 2 : 0;
     selectedDays += (dayWed.Checked) ? 4 : 0;
     selectedDays += (dayThu.Checked) ? 8 : 0;
     selectedDays += (dayFri.Checked) ? 16 : 0;
     selectedDays += (daySat.Checked) ? 32 : 0;
     selectedDays += (daySun.Checked) ? 64 : 0;
     return selectedDays;
}

private void SelectedDays(int n)
{
     if ((n / 64 >= 1) & !(n / 64 >= 2))
     {
          n -= 64;
          daySun.Checked = true;
     }
     if ((n / 32 >= 1) & !(n / 32 >= 2))
     {
          n -= 32;
          daySat.Checked = true;
     }
     if ((n / 16 >= 1) & !(n / 16 >= 2))
     {
          n -= 16;
          dayFri.Checked = true;
     }
     if ((n / 8 >= 1) & !(n / 8 >= 2))
     {
          n -= 8;
          dayThu.Checked = true;
     }
     if ((n / 4 >= 1) & !(n / 4 >= 2))
     {
          n -= 4;
          dayWed.Checked = true;
     }
     if ((n / 2 >= 1) & !(n / 2 >= 2))
     {
          n -= 2;
          dayTue.Checked = true;
     }
     if ((n / 1 >= 1) & !(n / 1 >= 2))
     {
          n -= 1;
          dayMon.Checked = true;
     }
     if (n > 0)
     {
          //log event
     }
}

Cette méthode fonctionne bien pour ce dont j'ai besoin, mais si vous voyez une autre façon de faire, ou une meilleure façon d'écrire, je serais intéressé par vos suggestions.

0voto

Luiscencio Points 1569

Vous pouvez utiliser un enum... c'est plus lisible et plus joli

    public enum daysOfWeek
    {
        Mon = 1, Tue = 2, Wed = 4, Thu = 8, Fri = 16, Sat = 32, Sun = 64
    }

0voto

sisis Points 522

Vous pouvez cacher la complexité dans une fonction : et il est préférable de décaler les bits au lieu de les diviser

private bool get_bit(int val, int idx)
{
  return ((val >> idx) & 1) != 0;
}

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