> О чем пост то? Каким образом goto коррелирует к ООП?Таким, что в ООП-языках сама потребность в goto крайне низкая. Навскидку, в последних двух проектах на C++, которыми занимался, мне ни разу даже в голову не пришло использовать goto. В то же время в C — сплошь и рядом.
> Семантика циклов для C/C++/JAVA - одинакова.
> if/break, while/break, for/break - в этом случае выход из цикла в одной
> точке. И все логика алгоритма линейно просматривается.
В Java нет goto (хотя есть некоторое приближение с continue/break), во всяком случае, в нынешнем её виде (AFAIK, изначально тов. Гослинг такую штуку сделал, но потом отказался). Так что сравнение не совсем корректно. :) Но дело не в циклах, а прежде всего — в автоматических переменных. При выходе из области видимости у объектов в C++ начинают срабатывать деструкторы, которые могут освобождать ресурсы (память, блокировки и т.д.). Поэтому в C++ можно в большинстве случае просто влупить return. В C такого, по определению, нет, и всё надо освобождать-подчищать заново. И паттерн вида «if ((buf = malloc(size)) == NULL) goto err;» очень даже улучшает читаемость и (да простят мне не проснувшемуся это слово) сопровождаемость кода.
> А если у тебя в цикле по условиям goto напиханы - например
> один выходит на инициализацию/начало цикла, второй где-то внутри цикла переходит, третий/четвертый
> выходит из цикла куда захочет - вот тут начинается бардак и
> катастрофа.
> Так же из бардака - это переход по goto части кода, вперед,
> а потом по какому-то условию возврат в пропущенную часть.
> И этот бардак справедлив как для С так и для C++
Полностью согласен. Но речь-то изначально была не об этом, а о том, что в силу особенностей языка в C использование goto — обыденность. Как и любым инструментом, им можно сделать хорошо, а можно — не очень.
Г-н Vitto74, которому я отвечал, как раз привёл пример уместности goto — или вы эту уместность как раз хотите оспорить?