Home About Rice Downloads Documents Others Cooker CookerGX
Documents  >  Refernce  >  statement
Riceにおける文

文は、ライスコードを構成するものの一つである。通常、それは実行される何らかの動作を表す。

Riceには、単一文と複合文がある。

単一文は、実行すべき何らかの動作を表現する文である。必ず;(セミコロン)で終了する。

複合文とは、実行の流れを制御するための文である。他の文を包含し、適切なキーワードで終了する。

単一文は以下の七種類である。


宣言文

定義文

代入文

呼出文

return文

break文

continue文


複合文は以下の五種類である。


if文

while文

fromto文

each文

try文


宣言文

宣言文は、変数名をプログラムに導入し、その変数名に型を拘束する。

宣言文は、以下の形式である。


型名 識別子 ;


宣言文における型名は、ほとんどの場合、単純な型名の指定である。

例えば


int i;

string s;


ただし、コレクション型のlist,dictionary,queue,stackは内部に保持するタイプ名を指定することができる。

例えば


list{int} listInt;

stack{string} stackString;


上記のように宣言されたコレクション型の変数が指定されたタイプ以外の要素を保持することはできない。

内部に保持する要素の型は、任意の数を入れ子にすることができる。

例えば


list{dictionary{long}} ldl;

stack{queue{list{bool}}} sqlb;


定義文

定義文は、変数の宣言と初期化を同時に行う。

定義文は、以下の形式である。


型名 識別子 = 式 ;


右辺の式は適切な型のインスタンスのアドレスを返さなければならない。

代入文

代入文は、左辺の式への右辺の式の返すアドレスの代入である。

代入文は、以下の形式である。


式 = 式 ;


左辺の式が識別子かフィールド名で終わる場合は、左辺が参照するアドレスを右辺が返すアドレスに変更する。

左辺の式がセッタ名で終わる場合は、右辺を引数にしたセッタ呼び出しに変換される。セッタで何が行われるかは、セッタの実装に依存する。

右辺の式は適切な型のインスタンスのアドレスを返さなければならない。

Riceの代入は式でなく文である。それはインスタンスのアドレスを返さない。したがって、いくつかの言語のように代入を繰り返すことはできない。

例えば


int i;

int j;

int k;

i = j = k = 10;//エラー!


呼出文

メソッド呼び出しで終わる単独の式にセミコロンが続いた文は呼出文である。

ドット演算の後に、メソッド呼び出しで終わる呼出文は、ドットの左側が返すインスタンスのメソッドを呼び出す。

ドット演算の無いメソッド呼出文は、現在のインスタンスのメソッドを呼び出す。

return文

サブルーチンの実行を停止し、サブルーチンの呼び出し元へと制御を返す。returnの後に式が続く場合は、式の返す値を返り値として呼び出し元へ返す。式が無いときは、voidが返される。

return文は、以下の形式である。


return ;

return 式 ;


戻り値の型は、サブルーチン定義の戻り値の型と一致しなければならない。

上記のサブルーチンとは、フィッタ、セッタ、ゲッタ、メソッドである。フィッタとセッターに戻り値はない。したがって、式を持つreturn文を使用するとエラーが発生する。

break文

break文を囲む、直近のループ文の次の文に制御をジャンプする。

break文は、以下の形式である。


break ;


上記のループ文とは、while文、fromto文、each文である。

continue文

continue文を囲む、直近のループ文の先頭の文に制御をジャンプする。

continue文は、以下の形式である。


continue ;


上記のループ文とは、while文、fromto文、each文である。

if文

if文は、条件によって実行の流れを分岐するための文である。

if文は、以下の形式である。


if(条件式)

elseif(条件式)

else

endif


if節とelseif節の括弧内の式は条件式である。条件式が真の場合、その節の文が実行される。条件式がfalseの時は、次のelseif節に同様の動作を繰り返す。

elseif節は、if文内に任意の数だけ存在できる。全ての条件式がfalseでelse節があれば、else節の文が実行される。

if文はendifで終了しなければならない。elseif節とelse節の存在は任意である。条件式は、boolを返す式でなければならない。

if文の節はスコープを生成する。スコープについては、マニュアルを参照すること。

while文

while文は、条件によって実行のループを制御するための文である。

while文は、以下の形式である。


while(条件式)

endwhile


whileに続く括弧内の式は条件式である。条件式が真の時、while文内の先頭の文に制御が移動する。条件式が偽の時は、endwhileの次の文に制御が移動する。

制御がcontinue文に到達するか、endwhileまで達したときは、whileに制御が移動し条件式の評価から実行を繰り返す。

制御がbreak文に到達すると、endwhileの次の文に制御が移動する。

while文はendwhileで終了しなければならない。条件式は、ブールを返す式でなければならない。

while文はスコープを生成する。スコープについては、マニュアルを参照すること。

while文は、while文内の先頭の文に制御が到達すると、予約変数__countを自動的に定義する。

__countはint型の変数であり、ゼロから始まるループ回数で初期化される。

__countは、通常のint型のようにオーバーフローが発生することはない。__countがint型の最大値を超えた場合は、ゼロに戻る。

fromto文

fromto文は、ループインデックスによって実行のループを制御するための文である。

fromto文は、以下の形式である。


fromto(式,式)

endfromto


fromtoに続く括弧内の最初の式はループインデックスの開始値であり、二番目の式は終了値である。

両者はintを返す式でなければならず、fromtoの最初に決定される。ループの最中にその値が変わることは無い。

開始値 <= 終了値の場合、開始値に初期化されたループインデックスが、ループ毎に1加算される。ループインデックスが終了値より大きくなれば、endfromtoの次の文に制御を移動する。

開始値 > 終了値の場合、開始値に初期化されたループインデックスが、ループ毎に1減算される。ループインデックスが終了値より小さくなれば、endfromtoの次の文に制御を移動する。

制御がcontinue文に到達するか、endfromtoまで達したときは、fromtoに制御が移動しループインデックスの評価から実行を繰り返す。

制御がbreak文に到達すると、endfromtoの次の文に制御が移動する。

fromto文はendfromtoで終了しなければならない。

fromto文はスコープを生成する。スコープについては、マニュアルを参照すること。

fromto文は、fromto文内の先頭の文に制御が到達すると、予約変数__countと__indexを自動的に定義する。

__countはint型の変数であり、ゼロから始まるループ回数で初期化される。

__indexはint型の変数であり、現在のループインデックス値で初期化される。

__countは、通常のint型のようにオーバーフローが発生することはない。__countがint型の最大値を超えた場合は、ゼロに戻る。

each文

each文は、コレクションの要素によって実行のループを制御するための文である。

each文は、以下の形式である。


each(式)

endeach


eachに続く括弧内の最初の式はコレクションの指定であり、listかdictionaryかqueueかstackを返さなければならない。

制御がcontinue文に到達するか、endeachまで達したときは、endeachに制御が移動し、コレクションの次の要素に実行を繰り返す。

制御がbreak文に到達すると、endeachの次の文に制御が移動する。

each文はendeachで終了しなければならない。

each文はスコープを生成する。スコープについては、マニュアルを参照すること。

each文は、each文内の先頭の文に制御が到達すると、予約変数__countと__valueを自動的に定義する。さらに、コレクションがdictionaryの場合は、予約変数__keyが自動的に定義される。

__countはint型の変数であり、ゼロから始まるループ回数で初期化される。

__valueはコレクションの要素で初期化される。__valueの型は要素の型に依存する。

__keyはstring型の変数であり、要素のkeyで初期化される。

__countは、通常のint型のようにオーバーフローが発生することはない。__countがint型の最大値を超えた場合は、ゼロに戻る。

try文

try文は、例外によって実行の流れを分岐するための文である。

try文は、以下の形式である。


try

catch

endtry


try節の中で例外が発生した場合、次のように動作する。catch節があれば、catch節の中の最初の文に制御が移動する。catch節が無ければ、endtryの次の文に制御が移動する。

try節の中で例外が発生しなかった場合、catch節はスキップされ、endtryの次の文に制御が移動する。

try文はendtryで終了しなければならない。catch節の存在は任意である。

try文の節はスコープを生成する。スコープについては、マニュアルを参照すること。

catch節の中の先頭の文に制御が到達すると、try文は、予約変数__errorを自動的に定義する。__errorはerrort型の変数である

Copyright © Rice All rights reserved.