GOAR, case готов, вышло в 2.5.0:
селектор - integer, char или string. метки - числа, символы, строки и именованные константы (в т.ч. из юнитов), можно списком через запятую и диапазоном. в ветке один оператор или begin..end:
key := getKeyClicked;
case key of
KE_KEY2: y := y - 1;
KE_KEY8: y := y + 1;
// несколько меток на одну ветку
KE_KEY4, KE_KEY6: x := x + key - KE_KEY5;
// несколько операторов - через begin..end
KE_KEY5:
begin
drawText('hello', 10, 10);
repaint;
end;
// пустая ветка
KE_STAR: ;
// диапазон, границы включены
0..31: delay(50);
else
// если ничего не совпало
x := 0;
y := 0;
end;
по строкам и символам тоже работает:
case name of
'left', 'l': dx := -1;
'right': dx := 1;
end;
case c of
'a', 'e', 'i', 'o', 'u': kind := 1;
'0'..'9': kind := 2;
#32: kind := 3;
end;
что нужно знать:
1) метка - только константа, переменную туда нельзя (ошибка E410)
2) в else можно писать сколько угодно операторов до end, без begin..end
3) срабатывает первая совпавшая ветка, в следующую ничего не проваливается. если ничего не совпало и else нет - ничего не происходит
4) повтор метки или пересечение диапазонов - ошибка компиляции E465 duplicate case label
5) вложенные case, break и exit внутри ветки работают. break выходит из цикла, в котором стоит case
6) строки сравниваются с учетом регистра, как и через =
один нюанс с if внутри ветки: else после ; относится к case, а не к if (как в turbo pascal):
case n of
1: if ok then go;
else stop; // это else от case, а не от if
end;
в 2.5.0 также вошло все из прошлой тестовой сборки: новый редактор, record в разных модулях, быстрая компиляция больших модулей, apk под android 7
описание case с примерами в доке:
https://helltar.com/midletpascal/#statements