Долой FizzBuzzâ € | LOL
Это сообщение является результатом чтения и просмотра Спецификация LOLCODE 1.2 (« курить руководство », правильно?), А также написать и выполнить мой код на compileonline.com .
Мой «мир привет» будет fizzbuzz . Мне это нравится, потому что это хорошо иллюстрирует основы языка - переменные, операторы, петли, условные выражения и т. Д.
Что касается именования, спецификация допускает широкий выбор, поэтому я решил полностью пройти PascalCase
, чтобы немного облегчить чтение - иначе язык будет немного суровый на глазах , мягко говоря.
Мне любопытно, как идиоматический мой код - это мой самый первый и, возможно, последний lolcode . Я не обращал внимания на языковые конструкции, которые помогли бы читаемости? Как называется? Отступ? Любые проблемы?
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
3 ответа
Мне нравится, как вы объявили константы 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% больше условных проверок.
В общем, для первого раза я очень впечатлен вашим результатом. Я не могу дождаться, когда вы внесете fim ++ интерпретатор в lolcode . До этого!
Я действительно не могу поверить, что просматриваю lolcode прямо сейчас ...
- Спецификация допускает, чтобы переменные были в любом случае, но вся существующая документация использует регистр для переменных. Таким образом, переменные в нижнем регистре были бы более идиоматичными, но я бы пошел с 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
Отступ
Вы пошли со структурой вроде этого:
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
... но это может быть менее описательным, чем другие имена.