avva: (Default)
[personal profile] avva
(только программистам интересно, наверное)

Почему в процедуральных языках, как правило, нет оператора досрочного выхода из блока? Как break в C, но чтобы работал не только из циклов, а также внутри if-then или вообще любого блока.

Постоянно приходится делать глупые вложенные цепочки условий или некрасивые трюки типа while(1) и выполза по break'у (ну или, понятно, их аналоги в других языках).

Есть какая-то глубокая причина этому?

Date: 2003-04-12 08:55 am (UTC)
From: [identity profile] gera.livejournal.com
Сразу приходит в голову return как выход сразу из всей функции, вне зависимости от того, насколько глубоко ты там сидишь в циклах и сравнениях.

Re:

Date: 2003-04-12 08:59 am (UTC)
From: [identity profile] avva.livejournal.com
Да, конечно. Но всего лишь из-за того, что тебе нужно сделать серию сравнений, не всегда есть смысл выделять её в отдельную функцию.

Ситуация: тебе нужно сделать одну проверку; если она проходит, вторую; если эта проходит, третью, и если третья проходит, выполнить некую нетривиальную последовательность действий. Возможность проведения каждой провеки зависит от успеха предыдущей. Проверки относительно сложны, так что их не записать в качестве одного длинного if'а. Логика происходящего абсолютно прозрачна. Но тебе приходится делать три вложенных блока, или трюк с while(1), или выделять это всё в отдельную функцию, что вовсе необязательно имеет смысл делать.

это вообще просто

Date: 2003-04-12 09:00 pm (UTC)
From: [identity profile] 109.livejournal.com
begin
startup_code;
try
if not Cond1 then Exit;
if not Cond2 then Exit;
if not Cond3 then Exit;
do нетривиальную последовательность действий;
finally
cleanup_code;
end;
end;

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 30th, 2025 03:16 am
Powered by Dreamwidth Studios