Не зависящая от языка версия (в основном, очевидно, это не считается для декларативных или других странных языков):
Когда I преподавали программирование (довольно давно, я буду свободно признавать), язык состоял из трех способов выполнения инструкций:
- последовательность (все по порядку).
- выбор (делая одно из многих).
- итерация (выполнение чего-либо ноль или более раз).
Операторы if
и case
являются вариантами выбора. If
используется для выбора одного из двух различных параметров в зависимости от условия (с использованием псевдокода):
if condition:
do option 1
else:
do option 2
с учетом того, что else
может не понадобиться, в этом случае он фактически else do nothing
. Также помните, что опция 1 или 2 может также состоять из любого из типов операторов, включая больше if
операторов (называемых вложением).
Case
немного отличается - обычно он предназначен для более чем двух вариантов, например, когда вы хотите делать разные вещи на основе персонажа:
select ch:
case 'a','e','i','o','u':
print "is a vowel"
case 'y':
print "never quite sure"
default:
print "is a consonant"
Обратите внимание, что вы можете использовать case
для двух вариантов (или даже одного), но это немного похоже на убийство мухи с помощью термоядерной боеголовки.
While
не вариант выбора, а итерационный. Он относится к for
, repeat
, until
и множеству других возможностей.
То, что является самым быстрым, не имеет значения в огромном большинстве случаев. Авторы компиляторов знают гораздо больше, чем мы, смертные люди, как получить последний бит производительности из своего кода. Вы либо доверяете им, чтобы они делали свою работу правильно, либо сами кодируете их в сборке (я бы предпочел первое).
Вы получите гораздо большую производительность, сконцентрировавшись на макросъемке, а не на второстепенных вещах. Это включает в себя выбор подходящих алгоритмов, профилирование и определение горячих точек. Нет ничего хорошего в том, чтобы найти что-то, что занимает пять минут каждый месяц, и запустить его за две минуты. Лучше добиваться меньшего улучшения в том, что происходит каждую минуту.
Языковые конструкции, такие как if
, while
, case
и т. Д., Уже будут настолько быстрыми, насколько это возможно, поскольку они интенсивно используются и относительно просты. Сначала вы должны писать код для удобства чтения и беспокоиться о производительности только тогда, когда это становится проблемой (см. YAGNI).
Даже если вы обнаружите, что использование if/goto
комбинаций вместо case
позволяет вам работать немного быстрее, результирующая болтовня исходного кода будет сложнее поддерживать в нужном направлении.