C/C++

Как заменить конструкцию if/then/else на goto?!

Собственно отрывок из книги Роберта Мартина "Чистая архитектура" с обзором ограничений накладываемое на программиста парадигмами программирования...
Просто посмотри, что такое IF и GOTO в языке Fortran-IV.
Goto в то время и goto сейчас - это существенно разные вещи.

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

Так что под "заменой if" подразумевается не убирание if из текста программы, а замена структурного if:

if условие then
блок кода
end

на if с переходом:

if условие then goto метка

Именно в последнем стиле писали код на Fortran-IV - потому как ничего другого в языке не было.

P.S. Понятно, что структурный if появился задолго до статьи - ещё в Algol-60. Но Дейкстра обобщил и систематизировал принципы написания кода.
Ринат Кубагушев
Ринат Кубагушев
65 419
Лучший ответ
goto просто переход по метке, а переход часто с условием...это если уж ассемблер вспомнить, так что чисто заменить if/then/else на goto не выйдет.
Олег Тирус
Олег Тирус
77 062
Шерзод Ташметов Скорее всего Вы правы, невозможно избавиться в структурном языке от if. В ООП получается такое возможно.
Шерзод Ташметов Нет, в ООП тоже никак. Нельзя вообще никак избавиться от if. Дядюшка Боб канифолит мозг.
goto-зло!
За него олдфаги могут и побить
Хайбула Саидов
Хайбула Саидов
52 813
Акбархуджаи Атохуджа не умеешь пользовать не пользуй
Заменить можно вот такую вот конструкцию структурного программирования
if (!error) {
// Нормальная работа
}
else {
// Обработка ошибки
return ...
}
на сишную вида:
if (error)
goto error_processing;
// Нормальная работа
return ..
error_processing:
// Обработка ошибки
return ...
if или другая проверка условия при этом никуда не исчезает.
не умеешь пользоваться не используй
Шерзод Ташметов Вопрос же не в этом. Тут другое - вешает ли лапшу дядюшка Боб?
просто я языках программирования есть такая возможность.например надо поставить метку и по ней переходить
metka:
print('1')
print('2')
print('3')
print('4')
goto metka
.
Этот код выведет 12341234....
Рус Тр
Рус Тр
777
Александр Кузнецов Не выведет...
Там print('5') нету
Шерзод Ташметов Можно написать что-то типа этого:
х = 1;
loop1:
х++;
if (х < 100) goto loop1;
Но как заменить условие на goto? Как инструкция if выглядит на машинном уровне? АЛУ выдает состояния флагов. флаги..., но их тоже нужно проверять...