17th Январь 2007
Романчик

Bead ve neged goto

posted in coding |

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

С таким бекграундом я запряг Гуглу запросом «goto operator is bad practice» и получил ссылку, где говорится следующее:

«The GOTO statement has been the target of criticism, because if GOTOs are over-used it becomes very easy to produce unreadable and generally unmaintainable «spaghetti code».»

Из этого пассажа следует, что злоупотребление GOTO сильно снижает читабельность исходника. Заинтересовавшись как можно злоупотребить этим оператором я попросил гуглу поискать страницы по запросу «goto spaghetti code». Первый же ответ дал искомый результат:

GOTO for loop
10 i = 0
20 i = i + 1
30 if i < = 10 then goto 80
40 if i > 10 then goto 60
50 goto 20
60 print "Program Completed."
70 end
80 print i; " squared = "
90 i * i
100 goto 20
for i = 1 to 10
print i; " squared = "; i * i
next i
print "Program Completed."

Сравните оба варианта, несомненно в первом случае код нечитабелен. А ведь это ещё простой пример, представьте себе программы в тысячи строк где нет функций, а переход осуществляется прыжками. Да, такой GOTO действительно вреден и должен быть запрещен министерством здравоохранения по причине охранения здравого смысла людей вынужденных читать этот код!

Но если внимательно присмотреться, что мы видим? Мы видим, что этот код уже лет 20 как устарел. В сегодняшних реалиях мало кто в здравом смысле, будет имитировать структуры for…next, foreach, while….loop и перемещаться произвольно по коду не используя удобные функции. Это значит то, что бойкотировать GOTO уже не актуально. По моему нескромному мнению у этого оператора существует своя ниша использования (обработка ошибок в VB6 и выход из вложенных функций), и нелепо утверждать, что он плох. Он плох когда им ошибочно пытаются заменить все остальные конструкции. Это как использовать инструмент не по назначению — к хорошему это не приводит.

Опубликовано: Среда, Январь 17th, 2007 в 17:56 » RSS 2.0

Leave a Reply

  • Случайное фото

  • IMGA0569

    Date: 12/24/2006