Lolcode - Operatori

Gli operatori svolgono un ruolo importante per eseguire varie operazioni sulle variabili. Questo capitolo presenta vari operatori in LOLCODE e il loro utilizzo.

Operatori

Gli operatori matematici dipendono da una notazione di prefisso, cioè dalla notazione che precede l'operando. Quando tutti gli operatori hanno un numero noto di argomenti o operandi, non sono necessari indicatori di raggruppamento. Nei casi in cui gli operatori non hanno argomenti o operandi fissi, l'operazione viene chiusa con MKAY.

Un MKAY non può essere utilizzato se coincide con la fine dell'istruzione. In questi casi, è necessario utilizzare la parola chiave EOL. Per utilizzare operatori matematici unari, utilizzare la seguente sintassi:

<operator> <expression>

La parola chiave AN può essere facoltativamente utilizzata per separare gli argomenti e applicare una singola operazione su più di un operando, quindi un'espressione di operatore binario ha la seguente sintassi:

<operator> <expression1> AN <expression2>

Qualsiasi espressione contenente un operatore con un numero infinito di argomenti può essere espressa con la seguente sintassi:

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

Matematica

Di seguito sono riportate le operazioni matematiche di base in 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> e <b> possono essere espressioni univoche di cui sopra, quindi gli operatori matematici possono essere nidificati e raggruppati indefinitamente.

La matematica viene eseguita considerando gli argomenti come matematica intera in presenza di due NUMBR, ma se una delle espressioni è NUMBAR, le operazioni sono considerate operazioni in virgola mobile.

Esempio

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

Il codice sopra produrrà il seguente output quando lo esegui:

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

Punti importanti -

Considera i seguenti punti importanti relativi al lavoro con operatori matematici in LOLCODE−

  • Se uno o entrambi gli argomenti in un'espressione sono YARN, vengono trattati come NUMBAR.

  • Se uno qualsiasi degli argomenti non può essere convertito in modo sicuro internamente a un tipo numerico, non riesce con un errore

Booleano

Gli operatori booleani vengono applicati a quei valori che possono essere veri o falsi. Gli operatori booleani che lavorano sui TROOF sono i seguenti:

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.

Si noti che <m> e <n> nella sintassi dell'espressione sopra vengono espressi automaticamente come valori TROOF se non sono già valori TROOF.

Confronto

Quando si desidera confrontare due o più operandi in LOLCODE, è possibile farlo in uno dei seguenti metodi:

Metodo 1

È possibile confrontare due operandi binari utilizzando operatori di uguaglianza. La sintassi è mostrata di seguito:

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

Metodo 2

Puoi confrontare se entrambi i valori sono di tipo NUMBR. Ricorda che se uno dei valori è NUMBAR, vengono confrontati come valori in virgola mobile.

Metodo 3

È inoltre possibile eseguire il confronto utilizzando gli operatori minimo e massimo. La sintassi è mostrata di seguito:

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

Puoi vedere il seguente output quando esegui il codice dato:

sh-
4.3$ lci main.lo

TRUE

Concatenazione dei valori

LOLCODE ti consente di concatenare esplicitamente un numero infinito di YARN utilizzando l'operatore SMOOSH… MKAY. Per la concatenazione, più argomenti possono essere separati con ilAN operatore.

Esempio

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

Il codice sopra dato produrrà il seguente risultato all'esecuzione:

sh-
4.3$ lci main.lo

TRUE ONE MORE TRUE ANOTHER TRUE

Tipo Casting

Gli operatori che lavorano su tipi specifici eseguono il cast o convertono in modo implicito i valori di un tipo in un altro tipo in modo sicuro. Se il valore non può essere convertito in modo sicuro in un altro tipo, viene restituito un errore.

Il valore di un'espressione può essere convertito in modo esplicito o convertito in un altro tipo con l'operatore binario MAEK. La sintassi dell'operatore MAEK è:

MAEK <expression> A <type>

dove, <type> può essere uno tra TROOF, YARN, NUMBR, NUMBAR o NOOB.

Per eseguire il cast esplicito di una variabile su un altro tipo, è possibile utilizzare una normale istruzione di assegnazione con l'operatore MAEK o un'istruzione di assegnazione casting come segue:

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

Esempio

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

Il codice precedente produrrà il seguente output:

sh-4.3$ lci main.lo
111.00033
111.00033