Skip to content

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

@brightproject

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.

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