оператор goto или рудимент убивающий ваш проект
Участников: 3
Страница 1 из 1
оператор goto или рудимент убивающий ваш проект
Давайте поговорим об этом многострадальном поператоре. Сейчас это уже история и он оставлен только для совместимости. Но как показало общение с новичками оператор goto по прежнему используеться современными кодерами, что меня просто ужасает.
Оператор goto выполняет переход на указанную строчку или метку.
В годах этак 60'ых, когда собственно бэйсик и придумали этот код был единственно возможным.
В прочем чему тут удивляться? Ведь программульки были совсем крохотные, а бэйсик носил больше учебный характер, чем реально использовался.
А оператор goto был прямым отражением процессорной команды jmp.
Потом появились метки, а номера строк стали не обязательны. И наш код можно было записать так.
Потом появились подпрограммы. А для них оператор gosub - перейти к подпрограмме.
Поклонники бэйсика вздохнули с облегчением. Теперь они смогли писать программы более наглядные и менее запутанные. Вот например
Но прогресс не стоит на месте и появился ещё более удобный механизм - процедуры и функции.
А кроме простого условного оператора if ... then и цикла for появились петли do ... loop и многовариантный выбор select case.
И примерно в середине 80'ых годов от goto решено было избавиться, как от устаревшего и вызывающего многочисленные ошибки, а код делающий неудобочитаемым. Его крайне не рекомендуют использовать.
Я с этим полностью согласен. Ещё на заре своей практики писал подобные программы, но уже через неделю не мог в них разобраться, так как путался в своих же метках и прыжках.
В прочем выжить без goto можно легко. Есть множество средств, о которых уже выше сказано. Их использование много удобнее и не вызывает путаницы.
Вот например наша програмка
На сегодняшний день оператор goto в некотором виде используеться только для обработки ошибок.
Использование оператора goto это признак начинающего незрелого программиста изучавшего бэйсик по книгам которые устарели ещё до его рождения.
Это критика в адрес современной образовательной системы, которая до сих пор учит школьников писать программы, как это делалось более полувека назад.
Если вы хотите писать серьёзные проекты, срочно забудте об операторе goto! Это будет трудно только первые пару дней.
Спрашивайте прямо здесь и я дополню главу соответствующими примерами.
Оператор goto выполняет переход на указанную строчку или метку.
- Код:
10 print "Hello!"
20 cls
30 input a
40 if a = 0 then goto 60
50 goto 20
60 print "goot bie"
В годах этак 60'ых, когда собственно бэйсик и придумали этот код был единственно возможным.
В прочем чему тут удивляться? Ведь программульки были совсем крохотные, а бэйсик носил больше учебный характер, чем реально использовался.
А оператор goto был прямым отражением процессорной команды jmp.
Потом появились метки, а номера строк стали не обязательны. И наш код можно было записать так.
- Код:
print "Hello!"
start:
cls
input a
if a = 0 then goto quit
goto start
quit:
print "goot bie"
Потом появились подпрограммы. А для них оператор gosub - перейти к подпрограмме.
Поклонники бэйсика вздохнули с облегчением. Теперь они смогли писать программы более наглядные и менее запутанные. Вот например
- Код:
goto start
misubproj:
print "enter number"
input a
resume
start:
print "Hello!"
question:
gosub misubproj
if a = 0 then quit
goto question
quit:
print "goot bie"
Но прогресс не стоит на месте и появился ещё более удобный механизм - процедуры и функции.
А кроме простого условного оператора if ... then и цикла for появились петли do ... loop и многовариантный выбор select case.
И примерно в середине 80'ых годов от goto решено было избавиться, как от устаревшего и вызывающего многочисленные ошибки, а код делающий неудобочитаемым. Его крайне не рекомендуют использовать.
Я с этим полностью согласен. Ещё на заре своей практики писал подобные программы, но уже через неделю не мог в них разобраться, так как путался в своих же метках и прыжках.
В прочем выжить без goto можно легко. Есть множество средств, о которых уже выше сказано. Их использование много удобнее и не вызывает путаницы.
Вот например наша програмка
- Код:
print "Hello"
do
cls
print "enter number"
input a
loop while a = 0
print "goot bie"
На сегодняшний день оператор goto в некотором виде используеться только для обработки ошибок.
Использование оператора goto это признак начинающего незрелого программиста изучавшего бэйсик по книгам которые устарели ещё до его рождения.
Это критика в адрес современной образовательной системы, которая до сих пор учит школьников писать программы, как это делалось более полувека назад.
Если вы хотите писать серьёзные проекты, срочно забудте об операторе goto! Это будет трудно только первые пару дней.
Спрашивайте прямо здесь и я дополню главу соответствующими примерами.
Re: оператор goto или рудимент убивающий ваш проект
так, к слову...
- Код:
[tux@nb777 linux-2.6.30.1]$ grep -rl 'goto' ./|wc -l
6073
Re: оператор goto или рудимент убивающий ваш проект
согласен с тем, что с goto через неделю, можно не разобраться со своими исходниками. как-то я разбирал программу, правдо на c, якобы крутого старого программера. там на 3 кб кода, пока читал, запутался в goto. когда я у него спросил, он отмазался мол, так ближе к ассемблеру. я подумал мммда.
впринципе goto можно и не убирать, мне он не мешает.
начинающие, не бойтесь, goto только вредно на языках высокого уровня. если вы начнете учить ассемблер, там без goto (jmp) необойтись.
впринципе в ассемблере есть петли, типа loop с различными условиями, переходы по условию, если меньше,больше,равно, неравно и т.д., но все-равно без jmp не обходится.
впринципе goto можно и не убирать, мне он не мешает.
начинающие, не бойтесь, goto только вредно на языках высокого уровня. если вы начнете учить ассемблер, там без goto (jmp) необойтись.
впринципе в ассемблере есть петли, типа loop с различными условиями, переходы по условию, если меньше,больше,равно, неравно и т.д., но все-равно без jmp не обходится.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: оператор goto или рудимент убивающий ваш проект
goto ещё неплох, тогда когда ваша программка совсем крохотная, а в противном случае это действительно начинаеться чёрти что.
Ведь кажеться пространство имён на метки не влияет.. Да и одноименные метки, в двух разных классах нельзя использовать.
Что заставляет придумывать им уникальные имена.
Последний мой проект, где я пользовал goto загнулся именно из-за того, что я всего лиш написав 3200 строку, окончательно запутался в метках.
(ух, прошло столько лет а я даже помню, сколько строк! Вот ведь, на что приходилось обращать внимание. А там ещё были проблемы что весь проект в память за один раз не грузился, а был всего-то 120 kb в компильнутом состоянии. )
И я считаю, что избегание goto это хороший тон.
Кроме того логика структурного программирования его так же не приветствует.
А вот assembler... Ну что тут сказать? куда же без jmp и прочих фишек? На сём ведь и держиться ветвление.
А циклы это лишь жалкое подобие конструкций высокоуровневых языков.
Ведь кажеться пространство имён на метки не влияет.. Да и одноименные метки, в двух разных классах нельзя использовать.
Что заставляет придумывать им уникальные имена.
Последний мой проект, где я пользовал goto загнулся именно из-за того, что я всего лиш написав 3200 строку, окончательно запутался в метках.
(ух, прошло столько лет а я даже помню, сколько строк! Вот ведь, на что приходилось обращать внимание. А там ещё были проблемы что весь проект в память за один раз не грузился, а был всего-то 120 kb в компильнутом состоянии. )
И я считаю, что избегание goto это хороший тон.
Кроме того логика структурного программирования его так же не приветствует.
А вот assembler... Ну что тут сказать? куда же без jmp и прочих фишек? На сём ведь и держиться ветвление.
А циклы это лишь жалкое подобие конструкций высокоуровневых языков.
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения