если во всё углубляться жизни не хватит - знания быстро устаревают, тем более при современном её ритме
Лично для меня как наверное для многих людей которые сидят на этои форуме программирование это хобби - а к своему коду у меня есть 3 условия 1. Код должен быть рабочим и решать МОЮ задачу 2. Код должен быть написан таким образом, чтобы Я понимал как он работает 3. Код должен быть написан таким образом, чтобы открыв исходник через пару лет Я сам смог вспомнить как он работает какие операторы для этого использовать, (и все прочие правила например как обзывать переменные, писать одну большую длинную портянку или активно использовать процедуры и функции, delay, и.т.д. и и.т.п это уже вопрос вкуса) p.s: понятно что для работе над проектом в команде такой подход не приемлем - так как все участники быстро перестанут понимать друг друга.
В моем случае, оказалось, что Си и Unix - это тоже фундаментальные знания. Не устарели за более чем 30 лет. При том, что 20 лет это никак не связано с работой.
Чёт не зашло, букв много, а аргументация ... статья Кнута полувековой давности и та сильнее. =========================== Мужики, заметьте, даже сам основатель, пророк и апостол секты гоутуфобов Н. Вирт, вынужден был оставить goto в своём языке "Паскаль". Ни на какие мысли не навевает? Зато разработчики языка INTERCAL оказались "святее пророка" и не стали включать goto в свой язык, полагая его четырёхбуквенной мерзостью. Зато в языке есть оператор come from ("получить управление из"). «Как обаятельно для тех, кто понимает», правда?
Есть/умеем - пользуемся Нет/не умеем - не пользуемся, Остальное - религия. Лучшие аргументы в любую сторону: - Бог есть (гото хорошо/ гото плохо), потому что я в него верю! - Потому что! ("О чем говорят мужчины")
Но их-то в статье и не было! Или в упоминавшейся статье Кнута: "И чего они прицепились к этому goto? Потому, что слово из четырёх букв?" (для тех, кто не в курсе - английское выражение "слово из четырёх букв" эквивалентно нашему "слово из трёх букв") А в статье всё скучно и пресно :-(
Ну я ссылку дал не для развлечения а чтоб показать что не так страшен goto как им пугают. Я не пользуюсь-потому что напугали на старте хотя и не вижу ничего плохого. Привык без него и еду по накатанной. Есть же jmp в асме? Чем не goto? А тема и правда интересная
про "плохое" написал SergeiL в самом первом ответе. GoTo нарушает правильную структуру кода (для тех, кому эта "структура" важна) По моему мнению главная опасность goto для новичков - обманчивая легкость применения. Вместо того чтоб продумывать правильное взаимодействие кучи вложенных циклов, куда как проще натыкать переходы по goto, превратив код в "винигрет", в котором даже сам автор через месяц не сможет разобраться. Это обьяснение того, почему я в целом отношусь к гото негативно. Хотя вполне допускаю, что в умелых руках goto программу не портит. В некотором смысле в поддержку своей точки зрения могу сказать, что я крайне редко вижу goto в исходниках программистов среднего и выше-среднего уровня, видимо у профессионалов есть свои причины его не использовать.
Я вот тоже думаю, с какой стороны разбивать яйца лучше - с тупой или с острой. Не берусь утверждать, но кажется видел более важную проблему, нежели красота чужого кода (ох уж эта забота о правильности других): в древнееврейские времена компиляторы Си не всегда хорошо работали с памятью там, где было много гото. Отсюда и пошла нелюбовь профи с оператору. Потом все наладилось, а мифы и верования - они по наследству. Но вот ссылку не дам и сильно не настаиваю.
красота любого кода (своего или чужого) почти всегда означает его большую понятность - а значит и легкость отладки, поддержки и модифицирования. и почему я так люблю проекты с исходниками и люто ненавижу бинарные прошивки ? - потому что люблю покопаться в чужом коде и при случае утащить что-то в свои проекты
Да, чего в ней такого интересного? Эпичные гото-срачи отшумели ещё в 70-ые - 80-ые. С тех пор я как-то ничего нового не видел - ни новых аргументов, ни красивых поворотов мысли.
Но бывает что без него никак. к примеру в swith-case: Код (C++): .... switch (parN) { case 1: ..... goto m1; m0: ..... break; case 2: m1: ..... goto m0; break; default: ..... break; } Позволило мне отказаться от вызова ряда функций (экомил стек) да и код короче стал (это для флеш)... да и быстрее в ряде мест... особенно если не желаешь терять контекст (состояние регистров)
а можно увидеть этот кусок в реальном коде? Учитывая, что case можно выполнять насквозь, если убрать break - вот так, например, не тоже самое выйдет? Код (C++): switch (parN) { case 1: ..... // код перед goto m1 case 2: ..... // код m1 ..... // код m0 break; default: ..... break; }
В этом примере достаточно вычеркнуть break и выполнение кода из одного case x перетечёт в следующий case y. ыыыы сова опередила
Воот вспомнили. В асме без этого никуда. Перефразируя декабристов хочется сказать "Страшно далеки мы от народа железа"