
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. Но Дейкстра обобщил и систематизировал принципы написания кода.
Goto в то время и goto сейчас - это существенно разные вещи.
Дейкстра обобщил опыт использования языков того времени и сформулировал свойства операторов ветвления и цикла, позволяющие писать хорошо структурированный и легко читаемый код. И все современные императивные языки программирования базируются именно на идеях Дейкстры.
Так что под "заменой if" подразумевается не убирание if из текста программы, а замена структурного if:
if условие then
блок кода
end
на if с переходом:
if условие then goto метка
Именно в последнем стиле писали код на Fortran-IV - потому как ничего другого в языке не было.
P.S. Понятно, что структурный if появился задолго до статьи - ещё в Algol-60. Но Дейкстра обобщил и систематизировал принципы написания кода.
goto просто переход по метке, а переход часто с условием...это если уж ассемблер вспомнить, так что чисто заменить if/then/else на goto не выйдет.
Шерзод Ташметов
Скорее всего Вы правы, невозможно избавиться в структурном языке от if. В ООП получается такое возможно.
Шерзод Ташметов
Нет, в ООП тоже никак. Нельзя вообще никак избавиться от if. Дядюшка Боб канифолит мозг.
goto-зло!
За него олдфаги могут и побить
За него олдфаги могут и побить
Акбархуджаи Атохуджа
не умеешь пользовать не пользуй
Заменить можно вот такую вот конструкцию структурного программирования
if (!error) {
// Нормальная работа
}
else {
// Обработка ошибки
return ...
}
на сишную вида:
if (error)
goto error_processing;
// Нормальная работа
return ..
error_processing:
// Обработка ошибки
return ...
if или другая проверка условия при этом никуда не исчезает.
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....
metka:
print('1')
print('2')
print('3')
print('4')
goto metka
.
Этот код выведет 12341234....
Александр Кузнецов
Не выведет...
Там print('5') нету
Там print('5') нету
Шерзод Ташметов
Можно написать что-то типа этого:
х = 1;
loop1:
х++;
if (х < 100) goto loop1;
Но как заменить условие на goto? Как инструкция if выглядит на машинном уровне? АЛУ выдает состояния флагов. флаги..., но их тоже нужно проверять...
х = 1;
loop1:
х++;
if (х < 100) goto loop1;
Но как заменить условие на goto? Как инструкция if выглядит на машинном уровне? АЛУ выдает состояния флагов. флаги..., но их тоже нужно проверять...
Похожие вопросы
- If else c#
- Почему за использование goto тебя могут забить ногами
- C++. Есть ли функция для завершения работы программы (аналог goto в самый конец программы)?
- Учу с++, можете объяснить на пальцах? не понимаю работу условия в теле цикла... if ((i+1)%3 != 0)
- C++ Кто то сможет объяснить, почему конструкция switch срабатывает не по плану?
- C++ как написать if(x!=1,2,3)
- С++ | Как заменить макс. элементы (могут быть введены любые) массива на нули и вывести изменённый массив уже с нолями?!
- Циклы C++. Создание программ с циклическими конструкциями.
- Язык С. Что значит данная конструкция? while(*s++=*c++) Заранее спасибо!
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси