Найти тему
Войти в IT

Абсолютное зло в программировании. Оператор goto.

Оглавление

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

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

И если кто-то будет доказывать тебе обратное - не спорь, а лучше - сразу беги. Перед тобой представитель тьмы 🥷

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

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

Что такое оператор goto? 🚀

Оператор goto – это инструкция, которая позволяет мгновенно перейти к определенной метке в программе. Метка представляет собой место в коде, которое помечено специальным идентификатором - текстом. После того, как программа достигает метки, выполнение продолжается с инструкции, следующей сразу за меткой.

Иными словами, оператор goto мгновенно телепортирует выполнение программы из точки А в точку Б. При этом, goto не накладывает на программиста и на среду выполнения абсолютно никаких ограничений. И фактически, goto безусловным образом мгновенно переносит точку выполнения куда угодно.

Никогда не знаешь что произойдет на самом деле, когда используешь goto.
Никогда не знаешь что произойдет на самом деле, когда используешь goto.

Стоит ли говорить о том, что если внутри программы применяется сразу несколько операторов goto, то из просто "странно стилизованной" программы она превращается в настоящий черный ящик, поведение которого зачастую остается загадкой.

Вот так выглядит типичный способ применения оператора goto, например в языке программирования C#:

string q = "Some string";
List<string> pairs = new List<string>();
for (int i = 0; i < 30; i++) { pairs.Add(string.Format("{0} {1}", q, i); }
goto point_a;
//какой-то другой программный код - десятки или сотни строк
//...
//...
point_a:
//Третий программный код, программа продолжит выполняться проигнорировав все что было между goto и point_a;

Кто и когда придумал goto? 🗿

Оператор goto (по свидетельствам из различных источников) был введен в язык программирования Fortran в 1954-1956 годах. Fortran был одним из первых языков программирования, и оператор goto был добавлен для управления потоком выполнения программы. С тех пор он был включен во многие языки программирования, включая C, C++, Java и другие.

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

Сложно так же сказать о том, есть ли реальная выгода и большая польза от последовательного "протаскивания" этого оператора по всем языкам вплоть до настоящего 2023 года. Тем не менее, с давних времен сохраняется добрая традиция выслеживать любителей оператора goto и перевоспитывать их в светлую сторону программирования.

Почему goto до сих пор используется? 🤔

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

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

Третья причина - старый-древний переходящий по наследству в пяти поколениях программный код. Как мы знаем, многие программы (и особенно программные комплексы) основаны на других программах, или программных библиотеках. В свою очередь, многие библиотеки "старой школы" зачастую содержат в себе удивительные конструкции и неожиданные способы решения привычных задач. По-этому, не удивляйтесь если встретите 20-25 летнюю программу с включениями goto. Такое тоже бывает.

Типичные проблемы оператора goto ❌

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

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

Ну и напоследок, мини соцопрос! Ну-ка признавайтесь, кто использовал хоть раз в свой практике goto? Есть ли среди нас истинные грешники? 😈

Краеугольный камень темных материй с вечной классикой - оператором goto.
Краеугольный камень темных материй с вечной классикой - оператором goto.

🔥 Понравилось? Подпишись! Победим восстание роботов вместе! 🔥

-4

🚀 P.S. Ты можешь круто поддержать меня и проект "Войти в IT" на boosty! Я публикую там более эксклюзивный и профессиональный, иногда немного личный контент. Хочешь посмотреть как я выгляжу в реальной жизни? Тогда жми: Ссылка 🚀

P.S.2 У меня ещё есть Telegram-канал. Там посты чуть попроще, и чуть повеселей. Ссылка