Lolcode-quick-guide

提供:Dev Guides
移動先:案内検索

はじめにと環境設定

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

この章では、LOLCODEのローカル環境のセットアップ、Windowsへのインストール、およびスクリプトのオンライン実行(https://www.finddevguides.com/codingground[finddevguides-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を環境変数パスに追加します。 これを行うには、[マイコンピューター]を右クリックして[プロパティ]を選択し、[*システムの詳細設定]を選択します。 [環境変数]を選択します。 このボックスで、 PATH 変数を選択し、[編集]をクリックします。
  • 次に、そのパスの最後に「; C:\ MinGW \ bin; C:\ Python32」を追加します。
  • 次に、*コマンドプロンプト*を開き、たとえば「cd」コマンドを使用してプロジェクトディレクトリに移動します。
  • スクリプトinstall.pyを実行します。

finddevguidesを使用してオンラインでスクリプトを実行する-codingground

スクリプトを簡単かつ迅速に実行するには、finddevguidesが提供するhttps://www.finddevguides.com/codingground[codingground]プラットフォームを使用します。 このためには、次のリンクにアクセスして、スクリプトをオンラインで実行してください-

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

Lolcode-構文

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

構築物

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

Sr.No. Construct & Usage
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)
  • デシヌムバ(ダブル)
    *WORDZ(std
    string)

型はwut専用の言語拡張であることに注意してください。

8
  • IM IN YR LOOP*

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

9

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

これは、他の言語のif演算子に似ています。 演算子は、BIGGER THAN、SMALLER THAN、SAEM ASのいずれかです。 ? 末尾はオプションです。

10

KTHX

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

11
  • KTHXBAI*

これでプログラムが終了します

12

NOWAI

これはelseに対応します

13

PURR <expr>

これにより、引数が画面に表示され、その後に改行が続きます。 これは、wut専用の言語拡張機能です。

14

RELSE

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

15

SHOO

これはもう1つのwut専用の言語拡張機能で、 goto (恐怖!)

16

UP <variable>!!<times>

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

17

VISIBLE <expr>

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

18

YARLY

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

LOLCODEのスラング用語のいくつかの例は次のとおりです-

  • ハイはこんにちは
  • KTHXBYEは大丈夫、ありがとう、バイ
  • ところで、ところで
  • OBTWはああ、ところで
  • TLDRが長すぎます。読まなかった

空白

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

コンマ

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

3つの期間(…)

3つのピリオド(…)を使用すると、行末に(…​)を含めることにより、複数行のコードを単一行または単一コマンドに結合できます。 これにより、コンパイラは次の行のコンテンツを前の行のコンテンツとしてのみ処理します。 各行が3つのピリオドで終わっている限り、無限のコード行を1つのコマンドとして一緒に書くことができます。

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

コメント

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

これらはすべて有効な単一行コメントです。

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 "finddevguides " NAME "!"
KTHXBYE

Lolcode-変数

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

変数の範囲

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

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".

変数の宣言と割り当て

変数を*宣言*するために、LOLCODEにはキーワード「I HAS A」があり、その後に変数名が続きます。 変数を宣言するための構文は次のとおりです。

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

同じステートメントで変数に値を「割り当てる」には、変数名の後に「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

また、次の構文を使用して変数を*宣言*および*割り当て*することができます-

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型について理解します。

タイプ

現在、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と呼ばれ、true/false値はそれぞれ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には別のデータ型があり、多くのプログラミング言語で10進数または浮動小数点を表します。 LOLCODEでは、NUMBARは小数点を1つ含むfloatです。 NUMBARをNUMBRにキャストすると、浮動小数点数の小数部分が切り捨てられ、小数点なしでNUMBRとして返されます。

文字列(ヤーン)

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

スペース、コンマ、ピリオド、感嘆符、その他の記号など、文字列内に何でも記述できます。 単一引用符が欠落しているストリングは、エラーの原因になる場合があります。 コロンはLOLCODEでエスケープ文字として使用され、コロンに続く値は特別な意味を持ちます。

  • :)-コロンに続く閉じ括弧は改行(\ n)を表します
  • *:> *-コロンに続く閉じ山括弧はタブを表します(\ t)
  • :o *-コロンに続く *’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は次の方法で宣言することができます-

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]またはME IZ [関数名](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-オペレーター

演算子は、変数に対してさまざまな操作を実行するために重要な役割を果たします。 この章では、LOLCODEのさまざまな演算子とその使用法について説明します。

オペレータ

数学演算子はプレフィックス表記に依存しています。 オペランドの前にある表記。 すべての演算子に既知の数の引数またはオペランドがある場合、グループ化マーカーは不要です。 演算子に固定引数またはオペランドがない場合、操作はMKAYで閉じられます。

MKAYは、ステートメントの終わりと一致する場合は使用できません。 そのような場合、EOLキーワードを使用する必要があります。 単項数学演算子を使用するには、次の構文を使用します-

<operator> <expression>

ANキーワードは、オプションで引数を分離し、複数のオペランドに単一の操作を適用するために使用することができますので、二項演算子式は次の構文を持っています-

<operator> <expression1> AN <expression2>

引数の数が無限である演算子を含む式は、次の構文で表現できます-

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

Math

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>

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-入出力

この章では、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で使用可能なさまざまなタイプのステートメントについて説明します。

式ステートメント

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

割り当てステートメント

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

<any_variable> <assignment operator> <any expression>

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

条件付きステートメント

If-Thenステートメント

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

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

  • O RLY?
  • YA RLY
  • ノーワイ
  • 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ステートメントの使用中に、YA RLYブロックとNO WAIブロックの間でオプションのMEBBE <any expression>を使用できます。

MEBBEに続く<any expression>がTrue(WIN)の場合、そのブロックが実行されます。 それ以外の場合、その式が偽であれば、ブロックは次の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によって終了されていない場合、GTFOに到達するまで次のOMGブロックが実行されます。

どのリテラルも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

Lolcode-ループ

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

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

反復ループは次の構造を持っています-

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 OUTTA YRステートメントの後に続行します。

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

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で関数を作成および操作する方法について説明します。

関数の定義

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

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)。これは、CやJavaなどの他のプログラミング言語の return 0 に似ています。
  • 他の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

Lolcode-例外処理

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

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

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

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

LOLCODEは定期的に維持されないため、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