LINUX.ORG.RU

Ответ на: комментарий от isden

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

Terrens
()

Я уже представляю новые достижения в wtf конкурентов :)

KRoN73 ★★★★★
()

Красавец! Давайте уж весь QBasic встроим, что мелочиться то :}

Deleted
()
Ответ на: комментарий от Terrens

ага, так и вижу как все разрабы резко ломанулись переписывать вылизанный и отлаженный ПХП код для того чтобы никто потом в нем не смог разобраться :)
да в тех же питонах и жабах есть анлогичные штуки :

http://www.daniweb.com/forums/thread28285.html
http://java.sun.com/developer/TechTips/2000/tt0613.html

isden ★★★★★
()
Ответ на: комментарий от Sun-ch

> Все приличные языки имет goto
Отсутствие goto вынуждает пользоваться циклами и условиями, что, имхо, сказывается благоприятно на понимании логики алгоритма программы при чтении кода.

Terrens
()
Ответ на: комментарий от Sun-ch

Чё за бред?

$ cat goto.php <?php echo '0';

goto a; echo '1';

a: echo '2'; ?>

$ php goto.php

Parse error: syntax error, unexpected T_STRING in /home/user1/goto.php on line 4 $ php -version PHP 5.2.6-3ubuntu4.1 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 23 2009 14:35:05) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies $

У меня

2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux

Bioreactor ★★★★★
()
Ответ на: комментарий от shimon

Не будем переходить на 5.3. Хотя я и так использую мегарулезную Джаву без goto (там этот недооператор зарезервировали и закопали), а не пионЭрский пых-пых.

Bioreactor ★★★★★
()
Ответ на: комментарий от Sun-ch

Щас качнем RC4, проверим.

> мне категорически запрещают.

Таки Ваше начальство уже очень умные люди.

Bioreactor ★★★★★
()
Ответ на: комментарий от mannaz

Циклы и условия надо составлять так, чтобы можно было сделать это в нужный момент. Точно так же, как и в любом другом языке.

Terrens
()
Ответ на: комментарий от Sun-ch

$ php -version
PHP 5.3.0RC4 (cli) (built: Jun 18 2009 22:47:55)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

$ php goto.php
02

Исходник

<?php
echo '0';
goto a;
echo '1';
a:
echo '2';

Просто порадовал язычок для пионЭров! 

Bioreactor ★★★★★
()
Ответ на: комментарий от mannaz

Как и в Джаве:

<?php

   l1: for ($i = 0; $i < 5; $i++) {
        echo "i = $i\n";
	for ($j = 0; $j < 5; $j++) { 
            if ($j == 3) {
                echo "l1\n";
                break l1;
            }
            echo " j = $j\n";
        }
   }



i = 0
 j = 0
 j = 1
 j = 2
l1
i = 1
 j = 0
 j = 1
 j = 2
l1
i = 2
 j = 0
 j = 1
 j = 2
l1
i = 3
 j = 0
 j = 1
 j = 2
l1
i = 4
 j = 0
 j = 1
 j = 2
l1

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

(Вдогоночку) Это у меня в 5.3. В 5.2.х такое не пройдет.

Bioreactor ★★★★★
()

Мухаха. Им и так быдлокодеров не хватает?

linux4ever
()

Кстати, в качестве домашнего задания сравните с Джавой - Пыхеры налажали

class Loops {
    public static void main(String[] args) {
       for (int i = 0; i < 5; i++) {
           System.out.println(i);
	   for (int j = 0; j < 5; j++) {
               if (j == 3) {
	           System.out.println("break");
                   break;
               }
               System.out.println(j);
           }
       }
       System.out.println();
       l1: for (int i = 0; i < 5; i++) {
           System.out.println(i);
	   for (int j = 0; j < 5; j++) {
               if (j == 3) {
	           System.out.println("break l1");
                   break l1;
               }
               System.out.println(j);
           }
       }

    }
}

Bioreactor ★★★★★
()
Ответ на: комментарий от Terrens

Вот оно решение моей Джава задачи (и в 5.2.x работает)

<?php
    for ($i = 0; $i < 5; $i++) {
        echo "i = $i\n";
	for ($j = 0; $j < 5; $j++) { 
            if ($j == 3) {
                echo "l1\n";
                break;
            }
            echo "j = $j\n";
        }
    }

     echo "\n";
     for ($i = 0; $i < 5; $i++) {
        echo "i = $i\n";
	for ($j = 0; $j < 5; $j++) { 
            if ($j == 3) {
                echo "l1\n";
                break 2;
            }
            echo "j = $j\n";
        }
    }

    echo "\n";
    for ($i = 0; $i < 5; $i++) {
        echo "i = $i\n";
	for ($j = 0; $j < 5; $j++) { 
            if ($j == 3) {
                echo "l1\n";
                break 1;
            }
            echo "j = $j\n";
        }
    }

Сравните с явной меткой в Java

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

class Loops {

    public static void main(String[] args) {

       for (int i = 0; i < 5; i++) {
           System.out.printf("i = %d%n", i);
	   for (int j = 0; j < 5; j++) {
               if (j == 3) {
	           System.out.println("break");
                   break;
               }
               System.out.printf("j = %d%n", j);
           }
       }

       System.out.println();

       l1: for (int i = 0; i < 5; i++) {
           System.out.printf("i = %d%n", i);
	   for (int j = 0; j < 5; j++) {
               if (j == 3) {
	           System.out.println("break l1");
                   break l1;
               }
               System.out.printf("j = %d%n", j);
           }
       }

       System.out.println();

       for (int i = 0; i < 5; i++) {
           System.out.printf("i = %d%n", i);
	   l1: for (int j = 0; j < 5; j++) {
               if (j == 3) {
	           System.out.println("break l1");
                   break l1;
               }
               System.out.printf("j = %d%n", j);
           }
       }
    }
}

Bioreactor ★★★★★
()
Ответ на: комментарий от Bioreactor

Все это хорошо. Но почему все так жестко стебутся на этим? Раньше добавить goto нельзя было по какам-то историческим причинам несовместимости?

Sun-ch
() автор топика
Ответ на: комментарий от Sun-ch

Можно у Э.Дейкстры почитать про порочность goto.

Лучше бы добавили явные метки в циклах. А то все эти break (continue) 1,2,3,4,... по глубине цикла - просто потенциальный источник ошибки.

Java == синтаксический сахар. PHP == синтаксический мусор.

Bioreactor ★★★★★
()
Ответ на: комментарий от melkor217

Это зависит от глубины цикла - см. мои примеры. Явной метки, как в Джаве в недоязычке Пых-Пых нет.

Bioreactor ★★★★★
()
Ответ на: комментарий от Terrens

> Отсутствие goto вынуждает пользоваться циклами и условиями, что, имхо, сказывается благоприятно на понимании логики алгоритма программы при чтении кода.

Отсутствие возможности выйти из двух и более вложенных циклов одним break, заставляет использовать goto или писать костыли для последовательного выхода из них. Вариант с goto зачастую гораздо читабельнее.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Bioreactor

Java == синтаксический сахар. PHP == синтаксический мусор.

вы же вроде не малолетка... что это за "патриотизм"? Еще на нашем веку придет не одна такая жаба, которая задушит существующие... Зачем так к языку то привязываться?)

А по сути: ПХП - ужасный язык, goto - типичный пример быдло-программирования... так что все логично...

fabregas
()
Ответ на: комментарий от Bioreactor

Т.е. метки, используемые для выхода из вложенных циклов, добавили только в 5.3? Тогда появление goto в этой же версии вполне логично. Мне, например, не сильно импонирует, что в Java ключевое слово goto какбе есть, но не работает - попахивает детским нездоровым фанатизмом на почве многолетней травли goto.

mannaz
()
Ответ на: комментарий от fat_angel

>Только почему то K&R не рекомендуют им пользоваться.

не рекомендуют не значит запрещают ;) просто некрасивая прога получается и запутанная

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от mannaz

>Мне, например, не сильно импонирует, что в Java ключевое слово goto какбе есть, но не работает

Я абсолютно не фанатик. И начинал я с GOTO. И использовал его много в своё время, даже уже зная прекрасно про структурное программирование. Но вот как-то так получается, что последний раз в языках высокого уровня я GOTO использовал... Ну, где-то лет 15 назад. Понадобится - задействую не задумываясь. Но пока - не нужно :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Dark_SavanT

>Отсутствие возможности выйти из двух и более вложенных циклов одним break, заставляет использовать goto или писать костыли для последовательного выхода из них

Или использовать один return (thinking Forth!) или вообще избегать такой алгоритмики.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

И это абсолютно правильный подход и трезвый взгляд на проблему.

mannaz
()
Ответ на: комментарий от Sun-ch

> Все приличные языки имет goto

Фигня. Ладно Хаскель, но где, скажем, в Эрланге goto?

Miguel ★★★★★
()
Ответ на: комментарий от Bioreactor

> Пыхеры налажали

Это примерно как "масло масляное".

Miguel ★★★★★
()
Ответ на: комментарий от KRoN73

> В Lisp'е - goto??

Да. А что тебя удивляет? Язык-то уж больно архаичный.

Вот я слышал, один товарищ умудрился сделать goto в Смолтоке. Правда, для этого ему пришлось лезть в скомпилированный байткод.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

>Да. А что тебя удивляет?

Ну, я полагал, что LisP несколько более функционален :)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.