Do - While

Do - While

IT-юмор

5.7K поста52.5K подписчиков

Добавить пост

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору

Вы смотрите срез комментариев. Показать все
60
Автор поста оценил этот комментарий
while : подумал, сделал
do while : сделал, подумал
я это так запомнил
раскрыть ветку (14)
44
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (11)
23
Автор поста оценил этот комментарий

For: бездумно сделал n раз

6
Автор поста оценил этот комментарий

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

раскрыть ветку (7)
1
Автор поста оценил этот комментарий
Нет задачи, которую нельзя решить в тьюринг-полном языке без goto при наличии функций.
раскрыть ветку (3)
1
Автор поста оценил этот комментарий

Я не сомневаюсь. Рассмотрим примере

for(int i = 0; i < 100; i++) {

for(int j = 0; j < 100; j++) {

if(i + j > 120) {

//выйти из обоих циклов

}

}

}


Решения (которые вижу я)

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

2. Использовать функцию для решения этой задачи.

3. Дописать в код первого цикла if(flag) { break; } и ставить флаг в true когда хотим выйти из цикла и вызывать break во втором цикле. (изначально flag == false)

4. Переписать первый цикл как (for int i = 0; i < 100 && !flag; i++) и аналогично варианту 3 ставить flag = true.


Эти варианты в случае большей вложенности (не спорю, что множественная вложенность циклов — дурное дело, но бывает, что нужно) циклов заставляют код несколько разрастаться. В функцию засовывать не всегда хочется по той причине, что в функции, где изначально этот код, лишь пара строчек, помимо этого. Не спорю, что можно. Переписать алгоритм не всегда возможно. 3 и 4 вариант заставляют так или иначе разрастаться код.

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

раскрыть ветку (2)
3
DELETED
Автор поста оценил этот комментарий
В PHP выходишь из двух циклов через break 2;

Думаю и в других языках есть подобные решения.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я назвал решения, которые возможны в подавляющем числе языков. Я писал на java, там возможен выход из цикла к метке, в swift, на котором я сейчас пишу, тоже, если память не изменяет. Но далеко не всегда есть подобное решение, и опять же, далеко не всегда приходится писать на языке, который знаешь настолько, чтобы знать тонкости, а это тонкости, если судить по тому, какое количество людей знает про подобные вещи. Кому-то данные вещи покажутся синтаксическим сахаром, однако. Смысл лишь в том, что я вам привел пример, когда goto не является каким-то демоном из ада. Да, в настоящее время в языках программирования он не слишком нужен, однако смысл в том, что сам по себе goto не плох. Просто случилось так, что многие программисты использовали его там, где его нельзя использовать как по соображениям читаемости кода, так и по соображениям безопасности — например, обход инициализации переменной. Сейчас языки, поддерживающие goto, зачастую предоставляют защиту от второй проблемы. Первую же проблему решили радикально - оператор запретили использовать во многих языках. Однако дело не в самом операторе, дело в программистах. В самом операторе нет совершенно ничего плохого, если использовать его так, чтобы не приходилось страдать.

DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (2)
Автор поста оценил этот комментарий

Выход из вложенных циклов (C++), когда циклы выносить в отдельную функцию получится по-уебански. Да и вообще, главное правило применения goto -- не переходить назад. Практически всегда при соблюдении этого правила и прочих равных, всё будет ok .

раскрыть ветку (1)
2
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
1
Автор поста оценил этот комментарий

Break: одумался

Автор поста оценил этот комментарий

goto: undique ad inferos tantundem viae est

1
Автор поста оценил этот комментарий

while: подумал, сделал, подумал, ... сделал, подумал, вышел из цикла.

do while: сделал, подумал, сделал, подумал, ... сделал, подумал, вышел из цикла.

Как уже писали, если до цикла не на краю, разницы нет.

DELETED
Автор поста оценил этот комментарий

do while - скорее "сделал - проверил продолжать ли".

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку