Оператор select
Оператор select предназначен для сокращенной записи нескольких последовательных проверок переменной на равенство одному из ряда значений (которые в противном случае необходимо было бы оформить как блоки elseif). В зависимости от значения переменной оператор
select выполняет один из блоков case. Количество таких блоков не ограничено.
Ниже показано, как отобразить одну из нескольких возможных строк в соответствии со значением переменной i.
i = 2
select i
case 1
disp("One")
case 2
disp("Two" )
case 3
disp("Three")
else
disp("Other")
end
В результате, как и следовало ожидать, в консоли будет отображена строка "Two".
Блок else выполняется в случае, если значение переменной не соответствует ни одному из перечисленных вариантов.
Наличие блока else не является обязательным, но считается хорошей практикой. Действительно, даже если программист полагает, что соответствующее этому блоку событие в нормальных условиях никогда не может произойти, ошибка в логике выполнения программы может привести к непредсказуемым результатам. При отсутствии проверки скрипт продолжит выполняться и в наихудшем случае завершится без сообщений об ошибках, вернув неверный результат. Отладка такого скрипта представляет крайне сложную задачу, поскольку неясно, какая инструкция повлекла нарушение работы. Блок else призван воспрепятствовать распространению ошибки и может помочь в том, чтобы точнее определить место ее возникновения.
Таким образом, блок else должен присутствовать в большинстве конструкций select. Для обработки непредвиденных ситуаций в составе блока else часто применяется функция
error. Функция error отображает сообщение об ошибке, содержащее указанный в качестве параметра текст. При этом поток управления прерывается, интерпретатор Scilab покидает все вызванные функции и возвращает управление консоли Scilab.
Модифицируем предыдущий пример. Теперь в случае отрицательного значения переменной i будем выводить сообщение об ошибке.
i = -5;
select i
case 1
disp("One")
case 2
disp("Two" )
case 3
disp("Three")
else
error ( "Unexpected value of the parameter i" )
end
В результате будет отображено:
__>i = -5;
-->select i
-->case 1
--> disp("0ne")
-->case 2
--> disp("Two")
-->case 3
--> disp("Three")
--> else
--> error ( "Unexpected value of the parameter i" )
Unexpected value of the parameter i
На практике, когда конструкция select не содержит блока else, необходимо задаться вопросом, является ли такая ситуация результатом тщательного анализа либо банального упущения. Предположение о том, что блок else никогда не будет выполнен, часто не оправдывается.