понедельник, 11 августа 2014 г.

Ссылка. Оператор if как подмножество case

http://www.cantorsys.com/2014/05/if-case.html

Интересное "наблюдение", я сам к "подобному" пришёл. Уже относительно давно.

Хотя про "быдлокод" - я на автора реально обижен...

http://habrahabr.ru/post/232955/#comment_7856841

Очень было бы кстати интересно на "небыдло" код посмотреть. Или дело лишь в "одном пробеле"? :-)

 if Condition then
  ifBranch
 else
   elseBranch;

- ой! Это же - "быдлокод"...

Интересно.. Наверное вот это СУПЕР "быдло" код:

while *aDest++ = *aSource++ ;

Или вот это:

loop:
MOVB (R0)+, (R1)+
BNE loop

А "бинарная сериализация" (http://programmingmindstream.blogspot.ru/2014/07/blog-post_16.html) это не "быдло" код?

А про "Оператор if как подмножество case" вот ("пару цитат"):

      RULES
       "Строка пустая"
        ( 
         "Закрыть кавычку, если была"
         "Надо переводить строку" ? "Перевести строку"
         "Вывести строку как есть"
        ) // "Строка пустая"
       "Строка начинается с" '//#UC END# *'
        (
         "Вывести комментарий, котрый был в исходном файле"
         "Закрыть вложенные опеределения"
          // - т.к. наверное функция, трансформатор или генератор - закончились
        ) 
       "Строка начинается с" '//'
        "Вывести комментарий, котрый был в исходном файле"
       "Строка начинается с" '/'
        (
         "Надо переводить строку" ? "Перевести строку"
         "Добавить к строке / и вывести"
        ) // "Строка начинается с" '/'
       DEFAULT
        "Сигнализировать о неуспехе"
      ; // RULES
...
        RULES
         "Строка начинается с" 'n'
          ( 
            WString:++! "Текущая строка входного файла"
            
            '#13#10' "Добавить спецстроку к накапливаемой строке"
          )
         "Строка начинается с" 't'
          ( 
            WString:++! "Текущая строка входного файла"
            
            '#9' "Добавить спецстроку к накапливаемой строке"
          )
         DEFAULT
          "Выводим следующий символ как есть"
        ; // RULES   
...
         RULES
          "Строка начинается с" '(' 
           (
            "Надо ли считать скобки" ? (
             ( "Закрывающаяся скобка" %== ')' ) ? (
              ++! "Число дополнительных открытых скобок"
             ) // ( "Закрывающаяся скобка" %== ')' ) ?
            ) // "Надо ли считать скобки" ? 
            "Один проход разбора остатка без учёта его результата"
           ) // "Строка начинается с" '(' 
          "Строка начинается с" "Знак процента"
           (
            "Надо ли разбирать условие" IF
             // - тут экранируем условие
             "Вывести отступ"
             '( ' "Вывести строку"
             "Обработать строку начинающуюся с % как начало цепочки"
             ') ' "Вывести строку"
            ELSE
             "Обработать строку начинающуюся с % как начало цепочки"
            ENDIF // "Надо ли разбирать условие" 
           ) // "Строка начинается с" "Знак процента"
          "Строка начинается с" "Закрывающаяся скобка"
           ( 
            BOOLEAN VAR "Скобка подходит"
             true =: "Скобка подходит"
             
             //'скобка' log
             //"Закрывающаяся скобка" log
             
             "Надо ли считать скобки" IF
              ( "Число дополнительных открытых скобок" %== 0 ) =: "Скобка подходит"
             ELSE
              //'Двойная кавычка была открыта' log "Двойная кавычка была открыта" log
              "Надо ли считать кавычки" IF
               ( "Двойная кавычка была открыта" ! ) =: "Скобка подходит"
              ELSE
               true =: "Скобка подходит"
              ENDIF 
             ENDIF
             
            //'Скобка подходит' log
            //"Скобка подходит" log
             
            "Скобка подходит" IF
             "Сбросить накопленную строку без перевода"
             WString:++! "Текущая строка входного файла"
             // - отрезаем скобку
             true =: "Встретилась закрывающаяся скобка"
             "Уменьшить количество открытых скобок параметров функции"
            ELSE 
             "Надо ли считать скобки" ? (
              --! "Число дополнительных открытых скобок"
             ) // "Надо ли считать скобки" ?
             "Один проход разбора остатка без учёта его результата"
            ENDIF 
           ) // "Строка начинается с" "Закрывающаяся скобка"
          (
           "Надо ли разбирать запятые" %&&
           "Строка начинается с" ',,'
          ) 
           ( 
            : "Пустой параметр"
             "Вывести значение для пустой строки"
            ; // "Пустой параметр"
            
            "Сбросить накопленную строку без перевода"
            2 WString:+! "Текущая строка входного файла"
            // - отрезаем ',,'
            //"Вывести пробел"
            '%, ' "Вывести строку"
            // - выводим такую хитрую запятую, которая будет склеивать все параметры перед ней в один
            "Пустой параметр"
            ' %, ' "Вывести строку"
            // - выводим такую хитрую запятую, которая будет склеивать все параметры перед ней в один
            true =: "Следующее значение переменной Первый проход разбора параметра"
           ) // "Строка начинается с" ',,'
          (
           "Надо ли разбирать запятые" %&&
           "Строка начинается с" "Запятая"
          ) 
           ( 
            "Сбросить накопленную строку без перевода"
            WString:++! "Текущая строка входного файла"
            // - отрезаем запятую
            //"Вывести пробел"
            '%, ' "Вывести строку"
            // - выводим такую хитрую запятую, которая будет склеивать все параметры перед ней в один
            true =: "Следующее значение переменной Первый проход разбора параметра"
           ) // "Строка начинается с" "Запятая"
          "Строка начинается с" '""'
           ( 
            2 WString:+! "Текущая строка входного файла"
            // - отрезаем две двойных кавычки
            "Вывести значение для пустой строки"
            "Вывести пробел"
           ) // "Строка начинается с" '""'
          "Строка начинается с" '"true"'
           ( 
            6 WString:+! "Текущая строка входного файла"
            // - отрезаем "true"
            'true ' "Вывести строку"
           ) // "Строка начинается с" '"true"'
          "Строка начинается с" '"false"'
           ( 
            7 WString:+! "Текущая строка входного файла"
            // - отрезаем "false"
            'false ' "Вывести строку"
           ) // "Строка начинается с" '"false"'
          "Строка начинается с" "Двойная кавычка"
           (
            //'got' log
            //'Двойная кавычка была открыта' log "Двойная кавычка была открыта" log
            "Двойная кавычка была открыта" ! =: "Двойная кавычка была открыта"
            //'Двойная кавычка была открыта' log "Двойная кавычка была открыта" log
            "Накапливаемая строка пустая" IF
             WString:++! "Текущая строка входного файла"
            ELSE 
             CHAR VAR "Следующий символ"
              ( 1 "Текущая строка входного файла" WString:[i] ) =: "Следующий символ"
             (
              ( "Следующий символ" %== "Закрывающаяся скобка" ) %||
              ( "Следующий символ" %== '=' ) %||
              ( "Надо ли разбирать условие" %&&
               (
                ( "Следующий символ" %== '|' ) %||
                ( "Следующий символ" %== '&' )
               ) 
              ) 
             ) IF
              "Сбросить накопленную строку без перевода"
              WString:++! "Текущая строка входного файла"
             ELSE
              //'got1' log
              "Один проход разбора остатка без учёта его результата"
             ENDIF 
            ENDIF
           ) // "Строка начинается с" "Двойная кавычка"
          "Строка начинается с" 'true'
           (
            "Надо ли разбирать булевские значения" %&& "Накапливаемая строка пустая" IF
             4 WString:+! "Текущая строка входного файла"
             "Сбросить накопленную строку без перевода"
             "Вывести отступ"
             ' true ' "Вывести строку"
            ELSE
             "Один проход разбора остатка без учёта его результата"
            ENDIF // "Надо ли разбирать условие"
           ) // "Строка начинается с" 'true'
          "Строка начинается с" 'false'
           (
            "Надо ли разбирать булевские значения" %&& "Накапливаемая строка пустая" IF
             5 WString:+! "Текущая строка входного файла"
             "Сбросить накопленную строку без перевода"
             "Вывести отступ"
             ' false ' "Вывести строку"
            ELSE
             "Один проход разбора остатка без учёта его результата"
            ENDIF // "Надо ли разбирать условие"
           ) // "Строка начинается с" 'false'
          "Строка начинается с" '!='
           (
            "Надо ли разбирать условие" IF
             2 WString:+! "Текущая строка входного файла"
             "Сбросить накопленную строку без перевода"
             "Вывести отступ"
             '%!= ' "Вывести строку"
             true =: "Следующее значение переменной Первый проход разбора параметра"
            ELSE
             "Один проход разбора остатка без учёта его результата"
            ENDIF // "Надо ли разбирать условие"
           ) // "Строка начинается с" '!='
          "Строка начинается с" '='
           (
            //'got 3' log
            //"Закрывающаяся скобка" log
            "Надо ли разбирать условие" IF
            //'got 4' log
             WString:++! "Текущая строка входного файла"
             "Сбросить накопленную строку без перевода"
             "Вывести отступ"
             '%== ' "Вывести строку"
             true =: "Следующее значение переменной Первый проход разбора параметра"
            ELSE
             //'got 5' log
             //"Текущая строка входного файла" WString:[] log
             "Один проход разбора остатка без учёта его результата"
             //"Текущая строка входного файла" WString:[] log
            ENDIF // "Надо ли разбирать условие"
           ) // "Строка начинается с" '='
          "Строка начинается с" '&'
           (
            "Надо ли разбирать условие" IF
             WString:++! "Текущая строка входного файла"
             "Сбросить накопленную строку без перевода"
             "Вывести отступ"
             "Закрыть операторную скобку"
             '%&& ' "Вывести строку" 
             "Открыть операторную скобку"
             true =: "Следующее значение переменной Первый проход разбора параметра"
             //"Перевести строку"
            ELSE
             "Один проход разбора остатка без учёта его результата"
            ENDIF // "Надо ли разбирать условие"
           ) // "Строка начинается с" '&'
          "Строка начинается с" '|'
           (
            "Надо ли разбирать условие" IF
             WString:++! "Текущая строка входного файла"
             "Сбросить накопленную строку без перевода"
             "Вывести отступ"
             "Закрыть операторную скобку"
             '%|| ' "Вывести строку" 
             "Открыть операторную скобку"
             true =: "Следующее значение переменной Первый проход разбора параметра"
             //"Перевести строку"
            ELSE
             "Один проход разбора остатка без учёта его результата"
            ENDIF // "Надо ли разбирать условие"
           ) // "Строка начинается с" '|'
          "Строка начинается с" '[' 
           (
//            "Накапливаемая строка пустая" ! ?
//             ( 0 =: "Число дополнительных открытых скобок" )
            "Один проход разбора остатка без учёта его результата"
           ) // "Строка начинается с" '['
          "Строка начинается с" '<' 
           (
//            "Накапливаемая строка пустая" ! ?
//             ( 0 =: "Число дополнительных открытых скобок" )
            "Один проход разбора остатка без учёта его результата"
           ) // "Строка начинается с" '['
          "Строка начинается с" ']' 
           ( 
            "Закрыть операторную скобку"
            "Обрабатываем END-IF" ! ?
             "Один проход разбора остатка без учёта его результата"
           ) // "Строка начинается с" ']'
          "Строка начинается с" '>' 
           ( 
            "Закрыть операторную скобку"
            "Обрабатываем конец цикла" ! ?
             "Один проход разбора остатка без учёта его результата"
           ) // "Строка начинается с" '>'
          ( 
           "Накапливаемая строка пустая" %&& 
           "Строка начинается с" '+1'
          ) 
           (
            2 WString:+! "Текущая строка входного файла"
            // - отрезаем +1
            "Вывести отступ"
            "Первый проход разбора параметра" IF
             '1 ' "Вывести строку"
            ELSE
             'integer:?++ ' "Вывести строку"
            ENDIF 
           ) // .. "Строка начинается с" '+1'
          ( 
           "Накапливаемая строка пустая" %&& 
           "Строка начинается с" '-1'
          ) 
           (
            2 WString:+! "Текущая строка входного файла"
            // - отрезаем -1
            "Вывести отступ"
            "Первый проход разбора параметра" IF
             '-1 ' "Вывести строку"
            ELSE
             'integer:?-- ' "Вывести строку"
            ENDIF 
           ) // .. "Строка начинается с" '+1'
          ( 
           "Накапливаемая строка пустая" %&& 
           "Строка начинается с" '1+'
          ) 
           (
            2 WString:+! "Текущая строка входного файла"
            // - отрезаем 1+
            "Вывести отступ"
            '1 %integer:?+ ' "Вывести строку"
           ) // .. "Строка начинается с" '1+'
          ( 
           "Надо ли разбирать цифры" %&&
           "Накапливаемая строка пустая" %&& 
           ( "Строка пустая" ! ) %&&
           ( "Цифры" "Текущая строка входного файла" WString:[] WString:HasAnyOf )
           //"Строка начинается с" '1'
          ) 
           (
            WString:[]++! "Текущая строка входного файла"
            // - отрезаем 1
            "Вывести отступ"
            "Выходной файл" file:WriteChar
            //'1 ' "Вывести строку"
            @ ( 
               ( "Строка пустая" ! ) %&&
               ( "Цифры" "Текущая строка входного файла" WString:[] WString:HasAnyOf )
              ) WHILE
             (
              WString:[]++! "Текущая строка входного файла"
              // - отрезаем 1
              "Выходной файл" file:WriteChar
             )
            "Вывести пробел"
           ) // .. "Строка начинается с" '1'
          DEFAULT
           "Один проход разбора остатка без учёта его результата"
         ; // RULES
...



4 комментария:

  1. Для меня форматирование играет важную роль при чтении кода. Настолько сильно, что совсем неотформатированный код я уже воспринимаю как шум. Благо есть код-форматтер...

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

    ОтветитьУдалить
    Ответы
    1. Николай "плохо отформатирован" != "отформатирован не так как у меня". Ага? Ферштеен?

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

    ОтветитьУдалить