LOLCODE is designed to test the boundaries of the programming language design. It is an esoteric programming language inspired by the funny things on the Internet. This chapter gives you an understanding of LOLCODE types.
Types
Currently, the variable types in LOLCODE are −
- strings (YARN)
- integers (NUMBR)
- floats (NUMBAR)
- and booleans (TROOF)
- Arrays (BUKKIT)
In LOLCODE the variable type is handled dynamically by the compiler. If a variable does not have an initial value, it is called untyped (known as NOOB in LOLCODE).
The syntax for declaring and using different types in LOLCODE is shown below −
To create a variable of any data type
I HAS A <VARIABLE> ITZ A <DATA TYPE>
To create a variable and assign a value to it
I HAS A <VARIABLE> ITZ <EXPRESSION<
To assign a value to an already created data type
<VARIABLE> R <EXPRESSION>
Untyped (NOOB)
The untyped data type (known as NOOB), cannot be converted into any other type except into a TROOF data type. The implicit casting of a NOOB into TROOF makes the variable FAIL. After that any operation on a NOOB results in an error.
Explicit casts of a NOOB data type (i.e. the types that are uninitialized and do not have any initial value) variable results to zero values for all other types.
To define an untyped variable, just declare a variable and assign a value as shown in this example −
HAI 1.2 I HAS A VAR3 VAR3 R "ANYVALUE" VISIBLE VAR3 BTW Or declare in same line I HAS A VAR4 ITZ 44 VISIBLE VAR4 KTHXBYE
When you run the above program, you will find the following result −
sh- 4.3$ lci main.lo ANYVALUE 44
Booleans (TROOFS)
In LOLCODE, the Boolean values are of two types. BOOLEAN generally have two values- true and false. But, in LOLCODE, the Boolean is known as TROOF, and the true/ false values are known as WIN/FAIL respectively. All the uninitialized values like an empty string (“”), or an empty array will all cast to FAIL. All other initialized values evaluate to WIN.
Example
HAI 1.2 I HAS A VAR3 ITZ A TROOF VAR3 R "FAIL" VISIBLE VAR3 KTHXBYE
You can see the following output when you execute the above code −
sh-4.3$ lci main.lo FAIL
Numerical Types (NUMBR)
In LOLCODE, a NUMBR stands for an integer. Any sequence of digits is considered as a NUMBR, unless it has a decimal appearing anywhere in between the sequence. To make any number negative, it may be preceded by a hyphen (-) which signifies a negative number.
Example
HAI 1.2 I HAS A VAR3 ITZ A NUMBR VISIBLE VAR3 KTHXBYE
The above code shows you the following result when you run it−
sh- 4.3$ lci main.lo 0
Similar to NUMBR, LOLCODE has another data type, which represents a decimal or a float in many programming languages. In LOLCODE, a NUMBAR is a float containing one decimal point. Casting a NUMBAR to a NUMBR truncates the decimal portion of the floating point number and returns it as a NUMBR, without any decimal.
Strings (YARN)
In LOLCODE, value containing strings, i.e. string literals (YARN) should start and end with double quotation marks (“”).
Anything may be written inside the string, like space, comma, full stop, exclamation or any other symbol. A string where any single quote is missing may cause an error. Colons are used as escape characters in LOLCODE, and any value following a colon gets a special meaning.
-
🙂 − A closing bracket following a colon represents a newline (n)
-
:> − A closing angle bracket following a colon represents a tab (t)
-
😮 − A ‘o’ character following a colon represents a bell (beep) (g)
-
:” − A “ following a colon represents a literal double quote (“)
-
:: − A colon following a colon represents a single literal colon (:)
Example
HAI 1.2 I HAS A VAR3 ITZ A YARN VAR3 R "XYZ" VISIBLE VAR3 KTHXBYE
The code given above produces the following output upon execution −
sh- 4.3$ lci main.lo XYZ
BUKKIT
This type represents an array. It has named slots, which can contain either variables or functions. A BUKKIT can be declared in the following way −
BTW declaration of the BUKKIT I HAS A [object] ITZ A BUKKIT BTW creating a variable in a slots [object] HAS A [var] ITZ [value] BTW creating a function inside the BUKKIT HOW IZ [object] [function name] (YR [argument1] (AN YR [argument2] (AN YR [argument3] ...))) [function code] IF U SAY SO
A function inside a BUKKIT may also access variables and other functions of the BUKKIT by using ME”Z [var] or ME IZ [function name] (YR [argument1] (AN YR [argument2] (AN YR [argument3] …))) MKAY.
Example
HAI 1.2 I HAS A VAR6 ITZ A BUKKIT BTW DECLARING AN ARRAY VAR6 HAS A VAR7 ITZ "DOGE" BTW VAR7 IS A STRING VARIABLE THAT IS INSERTED INTO ARRAY VAR6 VISIBLE VAR6''Z VAR7 BTW GET THE ELEMENT OF ARRAY KTHXBYE
This is the output you will find when you run the code given above −
sh- 4.3$ lci main.lo DOGE