Home News DOC Class DL Others Cooker
Documents  >  Refernce  > 
Riceにおける文

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

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

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

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

単一文:


宣言文

定義文

代入文

複合代入文

呼出文

インクリメント文

デクリメント文

return文

break文

continue文

throw文


複合文:


if文

while文

fromto文

keepon文

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;


定義文

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

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


型名 識別子 = 式 ;


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

代入文

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

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


左辺値 = 式 ;


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

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

左辺値が [] 演算子で終わる場合は、左辺値が参照する list クラスのインスタンスの該当するアイテムのアドレスを右辺が返すアドレスに変更する。

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

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

例えば


int i;

int j;

int k;

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


範囲の大きな数値クラスへ範囲の小さな数値クラスを代入できる。


real rr;

rr = 10L; // real へ long を代入。

rr = 10; // real へ int を代入。

long ll;

ll = 10; // long へ int を代入。


この場合、右辺が返すインスタンスを基に左辺値のクラスのインスタンスが新たに生成されて、それが代入される。

複合代入文

複合代入文は、左辺と右辺の算術演算と、その結果の代入を同時に行う省略記法である。

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


左辺値 *= 式 ;

左辺値 /= 式 ;

左辺値 %= 式 ;

左辺値 += 式 ;

左辺値 -= 式 ;


それぞれが以下の代入文と等価である。


左辺値 = 左辺 * 右辺 ;

左辺値 = 左辺 / 右辺 ;

左辺値 = 左辺 % 右辺 ;

左辺値 = 左辺 + 右辺 ;

左辺値 = 左辺 - 右辺 ;


算術演算は個々の演算子の規則に従い、代入は代入文の規則に従う。

呼出文

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

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

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

インクリメント文

後置++演算子で終わる単独の式にセミコロンが続いた文はインクリメント文である。

演算子の左辺の式の値をインクリメントする。左辺の式の返すインスタンスは、int,long,realでなければならない。

オペランドが proxy クラスを返した場合は proxy の実体が使用される。


前置++演算子によるインクリメント文は無い。

デクリメント文

後置--演算子で終わる単独の式にセミコロンが続いた文はデクリメント文である。

演算子の左辺の式の値をデクリメントする。左辺の式の返すインスタンスは、int,long,realでなければならない。

オペランドが proxy クラスを返した場合は proxy の実体が使用される。


前置--演算子によるデクリメント文は無い。

return文

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

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


return ;

return 式 ;


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

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

break文

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

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


break ;


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

continue文

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

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


continue ;


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

throw文

例外が発生したことを通知するために、errorクラスのインスタンスをスローする。

制御はthrow文を囲む直近のtry文を発見するまで呼出履歴を遡る。

try文を発見した場合、そのtry文がcatch節を持てばcatch節の先頭の文へ制御をジャンプする。catch節を持たなければtry文の次の文へ制御をジャンプする。

try文を発見できなかった場合はアプリケーションが終了する。

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


throw ;

throw 式 ;


throw文がtry文のcatch節から例外を再通知する場合は、制御はthrow文を囲むtry文を囲むtry文を発見するまで呼出履歴を遡る。


throw文が式を持たない場合は、スローされるerrorクラスのインスタンスのExceptionDataゲッタは、未初期化のproxy型のインスタンスである。

throw文が式を持つ場合は、スローされるerrorクラスのインスタンスのExceptionDataゲッタは、式で初期化されたproxy型のインスタンスである。

throw文の式が__error(予約変数)の場合は、__errorが、再スローされる。

if文

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

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


if(条件式)

elseif(条件式)

else

endif


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

条件式が数値を返す場合、非ゼロならば真と評価され、ゼロならば偽と評価される。

条件式が proxy クラスを返した場合は proxy の実体が条件式として使用される。

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

if文はendifで終了しなければならない。

endifの代わりに省略形のeiを使用できる。

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

while文

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

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


while(条件式)

endwhile


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

条件式が数値を返す場合、非ゼロならば真と評価され、ゼロならば偽と評価される。

条件式が proxy クラスを返した場合は proxy の実体が条件式として使用される。

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

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

while文はendwhileで終了しなければならない。

endwhileの代わりに省略形のewを使用できる。

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

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

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

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

fromto文

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

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


fromto(式,式)

endfromto


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

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

開始値と終了値が proxy クラスを返した場合は proxy の実体が値として使用される。

開始値と終了値が等しい場合、ループは実行されずにendfromtoの次の文に制御を移動する。

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

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

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

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

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

endfromtoの代わりに省略形のeftを使用できる。

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

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

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

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

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

keepon文

keepon文は、回数でループを制御するための文である。

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


keepon(式)

endkeepon


keeponに続く括弧内の式はループ回数である。

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

ループ回数が proxy クラスを返した場合は proxy の実体がループ回数として使用される。

ループ回数がゼロ以下の場合、ループは実行されずにendkeeponの次の文に制御を移動する。

ループ回数が1以上の場合、その回数分ループが実行される。実行終了後は、endkeeponの次の文に制御を移動する。

制御がcontinue文に到達するか、endkeeponまで達したときは、keeponに制御が移動し実行を繰り返す。

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

keepon文はendkeeponで終了しなければならない。

endkeeponの代わりに省略形のekoを使用できる。

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

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

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

each文

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

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


each(式)

endeach


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

コレクションの指定が proxy クラスを返した場合は proxy の実体がコレクションの指定として使用される。

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

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

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

endeachの代わりに省略形のeeを使用できる。

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節の存在は任意である。

endtryの代わりに省略形のetを使用できる。

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

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

Copyright © Rice All rights reserved.