Switch / Case

  •   239 
  • 最後發表   阿建  2024 四月 30
阿建 發文於   2024/03/03

小幫手及小編您好,我有訂閱XQ企業版。
https://xshelp.xq.com.tw/XSHelp/?HelpName=case&group=CONTROLFLOW
目前範例中是,

Switch (變數)
Begin
  Case 運算式1:  符合運算式1時所執行的指定;

  Case 運算式2:  符合運算式2時所執行的指定;

  Default:      都不符合時所執行的指令;
End;

那想請問一下,CASE 1 有很多行,例如以下,那符合運算式1規則時指定的1~3也會正常執行嗎?謝謝。

Switch (變數)
Begin
  Case 運算式1:  符合運算式1時所執行的指定1;
                           符合運算式1時所執行的指定2;
                           符合運算式1時所執行的指定3;

  Case 運算式2:  符合運算式2時所執行的指定;

  Default:     都不符合時所執行的指令;

End;

排序方式: 標準 | 最新
XS小編 發文於   2024/03/07

Hello 阿建,

 

有多個指令時會全部都執行。

舉例來說:

switch(dayOfWeek(date)) begin

    case 1,2 :

        value1 = 10;

        value2 = 10;

    case 3, 4, 5 :

        value1 = 20;

        value2 = 20;

    end;

 

plot1(value1);

plot2(value2);

 

畫在指標上的話value1和value2都會是相同的值。

  • 按讚來自於
  • qwer921921
阿建 發文於   2024/04/28

小幫手及小編您好,我有訂閱企業版。
想問一下系統實務上是如何運作,這樣的想法是否會很耗系統效能。
假如以下我選擇case 0執行,那請問系統會跑case1~5後面的程式碼嗎,尤其 higest算是耗能的函數?
若是,未來我就會把不使用的case1~5 前面加入//了。

switch(0)
begin 
case 0: condition1 = true ;
case 1: condition1 = c> higest(c[1],20);
case 2: condition1 = c> higest(c[1],120);
case 3: condition1 = c> higest(c[1],140);
case 4: condition1 = c> higest(c[1],160);
case 5: condition1 = c> higest(c[1],180);
end;

 

虎科大許教授 發文於   2024/04/28

若Switch後面的值是0,則只會執行Case 0後面的程式碼。這種情況,不需要使用Switch結構,直接將程式改成condition1=true即可。Switch是多向選擇結構,會根據Switch後面的值逐一比對下面的Case,哪個Case條件先符合就執行哪個Case。

  • 按讚來自於
  • qwer921921
XS小編 發文於   2024/04/30

Hello 阿建,

 

switch沒有選到的部分不會執行。

但需注意highest是以節省效能優先所撰寫的函數,若switch的選項在腳本中會變動導致highest不會每根Bar都執行的話,小編建議您改用 simplehighest 避免運算錯誤。

感謝 虎科大許教授 的熱心回覆。

  • 按讚來自於
  • qwer921921
發表回覆
Close