belyankin.
Вначале, имеет смысл подумать над тем, что будет выиграно при использовании "switch/case".Поправьте пожалуйста, если ошибаюсь, но по сути, входящее значение будет сравниваться со всеми значениями конструкции, пока не получит соответствие с одной из них. На сколько я это помню из C#. То же самое будет и при "if/else" помещённом внутрь цикла. Тогда, при практическом равенстве функциональности этих шаблонов, преследуя лишь цель удобочитаемости и сокращения кода, нужно так же понимать, что вызываемые инструкции в ответ на соответствующие данные всё равно придётся описывать и наличие "switch/case" не упрощает эту задачу.
Помещаем цикл проверки входящих данных в функцию и функциями же, описываем вызываемые инструкции, ссылки на их вызовы помещаем в объект, а в массиве описываем все варианты входящих значений, на которые нужно реагировать:
objMyFunc:={}
objMyFunc.vasya:=Func("VasyaFunc")
objMyFunc.petya:=Func("PetyaFunc")
objMyFunc.vova:=Func("VovaFunc")
objMyFunc.noname:=Func("NoNameFunc")
incommingValue_01 := "petya"
incommingValue_02 := "kostya"
Global arr:=["vasya","petya","vova"] ; проверяемые значения (case)
objMyFunc[SwitchMyVal(incommingValue_01)].()
objMyFunc[SwitchMyVal(incommingValue_02)].()
objMyFunc[SwitchMyVal("zamanali_sosedi")].()
objMyFunc[SwitchMyVal("vova")].()
ExitApp
SwitchMyVal(val) {
Loop,% arr.Length() {
if (arr[A_Index] == val)
return arr[A_Index]
}
return "noname"
}
VasyaFunc() {
MsgBox,, Title, Вася
}
PetyaFunc() {
MsgBox,, Title, Петя
}
VovaFunc() {
MsgBox,, Title, Вова
}
NoNameFunc() {
MsgBox,, Title, Нет такого имени
}
Тогда получится довольно понятный код, разбитый на категории, где обращение к четырём входящим значениям описывается четырьмя строками. Если функции должны принимать параметры:
objMyFunc:={}
objMyFunc.vasya:=Func("VasyaFunc")
objMyFunc.petya:=Func("PetyaFunc")
objMyFunc.vova:=Func("VovaFunc")
objMyFunc.noname:=Func("NoNameFunc")
incommingValue_01 := "petya"
incommingValue_02 := "kostya"
Global arr:=["vasya","petya","vova"] ; проверяемые значения (case)
objMyFunc[SwitchMyVal(incommingValue_01)].(" счастлив!")
objMyFunc[SwitchMyVal(incommingValue_02)].(". Странные дела творятся...")
objMyFunc[SwitchMyVal("zamanali_sosedi")].(". УБИТЬ СОСЕДЕЙ!!!")
objMyFunc[SwitchMyVal("vova")].()
ExitApp
SwitchMyVal(val) {
Loop,% arr.Length() {
if (arr[A_Index] == val)
return arr[A_Index]
}
return "noname"
}
VasyaFunc(fVal:="") {
MsgBox,, Title, Вася%fVal%
}
PetyaFunc(fVal:="") {
MsgBox,, Title, Петя%fVal%
}
VovaFunc(fVal:="") {
MsgBox,, Title, Вова%fVal%
}
NoNameFunc(fVal:="") {
MsgBox,, Title, Нет такого имени%fVal%
}
Это немного сложнее чем оформление в блоки "if/else", внутри которых бы помещалось и описание инструкций, вынесенных в этом примере в рамки функций, но сложно это только на первый взгляд. Всё описание программы можно выполнить построчно не используя циклов и это будет ещё проще, но ведь Вы прибегаете в этой беседе к технологиям, не имеющим реализации в этом языке, а значит намеренно пытаетесь привнести в свою программу сложности, с помощью которых мог бы быть обретён новый способ описания. Это в первую очередь сообщает, что Вы пытаетесь расти над собой, а значит, разговоры про рыбу и прочее, противоречат этому стремлению и вряд ли могут быть уместны.