Lolcode - Операторы

Операторы играют важную роль при выполнении различных операций с переменными. В этой главе представлены различные операторы в LOLCODE и их использование.

Операторы

Математические операторы зависят от обозначения префикса, т.е. обозначения, которое стоит перед операндом. Когда всем операторам известно количество аргументов или операндов, маркеры группировки не требуются. В случаях, когда операторы не имеют фиксированных аргументов или операндов, операция закрывается с помощью MKAY.

MKAY нельзя использовать, если он совпадает с концом заявления. В таких случаях следует использовать ключевое слово EOL. Чтобы использовать унарные математические операторы, используйте следующий синтаксис -

<operator> <expression>

Ключевое слово AN может при желании использоваться для разделения аргументов и применения одной операции более чем к одному операнду, поэтому выражение двоичного оператора имеет следующий синтаксис:

<operator> <expression1> AN <expression2>

Любое выражение, содержащее оператор с бесконечным количеством аргументов, может быть выражено с помощью следующего синтаксиса:

<operator> <expression1> [[AN <expression2>] AN <expression3> ...] MKAY

Математика

Ниже приведены основные математические операции в LOLCODE.

SUM OF <a> AN <b>      BTW This is a plus + operator
DIFF OF <a> AN <n>     BTW This is a minus - operator
PRODUKT OF <a> AN <n>  BTW This is a multiply operator *
QUOSHUNT OF <a> AN <n> BTW This is a divide operator
MOD OF <a> AN <n>      BTW This is a modulo operator
BIGGR OF <a> AN <n>    BTW This is a max operator
SMALLR OF <a> AN <n>   BTW This is a min operator

Каждое из <a> и <b> может быть уникальным выражением из приведенного выше, поэтому математические операторы могут быть вложены и сгруппированы бесконечно.

Математика выполняется с учетом аргументов как целочисленной математики при наличии двух чисел NUMBR, но если любое из выражений - NUMBAR, то операции рассматриваются как операции с плавающей запятой.

пример

HAI 1.2
   I HAS A m ITZ 4
   I HAS A n ITZ 2
VISIBLE SUM OF m AN n      BTW +
VISIBLE DIFF OF m AN n     BTW -
VISIBLE PRODUKT OF m AN n  BTW *
VISIBLE QUOSHUNT OF m AN n BTW /
VISIBLE MOD OF m AN n      BTW modulo
VISIBLE BIGGR OF m AN n    BTW max
VISIBLE SMALLR OF m AN n   BTW min
KTHXBYE

Приведенный выше код выдаст следующий результат, когда вы его запустите:

sh-
4.3$ lci main.lo
6
2
8
2
0
4
2

Важные моменты -

Обратите внимание на следующие важные моменты, связанные с работой с математическими операторами в LOLCODE:

  • Если один или оба аргумента в выражении являются YARN, они обрабатываются как NUMBAR.

  • Если какой-либо из аргументов не может быть безопасно приведен внутри к числовому типу, он завершается ошибкой.

Булево

Булевы операторы применяются к тем значениям, которые могут быть истинными или ложными. Логические операторы, работающие с TROOF, следующие:

BOTH OF <m> AN <n>             BTW its and operation: WIN if m = WIN and n = WIN
EITHER OF <m> AN <n>           BTW its or operation: FAIL iff m = FAIL, n = FAIL
WON OF <m> AN <n>              BTW its xor operation: FAIL if m = n
NOT <m>                        BTW its an unary negation: WIN if m = FAIL
ALL OF <m> AN <n> ... MKAY     BTW it will take infinite arguments and apply AND
ANY OF <m> AN <n> ... MKAY     BTW it will take infinite arguments and apply OR.

Обратите внимание, что <m> и <n> в приведенном выше синтаксисе выражения автоматически приводятся как значения TROOF, если они еще не являются значениями TROOF.

Сравнение

Если вы хотите сравнить два или более операндов в LOLCODE, вы можете сделать это любым из следующих методов:

Способ 1

Вы можете сравнить два двоичных операнда, используя операторы равенства. Синтаксис показан ниже -

BOTH SAEM <m> AN <n>   BTW this will return WIN if m is equal to n
DIFFRINT <m> AN <n>    BTW this will return WIN if m is not equal to n

Способ 2

Вы можете сравнить, если оба значения относятся к типу NUMBR. Помните, что если любое из значений - ЧИСЛО, то они сравниваются как значения с плавающей запятой.

Способ 3

Вы также можете выполнить сравнение, используя операторы минимума и максимума. Синтаксис показан ниже -

BOTH SAEM <m>   AN BIGGR OF <m> AN <n>

BOTH SAEM <m>  AN SMALLR OF <m> AN <n>
DIFFRINT <m>  AN SMALLR OF <m> AN <n>
DIFFRINT <m> AN BIGGR OF <m> AN <n>

Example

HAI 1.2
I HAS A VAR11 ITZ 7
BOTH SAEM VAR11 SMALLR OF VAR11 AN 8, O RLY?
YA RLY
VISIBLE "TRUE"
NO WAI
VISIBLE "FALSE"
OIC
KTHXBYE

Вы можете увидеть следующий вывод при выполнении данного кода -

sh-
4.3$ lci main.lo

TRUE

Конкатенация ценностей

LOLCODE позволяет вам явно объединять бесконечное количество ПРЯЖИ с помощью оператора SMOOSH… MKAY. Для конкатенации несколько аргументов можно разделитьAN оператор.

пример

HAI 1.2
I HAS A VAR1 ITZ A YARN
VAR1 R "TRUE"

I HAS A VAR2 ITZ A YARN
VAR2 R "ANOTHER TRUE"

I HAS A VAR3 ITZ A YARN
VAR3 R "ONE MORE TRUE"
VISIBLE SMOOSH VAR1 " " VAR3 " " VAR2 MKAY
KTHXBYE

Приведенный выше код при выполнении даст следующий результат:

sh-
4.3$ lci main.lo

TRUE ONE MORE TRUE ANOTHER TRUE

Тип литья

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

Значение выражения может быть явно приведено или преобразовано в какой-либо другой тип с помощью бинарного оператора MAEK. Синтаксис оператора MAEK:

MAEK <expression> A <type>

где <тип> может быть одним из TROOF, YARN, NUMBR, NUMBAR или NOOB.

Чтобы явно привести переменную к какому-либо другому типу, можно использовать обычный оператор присваивания с оператором MAEK или оператор присваивания приведения может использоваться следующим образом:

<Any_variable> IS NOW A <type>  BTW this code will be equal to
<Any_variable> R MAEK <variable> A <type>

пример

HAI 1.2
I HAS A food ITZ "111.00033"
VISIBLE food

BTW this is how we do type casting
MAEK food A NUMBAR
VISIBLE food
KTHXBYE

Приведенный выше код даст следующий результат:

sh-4.3$ lci main.lo
111.00033
111.00033