За последние 24 часа нас посетил 16681 программист и 1572 робота. Сейчас ищут 998 программистов ...

Учимся думать:

Тема в разделе "Прочее", создана пользователем флоппик, 27 фев 2010.

  1. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    GOTO - это круто в языке, где нет функций и ООП =) В PHP он в принципе не нужен. Но ничего плохого в нем нет. На любом ЯП можно писать говнокод, даже если это Java.

    P.S. и, помоему, демон, который слушает сокет, будет выглядеть логичнее, если его постоянное выполнение будет обеспечиваться безусловнм переходом, а не циклом.
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Да-да, даёшь явНакод))
     
  3. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    goto - единственная возможность вызвать подпрограмму или процедуру. Мы пользуемся этим "оператором" каждый день, только называем его "функция" или "процедура". На вызов функции требуются накладные расходы (сохранение регистров и возврат значений). Поэтому, если в пределах одной функции применить оператор goto в чистом виде то мы можем получить более "быстрый код", несмотря на то что выглядеть он будет не очень "красиво".

    Злоупотребление операторов goto начинающими программистами привело к устоявшемся мнению что оператор goto "зло". Посмотрев на код новичков, можно сказать что и функции "зло" :)

    Конечно, оператор "goto" сложнее поддерживать разработчику, но прирост скорости, полученный в критическом участке оправдывает его использование.

    Теперь о php и goto. Реализацию не смотрел, но что-то мне подсказывает что в php этим оператором не получится увеличить скорость какого-то участка приложения, поэтому считаю goto в php рудиментом
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Код (Text):
    1. #include <cstdio>
    2.  
    3. void main()
    4. {
    5.     switch(18) {
    6.        
    7.         // Мы - взрослые в 18
    8.         case 18 :
    9.             goto adult;
    10.  
    11.         // Совершеннолетие в США - 21 год
    12.         case 21 :
    13.             adult:
    14.             std::printf("You are adult already!\n");
    15.     }
    16. }
    Упрощенный вид полезности условного перехода.
    Пример быть может не совсем удачный придумал, но идею отражает.
    Ничего не имею против такого, но чтобы как попрыгунчик скакать по огромному коду - нет,
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А ещё мне в С# очень нравится такая хрень:

    Код (Text):
    1. public static readonly string Foo = "bar";
    2.  
    3. public static void Main() {
    4.     string f = "bar";
    5.  
    6.     switch(f) {
    7.         case Foo:
    8.             break;
    9.     }
    10. }
    В результате у нас
    =))
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    не хочу про goto. В моём любимом бейсике на «Кванте» (ZX Spectrum совместимый) меня рельно колбасило, что можно выйти из любой точки программы в другую часть без всяких else'ов. Хотя, сейчас мы реализуем тоже самое через всякие
    PHP:
    1. <?php for() {
    2.     if () {
    3.       …
    4.       break;
    5.     }
    6. }?>
    или
    PHP:
    1. <?php
    2. do{
    3.    …
    4. } while()
    Которые точно так же влияют на читабельность кода. Кстати, по сути, исключения, со своими
    PHP:
    1. <?php try{
    2.    …
    3. } catch (Exception $e){
    4.    …
    5. }
    работают в качестве некого условного goto.
    В ООП goto нафиг не сдался в его классическом смысле, но от чего-то типа goto работающем в пределах одного метода я б не отказался. Другой вопрос, что такой goto будет сам по себе функционально излишен.
    А в процедурном, кто его знает. По идее наши
    PHP:
    1. <?php
    2. if ($error) {
    3.  header('Location: путь_к_странице_с текстом_ошибки');
    4. }
    5. ?>
    или
    PHP:
    1. <?php
    2. if ($error) {
    3.  header('Location: путь_к_странице_спасибо_за_оставленное_сообщение');
    4. }
    5. ?>
    тоже некое подобие goto

    И вообше, Эдсгер В. Дейкстра Доводы против оператора goto, DONALD E. KNUTH Structured Programming with go to Statements
     
  7. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Luge
    Позволь дополнить:
    http://c2.com/cgi/wiki?GoTo

     
  8. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    А я в Делфи не знаю как выйти из двух циклов без goto, поэтому использую его только в этом случае.
     
  9. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Третий вопрос - "почему утка плавает"?

    Или я один пока не понял, как "учимся думать" относится к вопросам без ответа? :)
     
  10. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    учись думать
     
  11. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Обычно спрашивают "Отчего утка плавает?"
     
  12. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Но вероятнее всего услышишь "Какой подонок это сделал?!".
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Luge
    Там же приводится исследование, которое показывает, что операторы выхода из цикла улучшают понимание программы.
     
  14. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    antonn
    Отчего и почему утка плавает в пруду? =))
     
  15. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Да, перепутал, в уме держал "Зачем"

    Чтобы не утонуть.
     
  16. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    возможно вернее будет сказать за камышами
     
  17. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    +Sten+
    "Отчего" - от берега %)
     
  18. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Может ли всесокрушающая сила сокрушить несокрушимое препятствие?
     
  19. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Может ли несокрушаемое препятстиве противостоять всесокрушающей силе?

    Подобные противречия - следствие несовершенной логики.
     
  20. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Откажись от формальной логики (с)

    Ждем третий вопрос от О.
     
  21. Третий вопрос: Вреден ли регистер глобалс? Аргументы, но в этот раз главное - пример кода.
     
  22. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    я вот учился сегодня думать на C++
    блин, потратив 6 часов на приложения в 4кб я понял как же я люблю пхп =)
    а ещё то что думать на Сишнике нельзя. на нём можно только делать, причём всё и вся. потому что готового ничего нет
     
  23. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Ну со временем у тебя будут наработки некоторых вещей, простым копипастом их в проект можно вполне быстро реализовывать некоторые вещи. Я вон для использования zlib потратил когда то время, написал две глобальные функции (а внутри столько кода...), и теперь просто беру этот юнит и использую эти две фунции :)
     
  24. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    нет, блина, он полезен. Тота его перевели в off по умолчанию и отменяют вообще. Олег, ты меня пугаешь такими вопросами. Вот чую, что в чём-то наипать хотят, но пока не пойму в чём.

    Кроме вопросов безопасности register_globals On так же влечёт за собой и мешанину в коде.
    На тебе 2 примера притянутых за уши. *в сторону: сам бы лучше написал по своим вопросам

    мешанина в коде
    PHP:
    1. <?php
    2. // какая-нибудь проверка авторизации,
    3. // авторизация не прошла
    4. $_SESSION['admin'] = false;
    5.  
    6. // где-то позже расскажем всем, кто тут главный
    7. $admin = 'Сегодня наш админ Вася';
    8.  
    9. // показывать ли панель модерации
    10. if($_SESSION['admin']) {
    11.     echo 'Добро пожаловать, админ. Кого сегодня будем банить?';
    12. } else {
    13.     echo 'Пшёл вон, смерд! '.$admin;
    14. }
    15. ?>
    проблемы с безопасностью
    PHP:
    1. <?php
    2. // в security.inc.php проверили авторизован ли юзер
    3. // и является ли админом.
    4. // как результат имеем $is_admin == true/false
    5. // (и не чего мне говорить, что можно работать с константами и сессией.
    6. //  Каков вопрос…)
    7. include 'security.inc.php';
    8.  
    9. if($is_admin) {
    10.     echo 'Добро пожаловать, админ. Кого сегодня будем банить?';
    11. } else {
    12.     echo 'Пшёл вон, смерд!';
    13. }
    14. ?>
    http://example.com/file.php?is_admin=1 получаем доступ к главной кнопке :)
     
  25. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    хехе, однажны я видел код, где какой-то умелец из цикла выходил с помощью гоуту)) причем оператор брейк в том языке существовал))
    с другой стороны, если поразмыслить, то в ассемблере все к тому и сводится - к условному переходу. если только не используется оператор loop