goto vs break & continue
    , Кроха-сын пришел к отцу и спросила кроха: "goto - это хорошо?"
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.0] | 
 
 | 
		
  | 
    Правила раздела:
  | Страницы: (32) « Первая ... 14 15 [16] 17 18 ... 31 32 ( Перейти к последнему сообщению ) | 
    goto vs break & continue
    , Кроха-сын пришел к отцу и спросила кроха: "goto - это хорошо?"
  | 
         
         
         
          
           Сообщ.
           #226
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
| 
         
         
         
          
           Сообщ.
           #227
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
| 
         
         
         
          
           Сообщ.
           #228
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Ого. Подтянулась тяжёлая артиллерия.   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #229
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Я что вспомнил: есть же ещё продолжения: 
        
      ![]() ![]() #lang racket (define i-save 0) (define j-save 0) (define k-save 0) (define (save i j k)   (set! i-save i)   (set! j-save j)   (set! k-save k)   (printf "\nsaved\n")) (define (restore)   (printf "restored\n")   (values i-save j-save k-save)) (define N 4) (define (start #:resume? (resume? #f))   (define-values (i j k)     (if resume?         (restore)         (values 0 0 0)))     (let/cc abort     (define (for-i i0)       (for ((i (in-range i0 N)))         (for-j i i)))     (define (for-j i j0)       (for ((j (in-range j0 N)))         (for-k i j j)))     (define (for-k i j k0)       (for ((k (in-range k0 N)))         (when (and (not resume?) (= i 1) (= j 2) (= k 3))           (save i j k)           (abort))         (printf "[~a,~a,~a], " i j k)))     (for-k i j k)     (for-j i (+ j 1))     (for-i (+ i 1))     (printf "\ndone\n"))) (define (main)   (start)   (start #:resume? #t)) (main) ⇒ ![]() ![]() [0,0,0], [0,0,1], [0,0,2], [0,0,3], [0,1,1], [0,1,2], [0,1,3], [0,2,2], [0,2,3], [0,3,3], [1,1,1], [1,1,2], [1,1,3], [1,2,2],  saved restored [1,2,3], [1,3,3], [2,2,2], [2,2,3], [2,3,3], [3,3,3],  done  | 
    
| 
         
         
         
          
           Сообщ.
           #230
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Даже читать не хочется  
        
          | 
    
| 
         
         
         
          
           Сообщ.
           #231
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Даже читать не хочется  ![]() Что так? Ты ж не боишься скобок, вроде. =)  | 
    
| 
         
         
         
          
           Сообщ.
           #232
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         В php пишется break 2;   Добавлено А блин, на 16ой странице у вас вообще другая тема пошла, пойду я...  | 
    
| 
         
         
         
          
           Сообщ.
           #233
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Serafim @  Везёт вам! Но сразу возникает вопрос: что означает "break 0;" или "break -1;" ?В php пишется break 2;    1.Я бы сказал, что "break 0;" означает ассемблерный NOP - ничего не делаем.   2."break -1;" означает "вход в ближайший цикл"!   Только непонятно, ближайший спереди или сзади...     | 
    
| 
         
         
         
          
           Сообщ.
           #234
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Славян @  Но сразу возникает вопрос: что означает "break 0;" или "break -1;" ? Очевидно, ошибку компиляции     | 
    
| 
         
         
         
          
           Сообщ.
           #235
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @  Да логично, конечно, но хочется, чтобы это перестало быть ошибкой и вот тут и приходится задуматься над возможной допустимой реализацией такого поведения. Очевидно, ошибку компиляции        | 
    
| 
         
         
         
          
           Сообщ.
           #236
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Славян @  Но сразу возникает вопрос: что означает "break 0;" или "break -1;" ? Сейчас - ошибку (EngineException). До версии 5.4 break 0 означало тоже самое, что и break 1, т.е. выход из цикла первого уровня.  | 
    
| 
         
         
         
          
           Сообщ.
           #237
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Славян @   но хочется, чтобы это перестало быть ошибкой и вот тут и приходится задуматься над возможной допустимой реализацией такого поведения.  Какой смысл? Давай тогда вообще break 3.1415926 или break (1 - 3i) введём, чего мелочиться-то     | 
    
| 
         
         
         
          
           Сообщ.
           #238
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Смысл удаления в том, что до той же версии (5.4) внутрь break допускалось передавать переменные (т.е. можно было указывать уровень цикла с помощью int), что позволяло творить магию, которая могла породить подобные конструкции (циферку 0 и отрицательные значения (включая даже флоты и строковые типы)), дабы избежать этих проблем и упростить жизнь - оно приводилось к единице.  
        
      Потом это поведение вырезали (т.е. сейчас можно указывать только константные значения и только int > 0), чтоб у читающих код не было проблем с психикой, когда они видят break mt_rand(0, 9999);. Как следствие убрали это неявное приведение, т.к. никто в своём уме не будет писать break 0; - это не имеет смысла.  | 
    
| 
         
         
         
          
           Сообщ.
           #239
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @  Да, это будет после того, как научимся работать с целыми. Какой смысл? Давай тогда вообще break 3.1415926   Цитата OpenGL @  Не, пока код у нас линеен - плоские переходы нельзя ввести. или break (1 - 3i) введём, чего мелочиться-то   Вот будет граф кода пушистее - там=тогда и можно будет и о таком подумать...     | 
    
| 
         
         
         
          
           Сообщ.
           #240
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          А зря. Это был прекрасный код конём для взбунтовавшегося ИИ. Типа "коли ты такой умный, ну-ка, исполни break -i, родимый", и делов. Теперь вся надежда только на Сару или Нео.   
        
       |