Select: EndSelect
Select <expression1> Case <expression> [, <expression> [<numeric expression> To <numeric expression>]] ... [Case <expression>] ... [Default] ... EndSelect
Описание
Оператор Select предоставляет возможность определить быстрый выбор. Программа выполнит выражение <expression1> и сохранит его значение в памяти. Затем она сравнит это значение со всеми значениями выражений <expression> операторов Case, и если значение выражения <expression> данного оператора Case истинное, она выполнит соответствующий код и покинет структуру Select. Оператор Case поддерживает множественные значения и диапазоны значений с помощью дополнительного ключевого слова To (только для числовых значений <numeric expression>). Если ни одно из значений операторов Case не будет истинным, то выполняется код оператора Default (если задан).
Примечание: Select допускает значения с типом float в качестве значения <expression1>, но округляет их вниз до ближайших целых (сравнения производятся только с целочисленными значениями).
Комментарий: конструкция Select: EndSelect в Purebasic работает методом перебора, в связи с этим при увеличении количества вариантов выбора, линейно увеличивается среднее время выбора варианта. Если необходим быстрый выбор, который бы не зависел от количества вариантов, используйте конструкцию кода основанную на процедурах из примера №3.
Пример: Простой пример
Value = 2 Select Value Case 1 Debug "значение Value = 1" Case 2 Debug "значение Value = 2" Case 20 Debug "значение Value = 20" Default Debug "Я не знаю" EndSelect
Пример: множественных значений и диапазона значений.
Value = 2 Select Value Case 1, 2, 3 Debug "Множество значений, а именно 3 значения на 1 Case" Case 10 To 20, 30, 40 To 50 Debug "Значение составляет от 10 до 20, ровно 30 или от 40 до 50" Default Debug "Я не знаю" EndSelect
Пример: Замена конструкции Select: EndSelect на более быструю подпрограмму основанную на процедурах.
Procedure x1() ; создание процедуры для обработки первого варианта выбора Debug #PB_Compiler_Procedure ; любые нужные Вам действия, при срабатывании первого варианта EndProcedure Procedure x2() ; создание процедуры для обработки второго варианта выбора Debug #PB_Compiler_Procedure ; любые нужные Вам действия, при срабатывании второго варианта EndProcedure Procedure x3() ; и так далее Debug #PB_Compiler_Procedure ; и так далее EndProcedure Dim Proc.i(2) ; объявление массива для хранения адресов процедур Proc(0) = @x1() ; запись адреса процедуры x1() в элемент массива с индексом 0 Proc(1) = @x2() ; тоже с остальными процедурами. Proc(2) = @x3() ; ... ; код программы ; ... Value = 2 ; это значение, которое использовалось бы в операторе Select CallFunctionFast(Proc(Value)) ; это вместо оператора Select, по значению Value сразу отправляет в нужную процедуру. End