Goto в php

Stasila

Guest
switch=case очень даже неплохая вещь

-~{}~ 17.08.04 18:10:

Originally posted by nRay
Аргументами, как водится, мы принебрегли? ;)
если честно, сейчас я не помню какие были за это аргументы и сам сразу придумать не могу.Но вот по запросу в яндексе сразу получил
http://lpcs.math.msu.su/~krupski/prog1_handouts_frame/
Основы программирования I

Введение в PASCAL
смотри часть циклы
 

Фанат

oncle terrible
Команда форума
как всегда, любая хорошая вещь в руках ламера становится уродством.

ОБЧНО в пхп скриптах свитч использется для того, чтобы защитить свой ламерский, запихнутый в индекс сайт от взлома.
то есть, делается длинная борода из кейсов толко для того, чтобы выполнить один инклюд.

и получается офигенно интеллектуальный код
case include
case include
case include
case include
case include
case include
case include
case include
case include
case include
 

_RVK_

Новичок
Как приятно вспомнить старый добрый паскаль.... :)
Господа, этот спор совершенно бессмыслен. Есть общепризнанное мнение что goto вреден. Есть так же случаи, года без него не обойтись. Открою вам страшную тайну. Наши компьютеры не работали бы, если бы не существовало оператора безусловного перехода. Он есть в машинных командах и от него никуда не дется. Предсказание безусловных переходов одна из самых насущных проблем микропроцессорной индустрии. Но ЯВУ для того и созданы что бы облегчить жизнь программистам. GoTo это аттавизм, доставшийся из языков более низкого уровня и существующий для совместимости, и не более(ну и для малого числа других задач). Зачем этот спор на 4 страницы?
 

Crazy

Developer
Автор оригинала: Long
Crazy ямаха вроде на z80 была
Если ты про условные переходы, то они практически везде короткие. А вот просто прямые jump'ы у Z80 вроде бы длинные. Хотя за память не ручаюсь...

-~{}~ 17.08.04 18:56:

Автор оригинала: Diesel
Открою вам страшную тайну. Наши компьютеры не работали бы, если бы не существовало оператора безусловного перехода.
Дружище, это истина того же порядка, что и "под одеждой все люди голые". Столь же истинна, столь же ценна.

-~{}~ 17.08.04 18:59:

Автор оригинала: Stasila
А вот скажите, что делает по сути break
имхо это что-то вроде готу на метку после цикла.
Между break и goto есть принципиальная разница: goto переносит нас в произвольное место программы (в некоторых языках есть ограничения), тогда как break выносит строго вверх по иерархии исполняемых блоков.

-~{}~ 17.08.04 19:00:

Автор оригинала: Diesel
Я могу пример привести. Когда пишеш на ЯВУ с асемблерными вставками. Там выйти из асемблера в код без jmp не получится.
Ты гонишь. :) Обосновывать с примерами или поверишь и так? :)
 

Screjet

Новичок
switch() vs. hash

Originally posted by Demiurg
>Есть же хеши, почему бы их не юзать!?
ты имеешь ввиду ассациативные массивы ?
Да. "хеш" = это слэнг, сорри.

(Код должен понравиться Фанату :) )
PHP:
switch( $status_of_vasya ){
  case 0: $status_text = 'idiot'; break;
  case 1: $status_text = 'bolvan'; break;
  case 2: $status_text = 'lamer'; break;
  //...
  default: $status_text = 'null';
}
и
PHP:
$stats = array(
  0 => 'idiot',
  1 => 'bolvan',
  2 => 'lamer'
  //, ...
);
if ( !isset($stats[$status_of_vasya]) ){
  $status_text = 'null';
} else {
  $status_text = $stats[$status_of_vasya];
}
 

Фанат

oncle terrible
Команда форума
McLay, то он повышает читабельность программы.
а что?
 

Фанат

oncle terrible
Команда форума
только такие ограниченные умы, как ты, видят здесь switch() vs. hash
 

Crazy

Developer
Автор оригинала: McLay
Ну и что? А если в кейзах разные действия?
В таких случаях маньяки ООП применяют паттерн Command. Да и не-маньяки нечто подобное могут сделать.

Нет, я ничего не имею против switch как такового, но, как и в C/C++, в PHP он провоцирует написание ошибочного кода (забытые break).
 

Demiurg

Guest
Давайте не будем уходит от темы, хот и развели флуд.
Итак, goto полезен при автомтической генирации кода, вреден во всех жругих случаях.
Возражения/дополнения/исправления есть ?
 

Crazy

Developer
При автоматической генерации тоже вреден, поскольку такой сложно вдумчиво проверить, отлаживая сам генератор.
 

Макс

Старожил PHPClub
Возражения/дополнения/исправления есть ?
Дополнение - выход из вложенных циклов :
Код:
for(i = 0; i < 10; i++) 
   for (j = 0; j < 100; j++)
        for(k = 0; k < 1000; k++)
           if (ar[i][j][k] == 'some_value) 
                  goto some_value_found;

some_value_found :
  .....
 

Crazy

Developer
Автор оригинала: Макс
Дополнение - выход из вложенных циклов
Только в языках, где нет полноценного break.

Код:
outerLoop: for(i = 0; i < 10; i++) 
   for (j = 0; j < 100; j++)
        for(k = 0; k < 1000; k++)
           if (ar[i][j][k] == 'some_value) 
                  break outerLoop;
 

Demiurg

Guest
>При автоматической генерации тоже вреден, поскольку
>такой сложно вдумчиво проверить, отлаживая сам генератор.
к сожалению не писал интерпретаторов и компиляторов и слабо представляю теорию их написания, но слышал о потобных удобствах не только в этом форуме.
 

Crazy

Developer
Demiurg, я не спорю, что написать сам генератор будет проще -- по крайней мере, если выходной код реализует конечный автомат. Просто потом этот код нужно отлаживать. А при наличии густо расставленных goto это де-факто труднее сделать.
 

Screjet

Новичок
Хм.. Не представляю генератора кода для языка столь высокого уровня, как ПХП. (Разве что для каких-то тестов = не в счет)

2Crazy,
В таких случаях маньяки ООП применяют паттерн Command.
Это типа
PHP:
$this->{$my_method}();
?

или чтото другое? (кинь ссылку, плз)

зы. Недавно в мане обнаружил абалденную х-периментальную ф-цию "aggregate" =) Ктото уже юзал?
 
Сверху