IF иль не IF - вот в чем вопрос
- Войдите на сайт для отправки комментариев
Ср, 30/05/2018 - 07:39
Накатал вчера функцию для для аналоговой клавиатуры (5 клавиш с резистивным делителем)
Функция выглядит так
int getPressedButton()//Обработка нажатия клавиш. Возвращает значение клавиши. { int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0) if(buttonValue<70) return L; if(buttonValue<231) return S; if(buttonValue<410) return D; if(buttonValue<616) return R; if(buttonValue<879) return U; return N; }
Потом посмотрел в интернете, как это делают умные люди, и увидел, что они все применяют if....else или switch...
примерно так
byte key(){ int val = analogRead(0); // считываем значение с аналогового входа в переменную val if (val < 50) return 1; // сверяем переменную, если val меньше 50 возвращаем 1 (первая кнопка) else if (val < 150) return 2; // если val меньше 150 вторая кнопка и т.д. else if (val < 350) return 5; else if (val < 500) return 4; else if (val < 800) return 3; else return 0; // если ничего не подошло возвращаем 0 }
Возник вопрос, а обязательно ли в данном случае применять if....else или switch, когда в каждой строчке есть return? Почему гуру делают так?
Я конечно не гуру, но все зависит от задачи,
В вашем конкретном случае я бы просто if писал
Я, видимо, не гуру, никада так не делаю.
Потому что таких гуру "как собак нерезаных".
Спасибо всем кто откликнулся. А то у меня были сомнения. Вроде все нормально работает, а в глубине души какие-то подозрения...
В данном случае можете не заморачиваться, оставляйте самый первый вариант, с if-return. if...else применяется, если нужно уточнять несколько значений, а switch - это тот же if, только там удобнее записывать сразу несколько case для действия после проверки. if может быть записан switch-ем, а switch - кучкой if-ов. Все они равноценны, что применять в конкретном случае - решает программист.
Возник вопрос, а обязательно ли в данном случае применять if....else или switch, когда в каждой строчке есть return?
Не обязательно.
Почему гуру делают так?
Профессионалы многие вещи делают на автомате - это т.н. почерк по которому профессионала можно узнать. Любитель какждый раз думает, как бы сделать, и делает каждый раз по-разному, профи всегда делает одинаково.
Ваш код лучше уже тем, что не содержит лишних ключевых слов, мешающих его восприятию.
По эффективности с else или без else - абсолютно одниаково (по крайней мере, при опциях оптимизации "из коробки").
Если Вы любитель поиграть в игру "а дай-ка я ещё байтик сэкономлю" (как некоторые из коллег по форуму), то могу предложить Вам затравку, которая чуть-чуть лучше Вашего варианта. Точно говорю, что можно сэкономить ещё, но это уже задачка для Вас - ищите :)
Итак, игра "дай-ка я сэкономлю".
Ваш вариант:
Вариант на "копейку" экономнее по памяти
Попробуйте сэкономить ещё (это точно возможно!). Удачи! :))))
..............................
Попробуйте сэкономить ещё (это точно возможно!). Удачи! :))))