Долой FizzBuzzâ € | LOL

Это сообщение является результатом чтения и просмотра Спецификация LOLCODE 1.2 (« курить руководство », правильно?), А также написать и выполнить мой код на compileonline.com .

Мой «мир привет» будет . Мне это нравится, потому что это хорошо иллюстрирует основы языка - переменные, операторы, петли, условные выражения и т. Д.

Что касается именования, спецификация допускает широкий выбор, поэтому я решил полностью пройти PascalCase, чтобы немного облегчить чтение - иначе язык будет немного суровый на глазах , мягко говоря.

Мне любопытно, как идиоматический мой код - это мой самый первый и, возможно, последний . Я не обращал внимания на языковые конструкции, которые помогли бы читаемости? Как называется? Отступ? Любые проблемы?

HAI 1.2

    I HAS A Fizz ITZ 3
    I HAS A Buzz ITZ 5

    IM IN YR FrootLoopz UPPIN YR Frootz TIL BOTH SAEM Frootz AN 100 
      BTW Frootz runs 0 through 99

      I HAS A Froot ITZ SUM OF Frootz AN 1
        BTW Froot will run 1 through 100

      BOTH SAEM 0 AN MOD OF Froot AN PRODUKT OF Fizz AN Buzz
      O RLY?
        YA RLY
          Froot R "FizzBuzz"
        NO WAI
          BOTH SAEM 0 AN MOD OF Froot AN Fizz
          O RLY?
            YA RLY
              Froot R "Fizz"
            NO WAI
              BOTH SAEM 0 AN MOD OF Froot AN Buzz
              O RLY?
                YA RLY
                  Froot R "Buzz"
              OIC
          OIC
      OIC

      VISIBLE Froot

    IM OUTTA YR FrootLoopz

    VISIBLE "DOWN WITH FIZZBUZZ LOL"

KTHXBYE
105 голосов | спросил Mathieu Guindon 29 AM00000070000005031 2014, 07:41:50

3 ответа


61

Мне нравится, как вы объявили константы Fizz и Buzz. Это делает код более удобочитаемым.

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

BTW Froot will run 1 through 100

к

BTW Froot runs 1 through 100

Идея генерации Froot из Frootz также хороша, потому что это уменьшает вычисления позже в коде.

Я хочу, чтобы вы использовали более лучшее имя, чем Frootz, потому что оно конфликтует с Froot. Сходство ... сверхъестественное.

Я бы предложил название Loopz:

I HAS A Loopz ITZ SUM OF Frootz AN 1

Это уменьшит двусмысленность и улучшит читаемость и удобство обслуживания.

Наконец, хорошо, что вы поместили модульную проверку Fizz перед тегом Buzz, потому что это повышает производительность. Многие люди ставят шум, но это означает, что проверка по модулю-5 происходит, и это происходит чаще, чем проверка по модулю-3, поэтому люди, которые выполняют цикл Buzz, обычно имеют примерно на 20% больше условных проверок.

В общем, для первого раза я очень впечатлен вашим результатом. Я не могу дождаться, когда вы внесете интерпретатор в . До этого!

ответил rolfl 29 AM00000080000002731 2014, 08:03:27
48

Я действительно не могу поверить, что просматриваю прямо сейчас ...

  • Спецификация допускает, чтобы переменные были в любом случае, но вся существующая документация использует регистр для переменных. Таким образом, переменные в нижнем регистре были бы более идиоматичными, но я бы пошел с camelCase для удобочитаемости.
  • Frootloopz является творческим и идиоматическим, но Froot не имеет смысла за пределами его отношения к Frootloopz. Loopz все равно будет идиоматичным, а counter будет более значимым.
  • Как отметил @Pimgd , вы можете уменьшить вложенность, поставив O RLY?, YA RLY в одной строке.
  • Код вычисляет и печатает. LOLCODE поддерживает функции. Я бы использовал его для разделения проблем. В частности, поскольку это упражнение в изучении языка.
  

Функция демаркируется с ключевым словом HOW IZ I и ключевым словом IF U SAY SO. Синтаксис выглядит следующим образом:

HOW IZ I <function name> [YR <argument1> [AN YR <argument2> …]]
     <code block>
IF U SAY SO
ответил RubberDuck 29 PM00000020000004831 2014, 14:11:48
28

Отступ

Вы пошли со структурой вроде этого:

O RLY?
    YA RLY
        Froot R "Buzz"
OIC

Мне это не очень нравится. Он имеет дополнительный уровень отступов. Вместо этого я бы решил сделать это:

O RLY?, YA RLY
    Froot R "Buzz"
OIC

Вы получаете несколько операторов в одной строке, но я вижу код IZ WIN (== true для тех, кто не является LOLCODE-неопытным), как часть оператор if.

Отступы - Комментарии

  I HAS A Froot ITZ SUM OF Frootz AN 1
    BTW Froot will run 1 through 100

Почему этот комментарий отступом? Я думаю, что так должно быть

  I HAS A Froot ITZ SUM OF Frootz AN 1
  BTW Froot will run 1 through 100

Потому что нет никакого уровня отступов при назначении переменной.

Магические числа

100 должен быть константой с именем, которое описывает его значение. Что-то вроде FIZZBUZZLIMIT или MAXFIZZBUZZNUMBR. Или даже STAHP ... но это может быть менее описательным, чем другие имена.

ответил Pimgd 29 AM000000110000003431 2014, 11:21:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132