Lolcode-クイックガイド

LOLCODEは、イン​​ターネット上の面白いことに触発された難解プログラミング言語です。プログラミング言語設計の境界をテストするように設計されています。

この章では、LOLCODEのローカル環境のセットアップ、Windowsへのインストール、Tutorialspoint-codinggroundでのスクリプトのオンライン実行について説明します。

ローカル環境のセットアップ

LOLCODEインタプリタはC言語で書かれています。複数のプラットフォームでLOLCODE言語で記述されたコードを解釈します。LOLCODEインタープリターはlciとして知られており、LOLCODEインタープリターの略です。

LOLCODEは、MACオペレーティングシステム専用のインタプリタの直接インストールを公式にサポートしていることに注意してください。ご使用のオペレーティングシステムにLOLCODEをインストールするには、以下の手順に従う必要があります。

  • Command + Spaceを押して、次のように入力します Terminal を押して enter/return キー
  • ターミナルアプリで実行
  • $ git clone https://github.com/justinmeza/lci.git
  • $ cd lci
  • $ cmake。
  • $ make && make install

Windowsへのインストール

WindowsオペレーティングシステムにLOLCODEをインストールする必要がある場合は、次の手順を実行してください-

  • まず、MinGWとPythonを環境変数パスに追加します。これを行うには、右クリックしますMy Computer, 選択 Properties, 次に、 Advanced system settings. 選択する Environment Variables。このボックスで、PATH 変数をクリックしてからクリックします Edit

  • 次に、そのパスの最後に「; C:\ MinGW \ bin; C:\ Python32」を追加します。

  • 次に、 Command Prompt たとえば、「cd」コマンドを使用してプロジェクトディレクトリに移動します。

  • スクリプトinstall.pyを実行します。

TutorialsPointを使用してオンラインでスクリプトを実行する-コーディンググラウンド

スクリプトを簡単かつ迅速に実行するには、TutorialsPointが提供するコーディンググラウンドプラットフォームを使用します。これについては、次のリンクにアクセスして、スクリプトをオンラインで実行してください-

https://www.tutorialspoint.com/execute_lolcode_online.php

LOLCODEの構文は他のプログラミング言語とは異なりますが、覚えやすいです。この章では、LOLCODEの基本的な構文について説明します。

構成

LOLCODE構造は俗語です。次の表は、これまでに実装された構成のアルファベット順のリストを示しています。

シニア番号 構築と使用法
1

BTW

1行のコメントを開始します。

2

DOWN <variable>!!<times>

これは、変数=変数-回に対応します。「times」は、wutのみの言語拡張であることに注意してください。

3

GIMMEH <variable>

これは入力ステートメントを表します。

4

GTFO

これはに似ています break 他の言語で、ループから抜け出す方法を提供します。

5

HAI

これはに対応します main ()他の言語で機能します。これは、LOLCODEのプログラムエントリポイントです。

6

HEREZ <label>

これは別のwutのみの言語拡張であり、SHOOで使用するラベルを宣言します

7

I HAS A <type> <variable>

これは、上記のタイプの変数を宣言します。

LOLCODEには3つの組み込みタイプがあります-

  • NUMBAH(int)
  • DECINUMBAH(ダブル)
  • WORDZ(std :: string)

タイプは、wutのみの言語拡張であることに注意してください。

8

IM IN YR LOOP

これにより、無限ループが開始されます。ループを終了する唯一の方法は、GTFOを使用することです。に対応(;;) 他の言語で

9

IZ <expr1> <operator> <expr2>?: Conditional structure

これは、他の言語のif演算子に似ています。演算子は次のいずれかです:BIGGER THAN、SMALLER THAN、SAEMAS。?に注意してください 最後にオプションです。

10

KTHX

ブロックを終了します。に対応}

11

KTHXBAI

これでプログラムは終了です

12

NOWAI

これは他に対応します

13

PURR <expr>

これにより、引数が画面に出力され、その後に改行が続きます。これは、wutのみの言語拡張です。

14

RELSE

これはに対応します else (if)

15

SHOO

これは別のwutのみの言語拡張であり、 goto (ホラー!)

16

UP <variable>!!<times>

これは、変数=変数+回に対応します。ここで「times」は、wutのみの言語拡張です。

17

VISIBLE <expr>

これにより、引数が画面に出力されます。これは改行を出力しないことに注意してください。

18

YARLY

これは、「真の」条件付きブロックの開始を示します

LOLCODEのスラング用語の例は次のとおりです。

  • HAIはこんにちは
  • KTHXBYEは大丈夫です、ありがとう、さようなら
  • ちなみに
  • ちなみにOBTWはああ
  • TLDRが長すぎます。読んでいない

空白

ほとんどのプログラミング言語では、キーワードまたはトークンの間にスペースを入れない場合があります。ただし、一部の言語では、トークンを区別するためにスペースがトークンで使用されます。

コンマ

カンマは、ほとんどの言語で改行キーワードのように動作します。たとえば、 \n JavaおよびCの場合。コンマ(、)を使用してコマンドを区切る場合は、LOLCODEで1行に多くのコマンドを記述できます。

3つのピリオド(…)

3つのピリオド(…)を使用すると、行の最後に(...)を含めることで、コードの複数の行を1つの行または1つのコマンドに結合できます。これにより、コンパイラは次の行の内容を前の行の内容としてのみ扱うようになります。各行が3つのピリオドで終了している限り、コードの無限行を1つのコマンドとしてまとめて記述できます。

コメントは改行で終了します。コメント(BTW)の後の行継続(...)および(、)はlciによって無視されることに注意してください。

コメント

1行のコメントの後に、BTWキーワードが続きます。これらは、プログラム本体内のどこにでも発生する可能性があります。プログラムの最初の行、プログラムの間、ある行の間、またはプログラムの最後にあります。

これらはすべて有効な1行コメントです-

I HAS A VAL ITZ 19      BTW VAL = 19
I HAS A VAL ITZ 19,   BTW VAL = 19
I HAS A VAL ITZ 14
BTW VAR = 14

LOLCODEでは、複数行のコメントに続いてOBTWが書き込まれ、TLDRで終了します。

これは有効な複数行コメントです-

I HAS A VAL ITZ 51
   OBTW this is a comment
      No it’s a two line comment
      Oops no.. it has many lines here
   TLDR

ファイルの作成

LOLCODEプログラムは、HAIキーワードで始まり、KTHXBYEで終わる必要があります。LOLCODEは速記言語を使用するため、HAIは基本的にHiの略であり、KTHXBYEは次のように覚えることができます。“Ok, thanks, bye ”

HAI 1.2
I HAS A NAME
VISIBLE "NAME::"!
GIMMEH NAME
VISIBLE "tutorialsPoint " NAME "!"
KTHXBYE

他のプログラミング言語と同様に、LOLCODEではさまざまなタイプの変数を定義できます。この章では、LOLCODEでの変数の操作について説明します。

変数の範囲

変数のスコープは、関数またはプログラムブロックに対してローカルです。つまり、あるスコープで定義された変数を、同じプログラムの他のスコープで呼び出すことはできません。変数は、宣言された後でのみアクセスできます。

LOLCODEには変数のグローバルスコープがないことに注意してください。

命名規則

変数名は通常、識別子と呼ばれます。LOLCODEで変数に名前を付けるための規則のいくつかを次に示します-

  • 変数識別子は、すべて大文字または小文字(または2つの混合)にすることができます。

  • それらは文字でのみ開始でき、その後に他の文字、数字、およびアンダースコアを続けることができます。

  • LOLCODEでは、変数に名前を付ける際にスペース、ダッシュ、またはその他の記号を使用することはできません。

  • 変数識別子では大文字と小文字が区別されます。

LOLCODE-の変数の有効な名前と無効な名前の規則の一部を次に示します。

  • 名前は常にアルファベットで始まる必要があります。例えば、name, Name 有効です。

  • 変数の名前を数字で始めることはできません。例えば、2var 無効です。

  • 変数の名前を特殊文字で始めることはできません。

  • 変数には、開始インデックスを除いて、名前内の任意の場所に_または数字を含めることができます。例えば、name2_m は有効な名前です。

LOLCODEの有効な名前の例を以下に示します-

HAI 1.2
I HAS A food ITZ "111.00033"
I HAS A food2 ITZ "111"
I HAS A fo_od ITZ "1"
VISIBLE food
VISIBLE food2
VISIBLE fo_od
KTHXBYE

上記のコードのすべての宣言ステートメントは有効であり、実行すると次の出力が生成されます-

sh-4.3$ lci main.lo
111.00033
111
1

無効なステートメントのいくつかの例とその出力を以下に示します-

例1

HAI 1.2
I HAS A 2food ITZ "111.00033"
KTHXBYE

上記のコードを実行すると、次の出力が得られます-

sh-
4.3$ lci main.lo
Line 2: Expected: identifier; Got: int(2).

例2

HAI 1.2
I HAS A _food ITZ "111.00033"
KTHXBYE

上記のコードを実行すると、次の出力が得られます-

sh-
4.3$ lci main.lo
Line 2: Unrecognized sequence at: _food ITZ "111.00033".

例3

HAI 1.2
I HAS A f$ood ITZ "111.00033"
KTHXBYE

上記のコードを実行すると、次の出力が得られます-

sh-
4.3$ lci main.lo
Line 2: Unrecognized sequence at: $ood ITZ "111.00033".

変数の宣言と割り当て

declare変数であるLOLCODEは、キーワード「I HAS A」に続いて、変数名を提供します。変数を宣言するための構文を以下に示します。

I HAS A VAR BTW VAR is empty now, You can use any name instead of var

assign変数に同じステートメント内の値を指定すると、変数名の後に「ITZ」を付けて、割り当てる値を指定できます。次の構文を使用して、変数に値を割り当てます-

<variable> R <expression>

VAR R "Green"         BTW VAR is now a YARN and equals "Green"
VAR R 30              BTW VAR is now a NUMBR and equals 30

あなたもすることができます declare そして assign 次の構文を使用して同時に変数-

I HAS A VAR ITZ VALUE

I HAS A NAME ITS “TUTORIALS POINT”

HAI 1.2
BTW this is how we declare variables
I HAS A food
I HAS A bird

BTW this is how we assign variables
food R 1
bird R 5

BTW this is how initialize variables
I HAS A biz ITZ "OMG!"
VISIBLE food
VISIBLE biz
VISIBLE bird
KTHXBYE

上記のプログラムは、変数の宣言を示し、それらを出力します。出力は-

sh-
4.3$ lci main.lo
1
OMG!
5

型キャスト

ある型の値を別の型に変換するには、型キャストを使用します。NUMBARをNUMBRにキャストすると、浮動小数点数の小数部分が切り捨てられます。NUMBARをYARNにキャストすると(たとえば、印刷することにより)、出力はデフォルトの小数点以下2桁に切り捨てられます。

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

LOLCODEプログラムで宣言されたすべての変数はローカル変数であり、この言語にはどの変数のグローバルスコープもありません。

LOLCODEは、プログラミング言語設計の境界をテストするように設計されています。これは、インターネット上の面白いことに触発された難解プログラミング言語です。この章では、LOLCODEタイプについて理解します。

タイプ

現在、LOLCODEの変数タイプは-です。

  • 文字列(YARN)
  • 整数(NUMBR)
  • フロート(NUMBAR)
  • およびブール値(TROOF)
  • アレイ(BUKKIT)

LOLCODEでは、変数タイプはコンパイラーによって動的に処理されます。変数に初期値がない場合、型なしと呼ばれます(LOLCODEではNOOBと呼ばれます)。

LOLCODEでさまざまな型を宣言して使用するための構文を以下に示します-

任意のデータ型の変数を作成するには

I HAS A <VARIABLE> ITZ A <DATA TYPE>

変数を作成してそれに値を割り当てるには

I HAS A <VARIABLE> ITZ <EXPRESSION<

作成済みのデータ型に値を割り当てるには

<VARIABLE> R <EXPRESSION>

型なし(NOOB)

型指定されていないデータ型(NOOBと呼ばれる)は、TROOFデータ型以外の他の型に変換できません。NOOBをTROOFに暗黙的にキャストすると、変数はFAILになります。その後、NOOBでの操作はエラーになります。

NOOBデータ型(つまり、初期化されておらず、初期値を持たない型)変数を明示的にキャストすると、他のすべての型ではゼロ値になります。

型なし変数を定義するには、この例に示すように、変数を宣言して値を割り当てるだけです。

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

上記のプログラムを実行すると、次の結果が得られます-

sh-
4.3$ lci main.lo 
ANYVALUE
44

ブール値(TROOFS)

LOLCODEでは、ブール値には2つのタイプがあります。BOOLEANには通常、trueとfalseの2つの値があります。ただし、LOLCODEでは、ブール値はTROOFと呼ばれ、真/偽の値はそれぞれWIN / FAILと呼ばれます。空の文字列( "")や空の配列など、初期化されていないすべての値はすべてFAILにキャストされます。他のすべての初期化された値はWINと評価されます。

HAI 1.2
I HAS A VAR3 ITZ A TROOF
VAR3 R "FAIL"
   VISIBLE VAR3
KTHXBYE

上記のコードを実行すると、次の出力が表示されます-

sh-4.3$ lci main.lo
FAIL

数値タイプ(NUMBR)

LOLCODEでは、NUMBRは整数を表します。数字のシーケンスは、シーケンス間のどこかに小数が表示されない限り、NUMBRと見なされます。任意の数を負にするために、負の数を示すハイフン(-)を前に付けることができます。

HAI 1.2
I HAS A VAR3 ITZ A NUMBR
   VISIBLE VAR3
KTHXBYE

上記のコードは、実行すると次の結果を示しています-

sh- 
4.3$ lci main.lo
0

NUMBRと同様に、LOLCODEには別のデータ型があり、多くのプログラミング言語で小数または浮動小数点数を表します。LOLCODEでは、NUMBARは小数点以下1桁を含む浮動小数点数です。NUMBARをNUMBRにキャストすると、浮動小数点数の小数部分が切り捨てられ、小数なしでNUMBRとして返されます。

ストリングス(YARN)

LOLCODEでは、文字列を含む値、つまり文字列リテラル(YARN)は、二重引用符( "")で開始および終了する必要があります。

スペース、コンマ、ピリオド、感嘆符、その他の記号など、文字列内には何でも書き込むことができます。一重引用符が欠落している文字列は、エラーを引き起こす可能性があります。コロンはLOLCODEのエスケープ文字として使用され、コロンに続く値には特別な意味があります。

  • :) −コロンに続く閉じ括弧は、改行を表します(\ n)

  • :> −コロンに続く閉じ角括弧は、タブを表します(\ t)

  • :o − a ‘o’ コロンに続く文字はベル(ビープ音)を表します(\ g)

  • :" −コロンに続く「」は、リテラルの二重引用符( ")を表します。

  • :: −コロンに続くコロンは、単一のリテラルコロン(:)を表します。

HAI 1.2
I HAS A VAR3 ITZ A YARN
VAR3 R "XYZ"
   VISIBLE VAR3
KTHXBYE

上記のコードは、実行時に次の出力を生成します-

sh-
4.3$ lci main.lo 
XYZ

BUKKIT

このタイプは配列を表します。名前付きスロットがあり、変数または関数のいずれかを含めることができます。BUKKITは次の方法で宣言できます-

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

BUKKIT内の関数は、ME'Z [var]またはMEIZ [function name](YR [argument1](AN YR [argument2](AN YR [argument3] .. .. )))MKAY。

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

これは、上記のコードを実行したときに表示される出力です。

sh-
4.3$ lci main.lo 
DOGE

演算子は、変数に対してさまざまな操作を実行するために重要な役割を果たします。この章では、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>はそれぞれ上記の一意の式である可能性があるため、数学演算子はネストして無期限にグループ化できます。

数学は、2つの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として扱われます。

  • 引数のいずれかを内部で数値型に安全にキャストできない場合、エラーで失敗します

ブール値

ブール演算子は、trueまたはfalseの値に適用されます。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の2つ以上のオペランドを比較する場合は、次のいずれかの方法で比較できます。

方法1

等式演算子を使用して、2つのバイナリオペランドを比較できます。構文を以下に示します-

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タイプであるかどうかを比較できます。いずれかの値がNUMBARの場合、それらは浮動小数点値として比較されることに注意してください。

方法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演算子を使用して、無限の数のYARNを明示的に連結できます。連結の場合、複数の引数を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>

ここで、<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

この章では、LOLCODE端末から値を入力する方法と、端末に出力する方法について説明します。

ターミナルからのI / O

キーワードVISIBLEを使用して、LOLCODEで何かを印刷できます。VISIBLEは、無限の文字数を入力として受け取ることができる関数であり、内部で連結して文字列またはYARNに変換することにより、一度にすべてを印刷します。

VISIBLE関数は、行末またはコンマのいずれかである区切り文字で終了または終了します。

出力は、コンパイラによってキャリッジリターンで自動的に終了します。最後のトークンが感嘆符(!)で終了している場合、返されたキャリッジはこの記号で上書きされます。

VISIBLE <any_expression> [<any_expression> ...][!]

LOLCODEには、現在、一部のデータをファイルに出力するための定義された標準がないことに注意してください。

ユーザーからの入力を取得するために使用されるキーワードはGIMMEHです。これは、任意の数の変数を入力として受け取ることができる関数です。入力としてYARNを受け取り、任意の変数に値を格納します。

GIMMEH <any_variable>

HAI 1.2
   I HAS A VAR ITZ A YARN BTW DECLARE A VARIABLE FOR LATER USE
   VISIBLE "TYPE SOMETHING AND ENTER"
   GIMMEH VAR BTW GET INPUT (STRING) INTO VARIABLE
   VISIBLE VAR
KTHXBYE

このコードを実行すると、数値を入力するように求められ、その数値が次の行に自動的に出力されます。このコードを実行すると、次の出力が出力されます-

sh-
4.3$ lci main.lo

TYPE SOMETHING AND ENTER
67

67

LOLCODEを使用すると、さまざまなステートメントを介してプログラムのフローを制御できます。この章では、LOLCODEで使用できるさまざまなタイプのステートメントについて説明します。

式ステートメント

割り当てのない式、つまり単に数学演算や関数を呼び出すことは、LOLCODEの正当なステートメントです。式が評価されると、その最終値は一時変数ITに配置されます。ITの価値はローカルスコープに残り、次に式に置き換えられるまで存在します。

割り当てステートメント

代入ステートメントは、任意の式の出力を特定の変数に割り当てるために使用されます。それらは一般的に次の形式です-

<any_variable> <assignment operator> <any expression>

割り当てられる前であっても、式で変数を使用できることに注意してください。

条件文

If-Thenステートメント

if-thenステートメントは、IT変数を操作する非常に単純な操作です。これは、CやJavaなどの他のプログラミング言語のif–elseステートメントに似ています。

if–thenステートメントを適用するための4つのキーワードがあります。

  • O RLY?
  • YARLY
  • NO WAI
  • OIC

一般的な形式は-

<any_expression>
O RLY?
   YA RLY
      <code to execute if above condition is true>
   NO WAI
      <code to execute in this block>
OIC

上記のステートメントはすべて、-のようにコンマで区切って同じ行に書き込むことができます。

BOTH SAEM NAMES AN "Name", O RLY?
   YA RLY, VISIBLE "My name is ABCD"
   NO WAI, VISIBLE "Your name is ABCD"
 OIC

if-thenステートメントを使用している間、オプションのMEBBE <任意の式>をYARLYブロックとNOWAIブロックの間で使用できます。

MEBBEに続く<anyexpression>がTrue(WIN)の場合、そのブロックが実行されます。それ以外の場合、その式がfalseの場合、ブロックは次のMEBBE、NO WAI、またはOICステートメントまでスキップされます。

<any expression>
O RLY?
   YA RLY
      <code to be executed if true>
   MEBBE <expression>
      <code to be executed mebbe is true>
   MEBBE <expression>
      <code to be executed mebbe is true>
   NO WAI
      <code to be executed if above are false>
OIC

BOTH SAEM NAMES AN "NAME"
O RLY?
   YA RLY, VISIBLE "YOUR NAME IS ABCD"
   MEBBE BOTH SAEM ANIMAL AN "OUR NAME IS ABCD"
   VISIBLE "NO ABCD"
OIC

ケースステートメント

LOLCODEでは、キーワード「WTF?」他の多くの言語での切り替えに似ています。キーワードWTF?比較のための式の値としてITを取ります。WTFを使用するには、OMGによって比較ブロックが開かれます。これは、式ではなくリテラルである必要があります。

他の言語の場合と同様に、各リテラルは一意である必要があることに注意してください。

OMGブロックは、GTFOステートメントで終了する必要があります。OMGブロックがGTFOによって終了されていない場合、次のOMGブロックはGTFOに到達するまで実行されます。

どのリテラルもtrueと評価されない場合、デフォルトのケースはOMGWTFによって示されます。

WTF?
   OMG <any value to compare>
      <code block to execute if expression is satisfied>
   OMG <any value to compare>
      <code block to execute if expression is satisfied>
   OMGWTF
      <code block to execute as a default case>
OIC
NAME, WTF?
   OMG "A"
      VISIBLE "ABCD"
   GTFO
   OMG "E"
      VISIBLE "EFGH"
   GTFO
   OMGWTF
      VISIBLE "ZYXW"
   OIC

上記のコードの出力結果は次のようになります-

「E」:

EFGH

ループはプログラミング言語で使用され、一連のステートメントを複数回実行します。たとえば、数字5を5回印刷する場合は、VISIBLE “5” ステートメントを5回実行すると、単一のループを実行できます VISIBLE “5” 5回のステートメント。

単純なループは、IM IN YR <label>およびIMOUTTA YR <label>で表されます。このように定義されたループは無限ループであり、GTFObreakステートメントで終了する必要があります。

反復ループの構造は次のとおりです。

IM IN YR <label> <any_operation> YR <any_variable> [TIL|WILE <expression>]
   <code block to execute inside the loop multiple times>
IM OUTTA YR <label>

関数本体の内部では、UPPIN(1ずつインクリメント)、NERFIN(1ずつデクリメント)、または任意の単項関数を使用できることに注意してください。

TILキーワードは、式をTROOFとして計算します。FAILと評価された場合、ループはもう一度続行され、WINと評価された場合、ループの実行は停止し、一致するIM OUTTAYRステートメントの後に続行されます。

WILEキーワードはTILキーワードの反対であり、式がWINの場合は実行が続行され、それ以外の場合はループが終了します。

HAI 1.2
I HAS A VAR ITZ 0
IM IN YR LOOPY UPPIN YR VAR TIL BOTH SAEM VAR AN 10
   VISIBLE SUM OF VAR AN 1
IM OUTTA YR LOOPY
KTHXBYE

上記のコードをLOLCODEコンパイラまたはオンラインコーディンググラウンドでコンパイルすると、次の出力が生成されます。

sh-
4.3$ lci main.lo
1
2
3
4
5
6
7
8
9
10

関数は、コードを何度も書くための時間と労力を削減するため、プログラミングに役立ちます。適切に記述された関数コードは、高い再利用性を提供します。この章では、LOLCODEで関数を記述および操作する方法について説明します。

関数の定義

関数は、その関数を呼び出すことによって一度に実行されるステートメントのセットです。LOLCODEでは、関数の定義はキーワード「HOW IZ I」で始まり、終了キーワードは「IF USAYSO」です。

LOLCODEで関数を記述するための構文は次のとおりです。

HOW IZ I <function name> [YR <parameter/argument> [AN YR <other _arguments..> …]]
   <code block to execute / Set of statements to execute>
IF U SAY SO

重要なポイント

LOLCODE関数を定義するときは、次の重要な点を考慮してください。

  • LOLCODEでは、関数は特定の固定数の引数のみを入力として受け入れることができます。

  • 引数またはパラメーターは、関数の変数となる識別子です。

  • LOLCODEの関数は、引数として渡された値以外の値にアクセスできません。

関数からの戻り値

コーディングでのリターンとは、何かが返されることを意味します。プログラミングでは、関数は実行が完了したときにプログラムに何らかの値を返すことができます。LOLCODEでは、関数は以下に説明するようにさまざまな値を返します-

  • FOUND YR <any_expression> 関数ブロックが完全に実行されたときの式の値を返します。

  • GTFO 値なし(NOOB)を返します。これは、 return 0 CやJavaなどの他のプログラミング言語で。

  • 他のreturnステートメントが見つからない場合は、 IF U SAY SO が実行され、IT変数の値が返されます。

関数の呼び出し

関数はプログラムの本体で定義され、後で実行のために呼び出されます。与えられた数の引数を受け入れる関数は、以下に示すように呼び出されます-

I IZ <function_name> [YR <expression_One> [AN YR <expression_Two> 
   [AN YR <expression_Three> ...]]] MKAY

関数を呼び出すとき、式は関数名と、それに続く関数が受け入れる引数の数によって形成されます。これらの引数は、単純な変数または任意の式にすることができます。関数が単純な値ではなく任意の式を受け入れる場合、式の値は関数が呼び出される前に計算されます。

関数が受け入れる引数の数は、関数の定義で定義する必要があることに注意してください。

HAI

HOW DUZ I MAINUMBA
   I HAS A NUMBA
   GIMMEH NUMBA
   FOUND YR NUMBA
IF U SAY SO

VISIBLE MAINUMBA

KTHXBYE

上記のコードを実行すると、入力を求められ、入力を送信すると、結果と同じように表示されます。たとえば、55と入力すると、55が出力されます。

HAI 1.2
HOW IZ I MULTIPLY YR FIRSTOPERANT AN YR SECONDOPERANT
   FOUND YR PRODUKT OF FIRSTOPERANT AN SECONDOPERANT
   IF U SAY SO
   VISIBLE I IZ MULTIPLY YR 2 AN YR 3
KTHXBYE

入力オペランドの乗算を実行する上記の関数は、実行すると次の出力を出力します-

sh-
4.3$ lci main.lo

6

HAI 1.2
I HAS A STRINGARRAY ITZ A BUKKIT
   STRINGARRAY HAS A VAR17 ITZ "OBJECT1"
   STRINGARRAY HAS A VAR18 ITZ "OBJECT2"
   HOW IZ STRINGARRAY ACCESS YR VARIABLE
      FOUND YR STRINGARRAY'Z SRS VARIABLE
   IF U SAY SO
   I HAS A STRING ITZ "VAR17"
   VISIBLE STRINGARRAY IZ ACCESS YR STRING MKAY
KTHXBYE

上記のコードが生成する出力は次のとおりです。

sh-
4.3$ lci main.lo 
OBJECT1

例外処理は、アプリケーションの通常のフローを維持できるように、ランタイムエラーを処理するための強力なメカニズムの1つです。LOLCODEは、他のプログラミング言語のように例外処理をあまりサポートしていません。他の言語のTry-Catchブロックと同様に、LOLCODEにはPLZブロックがあります。

たとえば、存在する場合と存在しない場合があるファイルを開きたい場合は、-を使用します。

PLZ OPEN FILE "filename.TXT"?
   AWSUM THX
      VISIBLE FILE
      O NOES
   INVISIBLE "ERROR!"
KTHX

例外を引き起こす可能性のあるコードはPLZブロックに記述され、例外はONOESブロックで処理されます。ここで、INVISIBLEキーワードは、内部メッセージをデバッガーに送信します。

LOLCODEは定期的に保守されていないため、LOLCODE例外処理やその他の多くの機能に利用できる更新はこれ以上ないことに注意してください。

前の章では、LOLCODEでのプログラミングについて説明しました。この章では、LOLCODEの上級レベルでコーディングできるいくつかの例を学習します。

例1:数値の累乗を計算するプログラム

この例では、入力数値の累乗を計算するコードがあります。たとえば、2を4の累乗にすると、16になります。

HAI 1.2
HOW IZ I POWERTWO YR NUM
   BTW RETURN 1 IF 2 TO POWER OF 0
   BOTH SAEM NUM AN 0, O RLY?
   YA RLY, FOUND YR 1
   OIC
  
   BTW CALCULATE 2 TO POWER OF NUM
   I HAS A INDEX ITZ 0
   I HAS A TOTAL ITZ 1
   IM IN YR LOOP UPPIN YR INDEX TIL BOTH SAEM INDEX AN NUM
   TOTAL R PRODUKT OF TOTAL AN 2
   IM OUTTA YR LOOP
  
   FOUND YR TOTAL
   IF U SAY SO
   BTW OUTPUT: 8
   VISIBLE I IZ POWERTWO YR 4 MKAY
KTHXBYE

上記のコードは、正常に実行されると次の出力を出力します-

sh-
4.3$ lci main.lo
16

例2:配列を作成するプログラム

この例は、5つの要素と各要素の値が10の配列を作成するためのコードを示しています。

HAI 1.3
   OBTW
      CREATES A ONE DIMENSIONAL ARRAY WITH N ELEMENTS, EACH IS A 0
   TLDR
	HOW IZ I MAKEMATRIX YR N
      I HAS A MATRIX ITZ A BUKKIT
      IM IN YR LOOP UPPIN YR INDEX TIL BOTH SAEM INDEX N
         MATRIX HAS A SRS INDEX ITZ 10
      IM OUTTA YR LOOP
  
      FOUND YR MATRIX
   IF U SAY SO

      I HAS A N ITZ 5
      I HAS A MATRIX ITZ A BUKKIT
      MATRIX R I IZ MAKEMATRIX YR N MKAY

	   BTW PRINTS THE CONTENTS OF THE ARRAY
      IM IN YR LOOP UPPIN YR INDEX TIL BOTH SAEM INDEX N
         VISIBLE MATRIX'Z SRS INDEX
   IM OUTTA YR LOOP
KTHXBYE

上記のコードを実行すると、次の出力が表示されます-

sh-4.3$ lci main.lo
10
10
10
10
10

例3:数値の階乗を計算するプログラム

このプログラムは、入力数の階乗を計算するためのコードを示しています。

HAI 1.3
   HOW IZ I FACTORIAL YR N
   BOTH SAEM N AN 0
   O RLY?
	   YA RLY, FOUND YR 1
   NO WAI
      FOUND YR PRODUKT OF N AN I IZ FACTORIAL YR DIFF OF N AN 1 
      MKAY
   OIC
   IF U SAY SO

   VISIBLE I IZ FACTORIAL YR 6 MKAY
KTHXBYE

上記のプログラムは、数値6の階乗を出力し、次のように出力を確認できます。

sh-
4.3$ lci main.lo

720

例4:電卓を設計するプログラム

LOLCODEプログラミングを使用して、基本的な数学演算を実行する電卓を設計できます。以下のコードを確認してください-

HAI 1.2

   I HAS A V1
   I HAS A V2
   I HAS A CHOICE
   
   VISIBLE "VALUE1"
   GIMMEH V1
   VISIBLE "VALUE2"
   GIMMEH V2VISIBLE "Choose Operation? + - * /"
   GIMMEH CHOICE CHOICE, WTF?
   OMG "+"
      VISIBLE SUM OF V1 AN V2
      
      GTFO

   OMG "-"
      VISIBLE DIFF OF V1 AN V2

      GTFO
   OMG "*"
      VISIBLE PRODUKT OF V1 AN V2
      
      GTFO

   OMG "/"
      VISIBLE QUOSHUNT OF V1 AN V2

      GTFO
   OMGWTF
      VISIBLE "CHOOSE SOME OPERATION"
   OIC

KTHXBYE

以下の入力で上記のプログラムを実行すると−

3
4
+

上記のプログラムを実行すると、次の出力が生成されます。

VALUE1
VALUE2
Choose Operation? + - * /
7