Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / на сколько плох Break для выхода из блока / 25 сообщений из 39, страница 1 из 2
29.10.2019, 10:21
    #39882584
yemets63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
возник спор, на сколько плох break для выхода из цикла, блока?

я использую break достаточно редко , и вот хочеться в большом цикле на основании условий выскочить из блока, коллега не рекомендует, ни чем не обосновывает.
в конкретном случае если не использовать break и делать проверки, в простом выражении привести индекс к итоговому значению цикла, чтобы он сам остановился просто не получится, так как придется проверять еще десяток переменных, пока индекс по кругу дойдет к самому циклы и прекратит работать.


и так, чам плох "Break;" ?
...
Рейтинг: 0 / 0
29.10.2019, 10:23
    #39882586
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
yemets63,

Ничем, городить чушь ничем не обосновывая может каждый... Даже я...
...
Рейтинг: 0 / 0
29.10.2019, 10:25
    #39882587
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
yemets63,

break - это бессмысленное разбазаривание циклов впустую. Хуже него только continue.
Циклы надо доводить до конца. Вдруг в последних итерациях что-нибудь интересное встретится.
...
Рейтинг: 0 / 0
29.10.2019, 10:29
    #39882588
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
...
Рейтинг: 0 / 0
29.10.2019, 10:29
    #39882589
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
yemets63,

Плохо, это когда цикл ради break:
Код: pascal
1.
2.
3.
4.
5.
6.
repeat
  if ... then Break;

  if ... then Break;

until True;




Ну и большой цикл(если подразумевается что-то монструозное на несколько экранов) тоже не есть хорошо...
...
Рейтинг: 0 / 0
29.10.2019, 10:38
    #39882596
yemets63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
ma1tus,

goto я использовал последний раз в Basic примерна эдак году в 1993
...
Рейтинг: 0 / 0
29.10.2019, 12:51
    #39882667
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
yemets63возник спор, на сколько плох break для выхода из цикла, блока?

я использую break достаточно редко , и вот хочеться в большом цикле на основании условий выскочить из блока, коллега не рекомендует, ни чем не обосновывает.
в конкретном случае если не использовать break и делать проверки, в простом выражении привести индекс к итоговому значению цикла, чтобы он сам остановился просто не получится, так как придется проверять еще десяток переменных, пока индекс по кругу дойдет к самому циклы и прекратит работать.


и так, чам плох "Break;" ?есть у него одна проблема, большой исходник с break, а так же с Exit мешает бездумно копипастить
...
Рейтинг: 0 / 0
29.10.2019, 14:02
    #39882696
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
yemets63в простом выражении привести индекс к итоговому значению циклаАсь? Это вы такое для for цикла придумали?
zinpubПлохо, это когда цикл ради break:
Код: pascal
1.
2.
3.
4.
5.
6.
repeat
  if ... then Break;

  if ... then Break;

until True;

Иногда такой цикл сильно повышает читабельность кода
...
Рейтинг: 0 / 0
29.10.2019, 15:01
    #39882730
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
[quot _Vasilisk_]yemets63в простом выражении привести индекс к итоговому значению циклаАсь? Это вы такое для for цикла придумали?
zinpub

Ну когда-то break-continue не было. Может это еще те "динозавры"?
...
Рейтинг: 0 / 0
29.10.2019, 15:13
    #39882745
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
настоящие пацаны для выхода из цикла бросают исключение!!111
...
Рейтинг: 0 / 0
29.10.2019, 15:18
    #39882751
sql2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
Квейднастоящие пацаны для выхода из цикла бросают исключение!!111

или halt, да?


Новички почитают и примут к сведению... к чему этот топик?
...
Рейтинг: 0 / 0
29.10.2019, 15:56
    #39882775
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
yemets63возник спор, на сколько плох break для выхода из цикла, блока?
На 0.

yemets63коллега не рекомендует, ни чем не обосновывает.
Поменьше слушайте всяких идиотов.
...
Рейтинг: 0 / 0
29.10.2019, 15:57
    #39882776
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
В С++ можно помечать функцию как "безвозвратную".
Код: plaintext
1.
[[noreturn]] void f();

Типа - после её вызова не стоит ждать продолжения и, стало быть, можно, например, особо не компилять код в строчках после точки вызова....
...вот и нам бы циклы такие. безвозвратный цикл, в котором break запрещен. :)
...
Рейтинг: 0 / 0
29.10.2019, 15:59
    #39882778
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
ёёёёёВ С++ можно помечать функцию как "безвозвратную"
Мне иногда не хватает этого в дельфях - только не в варианте "помечать", а в варианте "оптимизатор проследил граф передачи управления". Не вижу причин плохо делать руками то, что элементарно делается автоматически.
...
Рейтинг: 0 / 0
29.10.2019, 16:03
    #39882784
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
Кстати, хозяйке на заметку, функция IndexOf
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function IndexOf(AItem: TType): Integer;
begin
  for Result := 0 to Count - 1 do begin
    if AItem = Items[Result] then
      Exit;
  end;
  Result := -1;
end;
...
Рейтинг: 0 / 0
30.10.2019, 09:43
    #39882962
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
[quot zinpub]yemets63,

Плохо, это когда цикл ради break:
Код: pascal
1.
2.
3.
4.
5.
6.
repeat
  if ... then Break;

  if ... then Break;

until True;


Ничего подобного. Если цикл можно прервать по десятку условий, что в until ставить-то?
...
Рейтинг: 0 / 0
30.10.2019, 10:01
    #39882970
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
[quot Василий 2]zinpubyemets63,

Плохо, это когда цикл ради break:
Код: pascal
1.
2.
3.
4.
5.
6.
repeat
  if ... then Break;

  if ... then Break;

until True;


Ничего подобного. Если цикл можно прервать по десятку условий, что в until ставить-то?

В данном случае, я иллюстрировал использование Break = Goto[Until]
...
Рейтинг: 0 / 0
30.10.2019, 10:04
    #39882972
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
Василий 2Ничего подобного. Если цикл можно прервать по десятку условий, что в until ставить-то?

Я бы сделал функцию IsFinished
...
Рейтинг: 0 / 0
30.10.2019, 16:04
    #39883161
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
zinpubЯ бы сделал функцию IsFinished Которое будет проверяться в конце итерации. Тогда как Break прервет итерацию досрочно.

Предложите добавить еще пару-тройку if в тело цикла?
...
Рейтинг: 0 / 0
30.10.2019, 16:23
    #39883173
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
_Vasilisk_,

Я нигде не говорил, что Break нельзя использовать.

Конечно если придумать мегацикл, то необходимо выходить Break'ом - но лучше, имхо, как-то разбивать подобные циклы...
...
Рейтинг: 0 / 0
30.10.2019, 16:30
    #39883178
yemets63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
круто, мы спорили меньше с коллегой.

маленькие циклы ни когда не использую break

а тут огромный, рожденный пару лет назад кем то, условие заказчика, что нужно добавить условие и если оно выполнено выходить, break было простым и лучшем решением.

всем спасибо
...
Рейтинг: 0 / 0
30.10.2019, 17:19
    #39883211
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
zinpubКонечно если придумать мегацикл,Вот вам простейший цикл
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
while True do begin
  if c1(a) then
    a := f1(a);

  if c2(a) then
    break;

  a := f2(a);
end;

сможете избавиться от break не ухудшив читабельность?
...
Рейтинг: 0 / 0
30.10.2019, 17:40
    #39883228
delphinotes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
_Vasilisk_zinpubКонечно если придумать мегацикл,Вот вам простейший цикл
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
while True do begin
  if c1(a) then
    a := f1(a);

  if c2(a) then
    break;

  a := f2(a);
end;

сможете избавиться от break не ухудшив читабельность?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  if c1(a) then
    a := f1(a);
  while not c2(a) do
  begin
    a := f2(a);
    if c1(a) then
      a := f1(a);
  end;


или так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure d1(var a); inline;
begin
  if c1(a) then
    a := f1(a);
end;

  d1(a);
  while not c2(a) do
  begin
    a := f2(a);
    d1(a);
  end;


или даже так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure d1(var a); inline;
begin
  if c1(a) then
    a := f1(a);
end;

function d2(var a): Boolean; inline;
begin
  Result := not c2(a);
  if Result then
    a := f2(a);
end;

  d1(a);
  while d2(a) do
    d1(a);
...
Рейтинг: 0 / 0
30.10.2019, 17:45
    #39883232
delphinotes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
собственно последний вариант элементарно уже приводится к
Код: pascal
1.
2.
3.
repeat
  d1(a);
until d2(a);


предварительно инвертировав результат в d2
...
Рейтинг: 0 / 0
30.10.2019, 17:51
    #39883239
delphinotes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сколько плох Break для выхода из блока
В целом, что Break, что Continue, что даже Exit вполне можно использовать в циклах, не понимаю, почему это может считаться дурным тоном.
Собственно как и goto - в крайне редких случаях код с goto получается читабельнее, но это только в специфических (библиотечного типа) алгоритмах (шифрование, какое-нибудь конвертирование/преобразование). Т.е. в тех случаях когда написал, оттестировал и забыл.

В прикладных задачах, всё-таки, лучше разделять на мелкие куски и всё приводить к простым конструкциям.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / на сколько плох Break для выхода из блока / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]