GOTO - это круто в языке, где нет функций и ООП =) В PHP он в принципе не нужен. Но ничего плохого в нем нет. На любом ЯП можно писать говнокод, даже если это Java. P.S. и, помоему, демон, который слушает сокет, будет выглядеть логичнее, если его постоянное выполнение будет обеспечиваться безусловнм переходом, а не циклом.
goto - единственная возможность вызвать подпрограмму или процедуру. Мы пользуемся этим "оператором" каждый день, только называем его "функция" или "процедура". На вызов функции требуются накладные расходы (сохранение регистров и возврат значений). Поэтому, если в пределах одной функции применить оператор goto в чистом виде то мы можем получить более "быстрый код", несмотря на то что выглядеть он будет не очень "красиво". Злоупотребление операторов goto начинающими программистами привело к устоявшемся мнению что оператор goto "зло". Посмотрев на код новичков, можно сказать что и функции "зло" Конечно, оператор "goto" сложнее поддерживать разработчику, но прирост скорости, полученный в критическом участке оправдывает его использование. Теперь о php и goto. Реализацию не смотрел, но что-то мне подсказывает что в php этим оператором не получится увеличить скорость какого-то участка приложения, поэтому считаю goto в php рудиментом
Код (Text): #include <cstdio> void main() { switch(18) { // Мы - взрослые в 18 case 18 : goto adult; // Совершеннолетие в США - 21 год case 21 : adult: std::printf("You are adult already!\n"); } } Упрощенный вид полезности условного перехода. Пример быть может не совсем удачный придумал, но идею отражает. Ничего не имею против такого, но чтобы как попрыгунчик скакать по огромному коду - нет,
А ещё мне в С# очень нравится такая хрень: Код (Text): public static readonly string Foo = "bar"; public static void Main() { string f = "bar"; switch(f) { case Foo: break; } } В результате у нас =))
не хочу про goto. В моём любимом бейсике на «Кванте» (ZX Spectrum совместимый) меня рельно колбасило, что можно выйти из любой точки программы в другую часть без всяких else'ов. Хотя, сейчас мы реализуем тоже самое через всякие PHP: <?php for(…) { if (…) { … break; } }?> или PHP: <?php do{ … } while(…) Которые точно так же влияют на читабельность кода. Кстати, по сути, исключения, со своими PHP: <?php try{ … } catch (Exception $e){ … } работают в качестве некого условного goto. В ООП goto нафиг не сдался в его классическом смысле, но от чего-то типа goto работающем в пределах одного метода я б не отказался. Другой вопрос, что такой goto будет сам по себе функционально излишен. А в процедурном, кто его знает. По идее наши PHP: <?php if ($error) { header('Location: путь_к_странице_с текстом_ошибки'); } ?> или PHP: <?php if ($error) { header('Location: путь_к_странице_спасибо_за_оставленное_сообщение'); } ?> тоже некое подобие goto И вообше, Эдсгер В. Дейкстра Доводы против оператора goto, DONALD E. KNUTH Structured Programming with go to Statements
Третий вопрос - "почему утка плавает"? Или я один пока не понял, как "учимся думать" относится к вопросам без ответа?
Luge Там же приводится исследование, которое показывает, что операторы выхода из цикла улучшают понимание программы.
Может ли несокрушаемое препятстиве противостоять всесокрушающей силе? Подобные противречия - следствие несовершенной логики.
я вот учился сегодня думать на C++ блин, потратив 6 часов на приложения в 4кб я понял как же я люблю пхп =) а ещё то что думать на Сишнике нельзя. на нём можно только делать, причём всё и вся. потому что готового ничего нет
Ну со временем у тебя будут наработки некоторых вещей, простым копипастом их в проект можно вполне быстро реализовывать некоторые вещи. Я вон для использования zlib потратил когда то время, написал две глобальные функции (а внутри столько кода...), и теперь просто беру этот юнит и использую эти две фунции
нет, блина, он полезен. Тота его перевели в off по умолчанию и отменяют вообще. Олег, ты меня пугаешь такими вопросами. Вот чую, что в чём-то наипать хотят, но пока не пойму в чём. Кроме вопросов безопасности register_globals On так же влечёт за собой и мешанину в коде. На тебе 2 примера притянутых за уши. *в сторону: сам бы лучше написал по своим вопросам мешанина в коде PHP: <?php session_start(); // какая-нибудь проверка авторизации, // авторизация не прошла $_SESSION['admin'] = false; // где-то позже расскажем всем, кто тут главный $admin = 'Сегодня наш админ Вася'; // показывать ли панель модерации if($_SESSION['admin']) { echo 'Добро пожаловать, админ. Кого сегодня будем банить?'; } else { echo 'Пшёл вон, смерд! '.$admin; } ?> проблемы с безопасностью PHP: <?php // в security.inc.php проверили авторизован ли юзер // и является ли админом. // как результат имеем $is_admin == true/false // (и не чего мне говорить, что можно работать с константами и сессией. // Каков вопрос…) include 'security.inc.php'; if($is_admin) { echo 'Добро пожаловать, админ. Кого сегодня будем банить?'; } else { echo 'Пшёл вон, смерд!'; } ?> http://example.com/file.php?is_admin=1 получаем доступ к главной кнопке
хехе, однажны я видел код, где какой-то умелец из цикла выходил с помощью гоуту)) причем оператор брейк в том языке существовал)) с другой стороны, если поразмыслить, то в ассемблере все к тому и сводится - к условному переходу. если только не используется оператор loop