Onionは、オブジェクト指向プログラミング言語です。言語の機能的には、 Javaをベースにしながら、手軽なプログラミングを支援するいくつかの 機能を備えています。
class class-name [extends super-class-name] [conforms interface-names ...] { member-declaration ... private | protected | public : member-declaration ... ... }
クラスを定義します。
interface interface-name [conforms interface-name ...] { interface-method-declaration ... }
インタフェースを定義します。
expression1 + expression2 expression1 - expression2 expression1 * expression2 expression1 / expression2 expression1 % expression2
expression1とexpression2を評価した後、 その結果に対して、算術演算を行います。各演算子の意味は、 Java言語の演算子と基本的に同じです。
expression1 < expression2 expression1 > expression2 expression1 <= expression2 expression1 >= expression2
expression1とexpression2を評価した後、 その結果に対して、比較演算を行います。各演算子の意味は、 Java言語の演算子と基本的に同じです。
expression1 == expression2 expression1 != expression2
expression1とexpression2を評価し、 その結果に対して、等値演算を行います。等値演算は、基本型 同士の場合、Java言語の場合と同じですが、参照型同士の場合、 expression1の結果のオブジェクトに対して、expression2 を引数としてequalsメソッドを呼び出した結果になります。
expression1 === expression2 expression1 !== expression2
expression1とexpression2を評価し、その結果に対して、 参照等値演算を行います。参照等値演算は、Java言語の等値演算と同じです。
expression is type-name
expressionを評価し、その結果のオブジェクトのクラスが、 type-nameで表される型のサブタイプである場合、真を返します。 Java言語のinstanceof演算子と同じ効果を持ちます。
expression $ type-name
expressionを評価し、その結果をtype-nameの型に 変換します。Java言語のキャスト演算子とほぼ同じです。
`type-name.method-name[argument-declarations] { statement ... }
type-nameで表されるインタフェース型を継承し、method-nameの メソッドを実装したクロージャオブジェクトを生成して、返します。ブロック文 の中からは、外側のスコープのローカル変数を参照することができます。
expression.method-name(parameter-list)
expressionとparameter-listの式を評価し、expression の評価結果のオブジェクトに対して、method-name(parameter-list) の型にマッチするメソッドを呼び出し、その結果を返します。
if condition { statement ... } [else { statement ... }]
conditionが真のとき、ブロック文を実行します。conditionが 偽の場合、else節のブロック文を実行します。
cond { expression { statement ... } ... [else { statement ... }] }
expressionの列を順番に評価して行き、最初に真になった式に 対応するブロック文を実行します。どのexpressionも真にならなかった 場合、else節のブロック文を実行します。
select target-expression { case expression { statement ... } ... [else { statement ... }] }
まず、target-expressionを評価してから、expressionの列を 順番に評価して行き、target-expressionと等しい値のexpression に対応するブロック文を実行します。どのexpressionとも等しくならなかった 場合、else節のブロック文を実行します。
while condition { statement ... }
conditionが真である間、ブロック文を実行します。
for initializer [condition] ; update { statement ... }
最初にinitializerを実行した後、conditionが真である間、 ブロック文、updateを順番に実行します。initializer には、式文、変数宣言、空文のいずれかを書くことができます。
{ statement ... }
{}で囲まれた文の列を、順番に実行します。
;
何もしない文です。for文の初期化子で、何もしない場合などに使用します。
expression ;
expressionの式を評価して、結果の値を捨てます。
throw expression ;
expressionを評価し、その結果得られたオブジェクトを throwします。expressionの型は、java.lang.Throwableの サブクラスでなければなりません。
まずは、定番のHello, worldプログラムを作ってみます。次のプログラムを エディタで打ち込んで、HelloWorld.onという名前で保存してください。
System::out.println("Hello, world!");次に、onioncコマンドを使用して、このファイルをコンパイルします。 次のコマンドを、コンソールに入力してください。
> onionc HelloWolrd.onコンパイルが成功すると、カレントディレクトリに、HelloWorldMain.class というクラスファイルが生成されるはずです。このファイルを、javaコマンド で実行します。次のようにコマンドを入力してください。
> java HelloWorldMain成功すると、コンソールに
Hello, world!と表示されるはずです。