Цикломатическая сложность (ну это лучше, чем кол-вом строк мерять!) наименьшая у такого варианта:
- Код: Выделить всё
i:= 0;
Result := nil;
while (i < FSBox.ControlCount) and (FSBox.Controls[i] is TIBase) and (TIBase(FSBox.Controls[i]).Status=csFocus) do
inc(i);
if i < FSBox.ControlCount then
Result := TIBase(FSBox.Controls[i]);
Да и читабельность, на мой взгляд, лучше.
А еще можно как-то так (синтаксис условен):
Result := FSBox.Controls.Filter( (_ is TIBase) and (TIBase(_).Status=csFocus) ).GetFirst();
Это если бы были нормальные коллекции, lazy evaluation и чуть синтаксического сахара.
dedm0zaj писал(а):недавно использовал гото как выход из системы циклов. это было реально удобно.
А говнокод писать всегда удобнее, чем напрягать мозг и писать правильно. Иначе б его никто не писал.
Неудобно потом такой код читать. В том числе самому написавшему.
Дож писал(а):(2) поменяв простой for-range цикл на repeat-until
Вы на полном серьёзе утверждаете, что цикл for, по факту состоящий из присваивания и собственно цикла, проще, нежели просто цикл?