PureBasic

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