Skip to content

Для пунктов меню лучше использовать логику CASE или IF? #9

Description

@brightproject

Ищу оптимальный код для своего меню.
Перелопатил с десяток примеров, и обратил внимание, что во многом коде меню, пункты записаны массивом

const char *channelNames[] = {
  "Channel 1",
  "Channel 2",
  "Channel 3",
  "Channel 4",
  "Channel 5",
  "Channel 6",
  "Channel 7",
  "Servo 1",
  "Servo 2",
  "Drive",
};

или

char *menuTxt[] = {
"Temperature",
"Humidity",
"Both","Battery",
"Backlight",
"Contrast",
"EEPROM dump",
"Graph",
"Help",
"Reboot"
};

А в некоторых, зашиты жестко в коде

  switch (menu) {
    case 0:
      menu = 1;
      break;
    case 1:
      lcd.clear();
      lcd.print(">MenuItem1");
      lcd.setCursor(0, 1);
      lcd.print(" MenuItem2");
      break;
    case 2:
      lcd.clear();
      lcd.print(" MenuItem1");
      lcd.setCursor(0, 1);
      lcd.print(">MenuItem2");
      break;
    case 3:
      lcd.clear();
      lcd.print(">MenuItem3");
      lcd.setCursor(0, 1);
      lcd.print(" MenuItem4");
      break;
    case 4:
      lcd.clear();
      lcd.print(" MenuItem3");
      lcd.setCursor(0, 1);
      lcd.print(">MenuItem4");
      break;
    case 5:
      menu = 4;
      break;
  }

И здесь вопрос собственно - что предпочтительнее использовать конструкцию SWITCH-CASE или IF-ELSE?

switch (var) {
    case 1:
      //выполняется, когда var равно 1
      break;
    case 2:
      //выполняется когда  var равно 2
      break;
    default: 
      // выполняется, если не выбрана ни одна альтернатива 
      // default необязателен 
  }
  if(var=1) //выполняется, когда var равно 1;
  if(var=2) //выполняется, когда var равно 2;

Вопрос эстетики или действительно важно применять ту или иную конструкцию?
В более поздних примерах кода из интернете(до 2017 года) применяют больше IF-ELSE.
В свежих примерах(с 2018 и до нг) чаще встречаю SWITCH-CASE.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions