Goto в php

Stasila

Guest
когда я принес прак на сдачу мне преп сказал что за хрень.никаких брейков.(это уже не в школе, а в универе, а там люди толковые). Плюс я же сказал, что по сути брейк работает как готу, я даже привел пример.Или не так?
 

_RVK_

Новичок
Stasila
Твой препод не прав. break, continue и иже с ними не считаются плохим тоном.
 

neko

tеam neko
откуда тебе знать прав он или не прав
ты же задачи не видел
решения не видел
 

Макс

Старожил PHPClub
Кстати, мой препод в универе тоже мне говорил что break - плохой тон и требовал переписывать программы без его использования.
 

Demiurg

Guest
То есть на ваш взгляд при поиске элемента в массиве, надо каждый раз докручивать цикл до конца, вместо break ?
 

Макс

Старожил PHPClub
То есть на ваш взгляд
на его взгляд. Я не говорил что разделяю его позицию.
Он предлагал делать флажок - признак, надо ли прервать цикл. Ну и сам цикл
Код:
while (break_flag = false) begin
 .....
end;
Хотя не знаю, может это особености паскаль-щиков (препод по паскалю/делфи был)
 

nRay

Guest
Когда учился не раз использовал конструкции типа:

for (int i=0; i<j; i++) {
...
if (выходим) {
i = j;
.....
}
}

только потому, что старшие мальчики говорили, что goto/break - сакс.
 

Stasila

Guest
Не надо прокручивать цикл до конца, надо делать цикл с условием.Я же выше написал.
2Макс:у нас такая же хрень с этим булевским флагом.На самом деле это красивое решение.
Но вот что я обнаружил:

Сравнительная характеристика break vs jmp :)
Я такой тест сделал.Мож кому интересно.Два проекта.Разница:
в одном:
for(i=0;i<2;i++)
{
k++;
if(i=2)break;
}
в другом
for(i=0;i<2;i++)
{
k++;
if(i=2)goto l;
}
l:
Дизассемблил.Получилось разница в этих кусках лишь в том, что в первом случае
делается
...
cmp i, 2
jnz short loc_40150A
jmp short loc_40150C
; ---------------------------------------------------------------------------

loc_40150A: ; CODE XREF: .text:00401506j
jmp ВНачалоЦикла
; ---------------------------------------------------------------------------

loc_40150C: ; CODE XREF: .text:004014F7j
...
Здесь мы уже вне цикла

а во втором:
...
cmp i, 2
jnz short loc_40150A
jmp short loc_40155D
; ---------------------------------------------------------------------------

loc_40150A: ; CODE XREF: .text:00401506j
jmp ВНачалоЦикла
; ---------------------------------------------------------------------------

loc_40150C: ; CODE XREF: .text:004014F7j
; .text:0040155Dj
...
Здесь мы уже вне цикла
....
Всякая хрень после цикла
...
xor eax, eax
jmp short loc_40155F
; ---------------------------------------------------------------------------

loc_40155D: ; CODE XREF: .text:00401508j
jmp short loc_40150C
; ---------------------------------------------------------------------------

loc_40155F: ; CODE XREF: .text:00401470j
; .text:00401557j ...
pop edi
pop esi
...
Итого при использование готу один лишний непонятно куда засунутый jmp и обходной путь против брейковского джампа сразу за цикл

Но по сути одно и тоже.Так чем готу хуже брейка?этой запутанностью с переходом за цикл?



:cool:блин во нахреначил(меня кто-нить поймет???)
 

Demiurg

Guest
флажок это хорошо, но с ним читаемость падает, и что делать, если используется foreach?
 

Stasila

Guest
Originally posted by nRay
Когда учился не раз использовал конструкции типа:

for (int i=0; i<j; i++) {
...
if (выходим) {
i = j;
.....
}
}

имхо это плохой способ... очень.ничем не лучше готу.вообще в форе не следует никогда менять счетчик имхо
 

Demiurg

Guest
Stasila
я же просил не приплетать ассемблер, там все совершенно по другому. goto плох тем, что из-за него читаемость падает и шанс наделать ошибок увеличивается.
 

Stasila

Guest
я просто отобразил суть готу и брейка чтобы сравнить их.Проекты были написаны на вижуал с++ 6.0
Ну вообще ты прав, наверное, что готу просто снижает читабельность и мешает самому прогеру строить нормальный алгоритм.В этом и есть истина.Тока зачем его тогда в другие языки(не пхп) включали вообще?
 

Demiurg

Guest
>ну, что читаемось падает это я не заметил...
сравни
goto кудато_туда;
и
break;
Во-первых надо придумывать уникальное имя метки, а некоторые программисты любят называть их "aaa" или "bbb". Во-вторых надо найти эту метку и понять контекст кода.
Выход же break хороший редактор может подсветить сам.

-~{}~ 17.08.04 16:16:

>Тока зачем его тогда в другие языки(не пхп) включали вообще?
приводили же пример, когда goto полезен.
 

neko

tеam neko
народ учитесь топик читать целиком и думать
это все бред
можно и с goto написать читабельный код
и абсолютно нечитабильный без
это не от операторов зависит, а от того что в башке
"кто ясно мыслит, тот ясно излагает" (с)
 

Demiurg

Guest
neko
можно и то и другое, но есть вещи, которые помогают писать лучше, например отключенный register_globals
 

nRay

Guest
Автор оригинала: Stasila
имхо это плохой способ... очень.ничем не лучше готу.вообще в форе не следует никогда менять счетчик имхо
Аргументами, как водится, мы принебрегли? ;)
 

Screjet

Новичок
(имхо) в ПХП switch считаю плохим тоном. Есть же хеши, почему бы их не юзать!?
Накрайняк думаю, if .. elseif и то лучше.
 

Demiurg

Guest
>Есть же хеши, почему бы их не юзать!?
ты имеешь ввиду ассациативные массивы ?
 
Сверху