Io に関する一連の記事の続きで 、言語の構文について個別に説明します。
簡単に言えば、Io構文は次のように説明できます。単純ですが、奇妙です。 このアプローチは多くの人を驚かせるでしょうが、私はLispのように、側面から見たときにのみ構文が不便であることを保証することを急いでいます。 審美的な観点から、Ioの多くのプログラムは外見的には疎すぎるように見え、画面上に有用なコードで満たされていない「余分な」スペースがたくさんあるという事実を個別に区別できます。この脳の脱臼について、私は効果が著しくしわのあるコードを設計するためのいくつかのルールを思いついた:
- 行の長さは80文字を超えてはいけません(こんにちは、テキストモード!)
- オブジェクトの複製と新しいボディの説明の間には空の行が必要です。
- メソッドとプロパティはグループ化されています
- 余分な必要がなければ、ブラケットは新しい行に転送されません
さあ、行きましょう。 脳の番号2の除去。
構文Io
Ioでは、「キーワード」のようなものはありません。Ioのテキストは、オブジェクトとメッセージの名前で構成される表現です。 したがって、「関数、定義、定義解除、定義」などの構文ガーベッジはありません。
Ioのオブジェクトはスロットで構成される基本的なコンテナであり、スロットはオブジェクトによる何かのストレージの単位です。 まあ、当然そう-スロット。 ここで踊ります。
Ioには、3つの異なる意味の割り当て操作があります。
- =(スロットがどこかで消えた場合、または存在しなかった場合、メッセージupdateSlotにコンパイルされたスロットを更新し、例外がスローされます)
- :=(スロットの設定、setSlotへのコンパイル、新しいスロットの作成、値の割り当て)
- :: =(スロットの作成、newSlotへのコンパイル、スロットの作成、セッターの作成、値の設定)
だから心配しないでください:=これはPascalの遺産ではありません。夜に覚えてはいけません。
(ちなみに、ここでもう少し離れて、前の投稿へのコメントに答えます。はい、Ioでは割り当てをオーバーロードでき、Ioではすべてをオーバーロードできます)
メッセージについて少し説明します。
メッセージはオブジェクトに送信され、後置方式でスペースを介して記録されます。すべてがイオのオブジェクトであるため、チェーンなどの魅力的なプログラミング手法は非常に有名です。 たとえば、このような波線を追加できます。
レーニンは、スプリットリバースforeach(println)を話す
一般的なメッセージパッシングルールは、わずか3ペニーです。オブジェクトメッセージ。 それだけです
各メッセージのハンドラーは独自のスロットにあります。つまり、スロットの名前は、特定のメッセージがスロット所有者のオブジェクトに送信されるときに機能するパターンです。 スロットの作成は、メッセージの送信と同じくらい簡単です。
SomeObject someSlot:= "ナンバリングを続けますか?"
ここでは、文字列値を含むsomeObjectのsomeSlotスロットを作成します。
(この場所で、この記事の執筆中に初めて、私は船長の自明性の役割を感じました、hehe)
したがって、オブジェクトのプロパティを作成できます。
オブジェクトメソッドは次のように作成されます。
SomeObject someMethod:= method(SomeObject someSlot print)
さらに、メソッドはキーワードではなく、オブジェクトの標準メソッドであることに注意することが重要です(つまり、メソッドも可能です...)
メソッドmethod(my brain ...)は、名前を付けてクラスメソッドを取得した場合でも、直接使用できる匿名関数を返します。
メソッドmethod(aaa !! 1)に加えて、ブロックメソッドがありますが、唯一の違いは、ブロックが呼び出されるオブジェクトのスコープによって字句的に制限されることです。 (メッセージシステムについては別の投稿を書きます。ここでは重要なことであり、メガクラットです)。
そして今、奇妙なことが始まります。
特別な魔法をかける
メソッドとブロックメソッドの基本的な形式は次のとおりです。
メソッド(arg1、arg2、...、argN、doメッセージ)
つまり、2つの数値を追加する関数の定義は次のようになります。
add:= method(a、b、a + b)
ご覧のとおり、ここで結果が強制的に返されることはありません。 lisp、erlang、および一般的に機能パラダイムを強力にサポートするほぼすべての言語のように、doメッセージの計算結果が返されます。 公平に言うと、Ioでのリターンは通常の通常のリターンと同じように機能します。
記述の便宜上、通常、次のようにdo-partは次の行に転送されます。
add:= method(a、b、 a + b )
つまり、これはそうではありませんが、もう一度精神を傷つけないように、演算子の括弧として括弧を知覚することが可能です。
条件付き構造
形式は次のとおりです。
if(条件、true-expression、else-expression)
Ioは、Papa-SmalltalkからifTrue、ifFalseなどのメソッドも継承しました。
より馴染みのある形式であれば次のように書くことができます。
if(条件)then(exp)else(exp)
しかし、通常は必要ありません(:
オペレーター
Ioの演算子には、ポーランドの電卓の標準表記や接頭辞表記はありません。通常、すべてが不快です。
1 + 2 1 +(2) 1 +(2 * 4) など...
行
Ioでは、文字列は文字列によく似ています(キャプテンの証拠、助けて!):
s:= "レーニンはキノコだった。\ nそして電波。"
長い文字列とエスケープされていない文字を含む文字列は、三重引用符に詰め込むことができます。
s:= "" "事実は、メキシコの主要な寺院の1つで、 フレスコ画とほとんどのフレスコ画がメキシコの歴史のある出来事に捧げられていることがわかりました、 そして、それは私たちの10月革命を痛々しいほど思い出させました。 同じ疲れ果てた人々が、原始的な道具で武装し、 いくつかの政府を転覆- すべてよく似ています、理解できますか? "" "
画面はほとんどの「バックスラッシュ」「\」に馴染みがあります。 印刷できない文字は、C "\ n、\ t、..."から継承されます。
コメント
Ioは3つの形式のコメントをサポートしています。
Cスタイル:
/ * 決してコンパイルしないでください! BadObject terribleMethod:= method(someAwfulLogic) * /
C ++スタイルのインライン:
// OMFG!
Unixスタイルのインライン:
#古い #学校
後者は主に「シバン」の作成に使用されます(#!/ Usr / bin / io)。
ここで、実際には、Ioの構文全体で、構文の説明が1つの記事に収まると自慢できる言語はほとんどありません。
次は、Ioオブジェクトモデルに関する記事です。
回してご利用ください(-;
(私のブログから)