[前へ] [目次へ] [次へ]

演算子


FGESの演算子は式内でのみ使用でき、組み込みと定義用、
および単項、二項、分割、特殊の分類があります。

また、識別子には Name Type Object Flag の4種類があり、
演算子によって使用できる識別子の種類が定義されています。
Name は名前識別子、 Type は 型名 解釈した識別子、
Object は一時オブジェクトを含むオブジェクト、 Flag はフラグレジスタです。
また、 Name は Object に変換することができ、その場合ローカル変数を示します。
さらに、 Flag も Object に変換することができ、その場合一時オブジェクトを示します。

●組み込み演算子
●定義用演算子
●演算子の優先順位
●演算子の構文と詳細

●組み込み演算子

   組み込み演算子は動作が言語仕様として定義されて変更できない演算子です。
   組み込み演算子は以下のものがあります。
   各演算子の構文、および詳細は後述します。
表記名前結合分類動作
$動的参照特殊右辺の識別名を動的解決します。
$$動的参照特殊右辺の変数が示す識別名を動的解決します。
@=LocalNewローカル割り当て特殊ローカル寿命のオブジェクトを作成し、割り当てます。
#GetClassクラス取得単項左辺のオブジェクトの型を示すクラスオブジェクトを取得します。
()メソッド呼び出し特殊左辺のオブジェクトをメソッドとして呼び出します。
呼び出しのホストオブジェクトは左辺のオブジェクトを名前解決したオブジェクトになります。
@()thisメソッド呼び出し特殊左辺のオブジェクトをメソッドとして呼び出します。
呼び出しのホストオブジェクトはthisになります。
@メンバ参照特殊メソッドの対象クラスのクラスメンバ名前空間を示します。
@@グローバル参照特殊グローバル名前空間を示します。
.メンバ参照特殊左辺のオブジェクトメンバを参照します。
->ポインタメンバ参照特殊左辺のポインタに結び付けられているオブジェクトのメンバを参照します。
#TypeCast型キャスト特殊左辺のオブジェクトを右辺の型にキャストします。
::クラスメンバ参照特殊左辺のクラスオブジェクトのクラス共有変数を参照します。
.:拡張メンバ参照特殊左辺のオブジェクトメンバを拡張参照します。
->:ポインタ拡張メンバ参照特殊左辺のポインタに結び付けられているオブジェクトのメンバを拡張参照します。
*ポインタ参照単項右辺のポインタに結び付けられているオブジェクトを返します。
#Newオブジェクト作成特殊左辺のMemoryHost管理のオブジェクトを作成します。
#IsNULL空参照判定特殊左辺の参照が空参照か判定します。
#IsValid有効参照判定特殊左辺の参照がアクセス可能か判定します。
#Existメンバ名判定特殊左辺のオブジェクトに指定した名前があるか判定します。
#Validメンバ名有効判定特殊左辺のオブジェクトの指定した名前がアクセス可能か判定します。
#TypeCheckキャスト判定特殊左辺のオブジェクトを右辺の型にキャスト可能か判定します。
!真偽反転単項右辺の真偽を反転します。
#=参照代入二項右辺のオブジェクトを左辺のポインタに結び付けます。
#=DownCast参照代入二項右辺のオブジェクトを左辺のポインタにダウンキャストして結び付けます。
#=DynamicCast参照代入二項右辺のオブジェクトを左辺のポインタにキャストして結び付けます。
#==参照比較二項両辺の参照に関連付けられているオブジェクトが同じか判定します。
#!=参照比較二項両辺の参照に関連付けられているオブジェクトが異なるか判定します。
^^論理XOR二項両辺を真偽値評価し、そのXOR演算の結果を返します。
enforce強制適用単項右辺の読み取り専用属性を解除し、強制的に変更可能にします。

   ●専用構文を持つ組み込み演算子
      次の演算子は専用の構文解析を行う組み込み演算子です。
      結合規則と見かけ上の解釈順が異なる場合があるので注意してください。
表記名前結合分類動作
class局所クラス-特殊局所クラスを定義し、そのクラスオブジェクトを返します。
classから先はクラス定義の構文を使用します。
method無名メソッド-特殊無名メソッドを定義し、そのメソッドオブジェクトを返します。
methodから先はメソッド定義の構文を使用します。
closureクロージャ-特殊クロージャを定義し、そのクロージャオブジェクトを返します。
closureから先はメソッド定義の構文を使用し、
クロージャは定義した位置のローカル名前空間にアクセスできます。
&&論理AND特殊両辺を真偽値評価し、そのAND演算の結果を返します。
この演算子は短絡評価を行い、左辺と右辺を別の式であるように扱います。
||論理OR特殊両辺を真偽値評価し、そのOR演算の結果を返します。
この演算子は短絡評価を行い、左辺と右辺を別の式であるように扱います。
<<=>>参照交換-特殊両辺の参照に関連付けられているオブジェクトを交換します。
?:条件-特殊左辺式を真偽値評価し、中辺または右辺の式を評価します。
この演算子は各辺を別の式であるように扱います。
??NULL条件-特殊左辺の評価結果が空参照でなければそれを返し、空参照なら右辺を返します。
この演算子は短絡評価を行い、左辺と右辺を別の式であるように扱います。
??=NULL条件代入-特殊左辺の評価結果が空参照でなければ、右辺を代入します。
この演算子は短絡評価を行い、左辺と右辺を別の式であるように扱います。

●定義用演算子

   定義用演算子はクラスで独自に定義できる演算子です。
   戻り値の有無、引数の数、代入用かどうかについては言語仕様として定義されていますが、
   それ以外の動作については各クラスで任意に定義することができます。
   ただし演算子の一般的用法から逸脱した動作を定義するべきではありません。
   
   クラスで演算子を定義するには #operator に続いて定義したい演算子を記述した名前を
   メソッド名として指定します。( #operator= や #operator+ など)
   代入用演算子は編集可能属性の参照からしか呼び出せません。
   単項演算子は対象のオブジェクトを呼び出しのホストオブジェクトとして呼び出されます。
   二項演算子は左辺のオブジェクトを呼び出しのホストオブジェクトとして、右辺を引数に呼び出されます。
   特殊演算子は左辺のオブジェクトを呼び出しのホストオブジェクトとして、
   括弧の中身をメソッド呼び出しと同じように引数リストとして呼び出されます。
   
   異なる型のオブジェクトが関わる場合、
   呼び出されるのは呼び出しのホストオブジェクトのクラスに定義された演算子メソッドです。
   このため、例えば 1+1.1 と 1.1+1 の結果は同じになりません。
   ( 1+1.1 は Integer 型の2となり、 1.1+1 は Float 型の2.1となります)

   また、コンパイラは参照の型で型チェックを行いますが、
   実際に呼び出されるのは常に「参照に結び付けられたオブジェクトのクラスに定義された演算子メソッド」です。
   基底クラスに演算子メソッドが定義されていて派生クラスで演算子メソッドが定義されていない場合や、
   外部インターフェイスの互換性がない場合、コンパイル時では検出できず実行時に例外が発生します。

   定義用演算子は以下の通りです。
表記名前結合分類代入用戻り値引数の数備考
[]添字参照特殊いいえあり任意
{}添字参照特殊いいえあり任意
=[]一斉代入特殊はいあり任意
={}一斉代入特殊はいあり任意
:拡張名前参照二項いいえあり1.: および 
->: 演算子から呼び出される。
\拡張評価単項いいえあり0
++インクリメント→/←単項はいあり0前置/後置で共用
--デクリメント→/←単項はいあり0前置/後置で共用
~NOT単項いいえあり0
-算術否定単項いいえあり0二項と区別するためメソッド名は
#operator!!として定義する。
*乗算二項いいえあり1
/除算二項いいえあり1
%剰余二項いいえあり1
+加算二項いいえあり1
-減算二項いいえあり1
<<左シフト二項いいえあり1
>>右シフト二項いいえあり1
&AND二項いいえあり1
^XOR二項いいえあり1
|OR二項いいえあり1
=代入二項はいあり1
+=加算代入二項はいあり1
-=減算代入二項はいあり1
*=乗算代入二項はいあり1
/=除算代入二項はいあり1
%=剰余代入二項はいあり1
|=OR代入二項はいあり1
&=AND代入二項はいあり1
^=XOR代入二項はいあり1
<<=左シフト代入二項はいあり1
>>=右シフト代入二項はいあり1
==等価二項いいえあり1
<より小さい二項いいえあり1
>より大きい二項いいえあり1
<=以下二項いいえあり1
>=以上二項いいえあり1
!=以外二項いいえあり1


●演算子の優先順位

   全ての演算子には優先順位が設定されており、式内の優先順位が高いものから評価されます。
   優先順位が同じ演算子が複数ある場合、結合規則に従って評価されます。
   次の表で同じ行に示した演算子は同じ優先順位で、上側が高優先順位です。
演算子優先順位表
$ $$ @=LocalNew class method closure
#GetClass () @() @ @@ . -> #TypeCast :: [] {} =[] ={} .: ->: \
++(前置) --(前置)
++(後置) --(後置)
*(単項)
#New #IsNULL #IsValid #Exist #Valid #TypeCheck
! ~ -(単項)
*(二項) / %
+ -(二項)
<< >>
& ^ |
= += -= *= /= %= |= &= ^= <<= >>= #= #=DownCast #=DynamicCast
== < > <= >= != #== #!= ^^ enforce
&& || ?? ??=
<<=>> ?:

●演算子の構文と詳細

   各演算子の構文および詳細です。

●$ (動的参照、組み込み、結合→、特殊)
   指定した名前を動的解決します。
   「識別名」は実行時に名前解決が行われるようになり、
   コンパイル時に存在しない名前でもコンパイルエラーにならなくなります。
   この演算子はメンバ参照演算子とペアで使用する必要があり、ローカル変数には使用できません。

   構文:
      $ 識別名(Name)

   評価後の識別子タイプ: Name
   評価後の識別子は識別名として使用されます。

●$$ (動的参照、組み込み、結合→、特殊)
   オブジェクトの内容を使って名前を動的解決します。
   構文1では「識別名」はローカル変数名を示し、
   指定したローカル変数のオブジェクトから INativeString で参照する名前を取得します。
   構文2では「式」の結果オブジェクトから INativeString で参照する名前を取得します。
   この演算子はメンバ参照演算子とペアで使用する必要があり、ローカル変数には使用できません。

   構文1:
      $$ 識別名(Name)

   構文2:
      $$( 式(Object) )

   評価後の識別子タイプ: Name
   評価後の識別子は識別名として使用されます。

●@=LocalNew (ローカル割り当て、組み込み、結合→、特殊)
   新しいローカルオブジェクトを作成し、ローカル変数に割り当てます。
   「割り当てるローカル変数」は作成したオブジェクトを割り当てるローカル変数名を指定します。
   ここで指定された変数にそれまで割り当てられていたオブジェクトの寿命は変更されません。
   作成したローカルオブジェクトの寿命は割り当てたローカル変数が所属するローカルスコープと同じです。
   構文2の「式」の結果は実体化できる型のクラスオブジェクトでなければいけません。
   
   実体定義したローカル変数に対してこの演算子を適用すると、
   最初に割り当てられていたオブジェクトは別に参照を複製していない限り到達不能になります。
   ただしオブジェクトの寿命は変更されていないので、もともとの寿命に到達すると解放されます。
   ループ内でこの演算子を使うと問題になる可能性があることに注意が必要です。

   構文1:
      割り当てるローカル変数(Name) @=LocalNew 型名(Type)

   構文2:
      割り当てるローカル変数(Name) @=LocalNew( 式(Object) )

   評価後の識別子タイプ: Object
   評価結果は左辺を返します。

●class (局所クラス、組み込み、結合なし、特殊)
   局所クラスを定義し、定義した局所クラスのクラスオブジェクトを返します。
   この演算子を起点としてクラス定義を開始し、クラス定義の終了までをこの演算子の範囲として扱います。
   
   定義した局所クラスのクラスオブジェクトは定義した位置にハードコードされ、
   式を評価しているメソッドのメソッドオブジェクトと同じメモリ管理オブジェクトに接続されます。
   
   局所クラスの定義ではクラス名を省略でき、省略した場合は適当な名前が定義名として設定されます。
   局所クラスはグローバル名前空間に登録されないので、型名としては使用できません。
   
   構文:
      クラス定義の構文に同じ

   評価後の識別子タイプ: Object
   評価結果は定義した局所クラスのクラスオブジェクトを返します。
   評価結果の型は FGESClass です。

●method (無名メソッド、組み込み、結合なし、特殊)
   無名メソッドを定義し、定義した無名メソッドのメソッドオブジェクトを返します。
   この演算子を起点としてメソッド定義を開始し、メソッド定義の終了までをこの演算子の範囲として扱います。
   
   定義した無名メソッドのメソッドオブジェクトは定義した位置にハードコードされ、
   式を評価しているメソッドのメソッドオブジェクトと同じメモリ管理オブジェクトに接続されます。
   
   無名メソッドは原則として式を評価しているメソッドと同じクラスを対象にコンパイルされます。
   ただし、メソッド宣言で名前部分にクラス名のみ( classpath:: の形式)を記述した場合、そのクラスを対象にコンパイルされます。
   
   無名メソッドは式を評価しているメソッドとは独立しているので、
   外側のメソッドのローカル名前空間にはアクセスできません。
   
   現在、無名メソッドではデフォルト引数は空参照しか指定できません。
   
   構文:
      メソッド定義の構文に同じ

   評価後の識別子タイプ: Object
   評価結果は定義した無名メソッドのメソッドオブジェクトを返します。
   評価結果の型は FGESMethod です。

●closure (クロージャ、組み込み、結合なし、特殊)
   クロージャを定義し、定義したクロージャのクロージャオブジェクトを返します。
   この演算子を起点としてメソッド定義を開始し、メソッド定義の終了までをこの演算子の範囲として扱います。
   
   定義したクロージャのメソッドオブジェクトは定義した位置にハードコードされ、
   式を評価しているメソッドのメソッドオブジェクトと同じメモリ管理オブジェクトに接続されます。
   そしてこの演算子を実行する度にクロージャのメソッドオブジェクトと
   実行時のローカルスコープを結合したクロージャオブジェクトが生成され返されます。
   なお、クロージャオブジェクトは結合したローカルスコープ寿命となります。
   
   クロージャは式を評価しているメソッドと同じクラスを対象にコンパイルされます。
   クロージャは結合しているローカルスコープもローカル名前空間として扱うことができますが、
   クロージャオブジェクトを生成したスレッド以外では実行できません。
   
   現在、クロージャではデフォルト引数は空参照しか指定できません。
   
   構文:
      method ではなく closure で始めること以外、メソッド定義の構文に同じ

   評価後の識別子タイプ: Object
   評価結果は定義したメソッドとローカルスコープを結合したクロージャオブジェクトを返します。
   評価結果の型は FGESClosure です。

●#GetClass (クラス取得、組み込み、結合→、単項)
   「対象」のオブジェクトの型を示すクラスオブジェクトを返します。
   
   構文:
      対象(Object) #GetClass

   評価後の識別子タイプ: Object
   評価結果は「対象」のオブジェクトの型を示すクラスオブジェクトを返します。
   評価結果の型は INativeClass です。

●() (メソッド呼び出し、組み込み、結合→、特殊)
   「呼び出すメソッド」を「引数リスト」と共に呼び出します。
   「呼び出すメソッド」は FGESMethod または BoundMethod または FGESClosure 型である必要があります。
   「呼び出すメソッド」がメンバ参照演算子によって解決されている場合、
   最後に名前解決したオブジェクトが呼び出しのホストオブジェクトになります。
   「呼び出すメソッド」が単体で記述されていた場合、
   ローカル名前空間、式を評価しているメソッドの対象クラスのクラスメンバ名前空間、
   グローバル名前空間の順に名前を探索し、最初に見つかった名前で解決されます。
   式を評価しているメソッドの対象クラスのクラスメンバ名前空間で名前解決された場合、
   呼び出しのホストオブジェクトは this になります。
   それ以外の場合、呼び出しのホストオブジェクトは NULL になります。
   「引数リスト」は引数として渡すオブジェクトを , 区切りで指定します。
   「引数リスト」が a,b, のように , で終わる場合、最後の , はないものとして扱います。
   
   構文:
      呼び出すメソッド(Object) ( 引数リスト(,区切りのObject) )

   例:
      method_name();//引数がない場合
      method_name("引数1");//引数が一つの場合
      method_name("引数1","引数2");//引数が二つの場合
      method_name("引数1","引数2","引数3");//引数が三つの場合


   評価後の識別子タイプ: Object または なし
   評価結果は「呼び出すメソッド」の戻り値を返します。
   評価結果の型は「呼び出すメソッド」の戻り値型です。
   「呼び出すメソッド」が戻り値を持たない場合は評価後の識別子もありません。
   「呼び出すメソッド」が動的解決されている場合は戻り値型は AnyClass 型として扱われます。

●@() (thisメソッド呼び出し、組み込み、結合→、特殊)
   「呼び出すメソッド」を「引数リスト」と共に呼び出します。
   「呼び出すメソッド」は FGESMethod または BoundMethod または FGESClosure 型である必要があります。
   「呼び出すメソッド」がどのように名前解決されたかに関わらず、
   呼び出しのホストオブジェクトは this になります。
   「呼び出すメソッド」の対象クラスが this と同じか基底クラスでない場合、実行時に例外が発生します。
   「引数リスト」は引数として渡すオブジェクトを , 区切りで指定します。
   「引数リスト」が a,b, のように , で終わる場合、最後の , はないものとして扱います。

   構文:
      呼び出すメソッド(Object) @( 引数リスト(,区切りのObject) )

   例:
      method_name@();//引数がない場合
      method_name@("引数1");//引数が一つの場合
      method_name@("引数1","引数2");//引数が二つの場合
      method_name@("引数1","引数2","引数3");//引数が三つの場合


   評価後の識別子タイプ: Object または なし
   評価結果は「呼び出すメソッド」の戻り値を返します。
   評価結果の型は「呼び出すメソッド」の戻り値型です。
   「呼び出すメソッド」が戻り値を持たない場合は評価後の識別子もありません。
   「呼び出すメソッド」が動的解決されている場合は戻り値型は AnyClass 型として扱われます。

●@ (メンバ参照、組み込み、結合→、特殊)
   式を評価しているメソッドの対象クラスのクラスメンバ名前空間で「識別名」を名前解決します。
   「識別名」に該当する名前がインスタンス変数であった場合、
   this 参照に結び付けられているオブジェクトのインスタンス変数として扱います。
   
   構文:
      @ 識別名(Name)

   評価後の識別子タイプ: Object
   評価結果は「識別名」に該当する参照を返します。

●@@ (グローバル参照、組み込み、結合→、特殊)
   グローバル名前空間で「識別名」を名前解決します。
   
   構文:
      @@ 識別名(Name)

   評価後の識別子タイプ: Object
   評価結果は「識別名」に該当する参照を返します。

●. (メンバ参照、組み込み、結合→、特殊)
   「対象」のクラスメンバ名前空間で「識別名」を名前解決します。
   
   構文:
      対象(Object) . 識別名(Name)

   評価後の識別子タイプ: Object
   評価結果は「識別名」に該当する参照を返します。

●-> (ポインタメンバ参照、組み込み、結合→、特殊)
   「対象」のポインタのサブタイプ型のクラスメンバ名前空間で「識別名」を検索し、
   「対象」のポインタに設定されているオブジェクトで名前解決します。
   「対象」の型は Pointer か ConstPointer か AnyClass でなければいけません。
   この演算子は構文1は (* 対象 ). 識別名 としたのと同等の扱いを行います。
   構文2は (* 対象 )[ 引数リスト ] としたのと同等の扱いを行います。
   構文3は (* 対象 ){ 引数リスト } としたのと同等の扱いを行います。
   
   構文1:
      対象(Object) -> 識別名(Name)
   構文2:
      対象(Object) ->[ 引数リスト(,区切りのObject) ]
   構文3:
      対象(Object) ->{ 引数リスト(,区切りのObject) }

   評価後の識別子タイプ: Object
   評価結果は「識別名」に該当する参照、または #operator[] #operator{} の戻り値を返します。

●#TypeCast (型キャスト、組み込み、結合→、特殊)
   「対象」のオブジェクトを「型名」または「式」の結果オブジェクトの型にキャストします。
   「対象」のオブジェクトはキャスト先の型と同じ型、または派生型、
   またはインターフェイスとしてサポートしている必要があります。
   構文2の式の結果オブジェクトは INativeTypeObject をサポートしている必要があります。
   
   構文3は構文1と同様にコンパイルされますが、指定した型との間に関連があるかをコンパイル時に確認しません。
   この構文はダウンキャストと型キャストを連続で行う場合等に便利です。

   「対象」のオブジェクトがキャスト先の型にキャストできるか確認するには #TypeCheck を使用します。

   構文1:
      対象(Object) #TypeCast 型名(Type)

   構文2:
      対象(Object) #TypeCast( 式(Object) )

   構文3:
      対象(Object) #TypeCast$ 型名(Type)

   評価後の識別子タイプ: Object
   評価結果は「対象」のオブジェクトをキャスト先の型として返します。

●:: (クラスメンバ参照、組み込み、結合→、特殊)
   「対象」のクラスオブジェクト内のクラス共有変数を取得します。
   この演算子はオーバーライドなどに関わりなく、
   指定したクラスオブジェクトが保有するクラス共有変数を返します。
   「対象」が単体で記述されていた場合、
   ローカル名前空間、式を評価しているメソッドの対象クラスのクラスメンバ名前空間、
   グローバル名前空間の順に名前を探索し、最初に見つかった名前で解決されます。
   「対象」のオブジェクトは INativeClass をサポートしている必要があります。
   名前解決した結果がクラス共有変数でない場合、エラーになります。
   
   構文:
      対象(Object) :: 識別名(Name)

   評価後の識別子タイプ: Object
   評価結果は「対象」内の「識別名」のクラス共有変数を返します。

●[] (添字参照、定義用、結合→、特殊)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator[] を呼び出します。
   「引数リスト」は引数として渡すオブジェクトを , 区切りで指定します。
   「引数リスト」が a,b, のように , で終わる場合、最後の , はないものとして扱います。

   構文:
      対象(Object) [ 引数リスト(,区切りのObject) ]

   評価後の識別子タイプ: Object
   評価結果は #operator[] の戻り値を返します。

●{} (添字参照、定義用、結合→、特殊)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator{} を呼び出します。
   「引数リスト」は引数として渡すオブジェクトを , 区切りで指定します。
   「引数リスト」が a,b, のように , で終わる場合、最後の , はないものとして扱います。

   構文:
      対象(Object) { 引数リスト(,区切りのObject) }

   評価後の識別子タイプ: Object
   評価結果は #operator{} の戻り値を返します。

●=[] (一斉代入、定義用、代入、結合→、特殊)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator=[] を呼び出します。
   「引数リスト」は引数として渡すオブジェクトを , 区切りで指定します。
   「引数リスト」が a,b, のように , で終わる場合、最後の , はないものとして扱います。

   構文:
      対象(Object) =[ 引数リスト(,区切りのObject) ]

   評価後の識別子タイプ: Object
   評価結果は #operator=[] の戻り値を返します。

●={} (一斉代入、定義用、代入、結合→、特殊)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator={} を呼び出します。
   「引数リスト」は引数として渡すオブジェクトを , 区切りで指定します。
   「引数リスト」が a,b, のように , で終わる場合、最後の , はないものとして扱います。
   
   構文:
      対象(Object) ={ 引数リスト(,区切りのObject) }

   評価後の識別子タイプ: Object
   評価結果は #operator={} の戻り値を返します。

●.: (拡張メンバ参照、組み込み、結合→、特殊)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator: を呼び出します。
   「識別名」は String 型の一時変数に変換されてから演算子メソッドに渡されます。
   
   構文:
      対象(Object) .: 識別名(Name)

   評価後の識別子タイプ: Object
   評価結果は #operator: の戻り値を返します。

●->: (ポインタ拡張メンバ参照、組み込み、結合→、特殊)
   「対象」のポインタに設定されているオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のポインタに設定されているオブジェクトの #operator: を呼び出します。
   「識別名」は String 型の一時変数に変換されてから演算子メソッドに渡されます。
   「対象」の型は Pointer か ConstPointer か AnyClass でなければいけません。
   この演算子は (* 対象 ).: 識別名 としたのと同等の扱いを行います。
   
   構文:
      対象(Object) ->: 識別名(Name)

   評価後の識別子タイプ: Object
   評価結果は #operator: の戻り値を返します。

●\ (拡張評価、定義用、結合→、単項)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator\ を呼び出します。
   
   構文:
      対象(Object) \

   評価後の識別子タイプ: Object
   評価結果は #operator\ の戻り値を返します。

●++ (インクリメント、定義用、代入、結合→/←、単項)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator++ を呼び出します。

   後置の場合、式の最後に呼び出しが予約され、対象がそのまま返されます。
   結合規則は前置が←、後置が→です。
   
   構文:前置の場合
      ++ 対象(Object)

   構文:後置の場合
      対象(Object) ++

   評価後の識別子タイプ: Object
   評価結果は前置の場合、 #operator++ の戻り値を返します。
   後置の場合、「対象」を返します。後置の場合演算子メソッドの戻り値は取得できません。

●-- (デクリメント、定義用、代入、結合→/←、単項)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator-- を呼び出します。

   後置の場合、式の最後に呼び出しが予約され、対象がそのまま返されます。
   結合規則は前置が←、後置が→です。
   
   構文:前置の場合
      -- 対象(Object)

   構文:後置の場合
      対象(Object) --

   評価後の識別子タイプ: Object
   評価結果は前置の場合、 #operator-- の戻り値を返します。
   後置の場合、「対象」を返します。後置の場合演算子メソッドの戻り値は取得できません。

●* (ポインタ参照、組み込み、結合←、単項)
   「対象」のポインタが持つ参照を返します。
   「対象」の型は Pointer か ConstPointer か AnyClass でなければいけません。
   この演算子は参照にアクセスするわけではないので、ポインタに NULL が設定されていても例外は発生しません。
   
   構文:
      * 対象(Object)

   評価後の識別子タイプ: Object
   評価結果は「対象」のポインタが持つ参照です。

●#New (オブジェクト作成、組み込み、結合→、特殊)
   「管理オブジェクト」が管理する新しいオブジェクトを作成して返します。
   
   作成されたオブジェクトは「管理オブジェクト」の消滅に連動して消滅します。
   「管理オブジェクト」を引数など外部から受け取ることにより、
   メソッドが終了しても消滅しないオブジェクトを作成することができます。
   
   「管理オブジェクト」は INativeMemoryHost をサポートしている必要があります。
   構文2の「式」の結果は実体化できる型のクラスオブジェクトでなければいけません。

   構文1:
      管理オブジェクト(Object) #New 型名(Type)

   構文2:
      管理オブジェクト(Object) #New( 式(Object) )

   評価後の識別子タイプ: Object
   評価結果は作成したオブジェクトを返します。

●#IsNULL (空参照判定、組み込み、結合→、特殊)
   「対象」が空参照であれば真、何らかのオブジェクト参照があれば偽を返します。
   ただし、既に消滅したオブジェクト参照であっても偽が返されます。
   参照にアクセス可能かどうかを判定したい場合は #IsValid を使うべきです。
   
   この演算子は参照自体を処理するため、参照が無効であっても例外を発生しません。

   構文:
      対象(Object) #IsNULL

   評価後の識別子タイプ: Flag
   評価結果は「対象」が空参照か否かをフラグレジスタで返します。

●#IsValid (有効参照判定、組み込み、結合→、特殊)
   「対象」がアクセス可能な参照であれば真、空参照または無効参照であれば偽を返します。
   
   この演算子は参照自体を処理するため、参照が無効であっても例外を発生しません。

   構文:
      対象(Object) #IsValid

   評価後の識別子タイプ: Flag
   評価結果は「対象」がアクセス可能な参照か否かをフラグレジスタで返します。

●#Exist (メンバ名判定、組み込み、結合→、特殊)
   「対象」のオブジェクトのクラスメンバ名前空間に「識別名」があれば真、なければ偽を返します。
   「識別名」は動的参照演算子 $ または $$ の結果である必要があり、
   「対象」の参照の型ではなく実際に割り当てられているオブジェクトの型で評価されます。
   
   チェックされるのは「識別名」が存在するか否かで、参照が有効かは関係ありません。
   「識別名」の参照にアクセス可能かどうかを判定したい場合は #Valid を使うべきです。

   構文:
      対象(Object) #Exist 識別名(Name)

   評価後の識別子タイプ: Flag
   評価結果は「対象」に「識別名」が存在するか否かをフラグレジスタで返します。

●#Valid (メンバ名有効判定、組み込み、結合→、特殊)
   「対象」のオブジェクトのクラスメンバ名前空間に「識別名」がありアクセス可能であれば真、
   「識別名」がない場合や「識別名」の参照が無効である場合は偽を返します。
   「識別名」は動的参照演算子 $ または $$ の結果である必要があり、
   「対象」の参照の型ではなく実際に割り当てられているオブジェクトの型で評価されます。
   
   構文:
      対象(Object) #Valid 識別名(Name)

   評価後の識別子タイプ: Flag
   評価結果は「対象」の「識別名」にアクセスできるか否かをフラグレジスタで返します。

●#TypeCheck (キャスト判定、組み込み、結合→、特殊)
   「対象」のオブジェクトを「型名」または「式」の結果オブジェクトの型にキャストできるか判定します。
   構文2の式の結果オブジェクトは INativeTypeObject をサポートしている必要があります。

   構文1:
      対象(Object) #TypeCheck 型名(Type)

   構文2:
      対象(Object) #TypeCheck( 式(Object) )

   評価後の識別子タイプ: Flag
   評価結果は「対象」のオブジェクトをキャスト先の型にキャストできる場合真、
   できない場合偽をフラグレジスタで返します。

●! (真偽反転、組み込み、結合←、単項)
   「対象」がフラグレジスタの場合、真偽を反転して返します。
   「対象」がオブジェクトの場合、 INativeBool で真偽値化した後、真偽を反転して返します。
   
   構文1:
      ! 対象(Flag)

   構文2:
      ! 対象(Object)

   評価後の識別子タイプ: Flag
   評価結果は「対象」の真偽値を反転してフラグレジスタで返します。

●~ (NOT、定義用、結合←、単項)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator~ を呼び出します。

   構文:
      ~ 対象(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator~ の戻り値を返します。

●- (算術否定、定義用、結合←、単項)
   「対象」のオブジェクトを呼び出しのホストオブジェクトとして、
   「対象」のオブジェクトの #operator!! を呼び出します。

   構文:
      - 対象(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator!! の戻り値を返します。

●* (乗算、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator* を呼び出します。

   構文:
      左辺(Object) * 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator* の戻り値を返します。

●/ (除算、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator/ を呼び出します。

   構文:
      左辺(Object) / 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator/ の戻り値を返します。

●% (剰余、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator% を呼び出します。

   構文:
      左辺(Object) % 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator% の戻り値を返します。

●+ (加算、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator+ を呼び出します。

   構文:
      左辺(Object) + 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator+ の戻り値を返します。

●- (減算、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator- を呼び出します。

   構文:
      左辺(Object) - 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator- の戻り値を返します。

●<< (左シフト、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator<< を呼び出します。

   構文:
      左辺(Object) << 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator<< の戻り値を返します。

●>> (右シフト、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator>> を呼び出します。

   構文:
      左辺(Object) >> 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator>> の戻り値を返します。

●& (AND、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator& を呼び出します。

   構文:
      左辺(Object) & 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator& の戻り値を返します。

●^ (XOR、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator^ を呼び出します。

   構文:
      左辺(Object) ^ 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator^ の戻り値を返します。

●| (OR、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator| を呼び出します。

   構文:
      左辺(Object) | 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator| の戻り値を返します。

●= (代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator= を呼び出します。

   構文:
      左辺(Object) = 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator= の戻り値を返します。

●+= (加算代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator+= を呼び出します。

   構文:
      左辺(Object) += 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator+= の戻り値を返します。

●-= (減算代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator-= を呼び出します。

   構文:
      左辺(Object) -= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator-= の戻り値を返します。

●*= (乗算代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator*= を呼び出します。

   構文:
      左辺(Object) *= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator*= の戻り値を返します。

●/= (除算代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator/= を呼び出します。

   構文:
      左辺(Object) /= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator/= の戻り値を返します。

●%= (剰余代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator%= を呼び出します。

   構文:
      左辺(Object) %= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator%= の戻り値を返します。

●|= (OR代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator|= を呼び出します。

   構文:
      左辺(Object) |= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator|= の戻り値を返します。

●&= (AND代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator&= を呼び出します。

   構文:
      左辺(Object) &= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator&= の戻り値を返します。

●^= (XOR代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator^= を呼び出します。

   構文:
      左辺(Object) ^= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator^= の戻り値を返します。

●<<= (左シフト代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator<<= を呼び出します。

   構文:
      左辺(Object) <<= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator<<= の戻り値を返します。

●>>= (右シフト代入、定義用、代入、結合←、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator>>= を呼び出します。

   構文:
      左辺(Object) >>= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator>>= の戻り値を返します。

●#= (参照代入、組み込み、結合←、二項)
   「左辺」のポインタに「右辺」を設定します。
   「右辺」は「左辺」のポインタのサブタイプ型と同じ型か、派生クラスか、
   サブタイプ型のインターフェイスをサポートしていなければいけません。
   「左辺」の型は Pointer か ConstPointer か AnyClass でなければいけません。
   「左辺」か「右辺」に AnyClass や動的解決がある場合、この演算子は #=DynamicCast と同等になります。
   この演算子は「右辺」の参照にアクセスするわけではないので、「右辺」が NULL でも例外は発生しません。

   設定したポインタはポインタ参照演算子 * または -> でアクセスできます。

   参照代入系演算子のコンパイル時チェック早見表(I/Fはインターフェイス)
演算子同じ型アップキャストダウンキャスト継承関係のないクラスクラス→I/FI/F→クラス異なるI/F
#=××××
#=DownCast×××
#=DynamicCast

   構文:
      左辺(Object) #= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は左辺を返します。

●#=DownCast (参照代入、組み込み、結合←、二項)
   「左辺」のポインタに「右辺」を設定します。
   「右辺」は「左辺」のポインタのサブタイプ型と同じ型か、継承関係のあるクラスか、
   サブタイプ型のインターフェイスをサポートしていなければいけません。
   ダウンキャスト(基底クラスから派生クラスへのキャスト)を行う場合、
   実行時に「右辺」のオブジェクトが「左辺」のサブタイプ型と同じ型でも、その派生クラスでもない場合例外が発生します。
   「左辺」の型は Pointer か ConstPointer か AnyClass でなければいけません。
   「左辺」か「右辺」に AnyClass や動的解決がある場合、この演算子は #=DynamicCast と同等になります。
   この演算子は「右辺」の参照にアクセスするわけではないので、「右辺」が NULL でも例外は発生しません。

   設定したポインタはポインタ参照演算子 * または -> でアクセスできます。

   参照代入系演算子のコンパイル時チェック早見表(I/Fはインターフェイス)
演算子同じ型アップキャストダウンキャスト継承関係のないクラスクラス→I/FI/F→クラス異なるI/F
#=××××
#=DownCast×××
#=DynamicCast

   構文:
      左辺(Object) #=DownCast 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は左辺を返します。

●#=DynamicCast (参照代入、組み込み、結合←、二項)
   「左辺」のポインタに「右辺」を設定します。
   実行時に「右辺」のオブジェクトが「左辺」のサブタイプ型と同じ型でも、その派生クラスでもなく、
   サブタイプ型のインターフェイスをサポートしない場合例外が発生します。
   「左辺」の型は Pointer か ConstPointer か AnyClass でなければいけません。
   この演算子は「右辺」の参照にアクセスするわけではないので、「右辺」が NULL でも例外は発生しません。

   設定したポインタはポインタ参照演算子 * または -> でアクセスできます。

   参照代入系演算子のコンパイル時チェック早見表(I/Fはインターフェイス)
演算子同じ型アップキャストダウンキャスト継承関係のないクラスクラス→I/FI/F→クラス異なるI/F
#=××××
#=DownCast×××
#=DynamicCast

   構文:
      左辺(Object) #=DynamicCast 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は左辺を返します。

●== (等価、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator== を呼び出します。
   この演算子メソッドの戻り値型に制限はありませんが、通常は Bool を使用します。

   構文:
      左辺(Object) == 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator== の戻り値を返します。

●< (より小さい、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator< を呼び出します。
   この演算子メソッドの戻り値型に制限はありませんが、通常は Bool を使用します。

   構文:
      左辺(Object) < 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator< の戻り値を返します。

●> (より大きい、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator> を呼び出します。
   この演算子メソッドの戻り値型に制限はありませんが、通常は Bool を使用します。

   構文:
      左辺(Object) > 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator> の戻り値を返します。

●<= (以下、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator<= を呼び出します。
   この演算子メソッドの戻り値型に制限はありませんが、通常は Bool を使用します。

   構文:
      左辺(Object) <= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator<= の戻り値を返します。

●>= (以上、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator>= を呼び出します。
   この演算子メソッドの戻り値型に制限はありませんが、通常は Bool を使用します。

   構文:
      左辺(Object) >= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator>= の戻り値を返します。

●!= (以外、定義用、結合→、二項)
   「左辺」のオブジェクトを呼び出しのホストオブジェクト、「右辺」を引数として、
   「左辺」のオブジェクトの #operator!= を呼び出します。
   この演算子メソッドの戻り値型に制限はありませんが、通常は Bool を使用します。

   構文:
      左辺(Object) != 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator!= の戻り値を返します。

●#== (参照比較、組み込み、結合→、二項)
   「左辺」と「右辺」の参照が両方とも空参照か、同じオブジェクトと結び付けられている場合、真を返します。
   「左辺」と「右辺」の参照に結び付けられているオブジェクトが異なる場合、偽を返します。
   この演算子は参照にアクセスするわけではないので、 NULL を使用しても例外は発生しません。

   構文:
      左辺(Object) #== 右辺(Object)

   評価後の識別子タイプ: Flag
   評価結果はフラグレジスタで返します。

●#!= (参照比較、組み込み、結合→、二項)
   「左辺」と「右辺」の参照に結び付けられているオブジェクトが異なる場合、真を返します。
   「左辺」と「右辺」の参照が両方とも空参照か、同じオブジェクトと結び付けられている場合、偽を返します。
   この演算子は参照にアクセスするわけではないので、 NULL を使用しても例外は発生しません。

   構文:
      左辺(Object) #!= 右辺(Object)

   評価後の識別子タイプ: Flag
   評価結果はフラグレジスタで返します。

●^^ (論理XOR、組み込み、結合→、二項)
   「左辺」と「右辺」を真偽値評価し、その結果をXORした結果を返します。
   「左辺」または「右辺」がオブジェクトの場合、 INativeBool で真偽値化します。
   
   構文:
      左辺(FlagまたはObject) ^^ 右辺(FlagまたはObject)

   評価後の識別子タイプ: Flag
   評価結果は「左辺」と「右辺」を真偽値評価し、その結果をXORした結果をフラグレジスタで返します。

●enforce (強制適用、組み込み、結合→、単項)
   「右辺」の参照から読み取り専用属性を強制解除します。
   この演算子は分かりにくいバグの原因になる可能性があります。
   使用する前に本当に必要か十分検討してください。

   
   構文:
      enforce 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は「右辺」の参照から読み取り専用属性を削除したものを返します。

●&& (論理AND、組み込み、結合→、特殊)
   「左辺」を真偽値評価し、真であれば「右辺」を真偽値評価し、それも真であれば真を返します。
   どちらかが偽を返した場合、偽を返します。
   「左辺」が偽を返した場合、「右辺」は評価されません。(短絡評価)
   この動作のため、「左辺」と「右辺」はこの演算子で分割され、それぞれ独立した式として扱われます。
   後置インクリメント、後置デクリメント、一時オブジェクトの解放はこの演算子の処理中に解決されます。
   「左辺」または「右辺」がオブジェクトの場合、 INativeBool で真偽値化します。
   
   構文:
      左辺(FlagまたはObject) && 右辺(FlagまたはObject)

   例:各行の式は全て同一に解釈されます。
      1+2&&3+4&&5+6
      (1+2)&&(3+4&&5+6)
      (1+2)&&((3+4)&&(5+6))


   評価後の識別子タイプ: Flag
   評価結果は「左辺」と「右辺」を真偽値評価し、その結果をANDした結果をフラグレジスタで返します。

●|| (論理OR、組み込み、結合→、特殊)
   「左辺」を真偽値評価し、偽であれば「右辺」を真偽値評価し、それも偽であれば偽を返します。
   どちらかが真を返した場合、真を返します。
   「左辺」が真を返した場合、「右辺」は評価されません。(短絡評価)
   この動作のため、「左辺」と「右辺」はこの演算子で分割され、それぞれ独立した式として扱われます。
   後置インクリメント、後置デクリメント、一時オブジェクトの解放はこの演算子の処理中に解決されます。
   「左辺」または「右辺」がオブジェクトの場合、 INativeBool で真偽値化します。
   
   構文:
      左辺(FlagまたはObject) || 右辺(FlagまたはObject)

   例:各行の式は全て同一に解釈されます。
      1+2||3+4||5+6
      (1+2)||(3+4||5+6)
      (1+2)||((3+4)||(5+6))


   評価後の識別子タイプ: Flag
   評価結果は「左辺」と「右辺」を真偽値評価し、その結果をORした結果をフラグレジスタで返します。

●<<=>> (参照交換、組み込み、結合なし、特殊)
   「左辺」と「右辺」の参照に結び付けられているオブジェクトを交換し、
   オブジェクトのメモリ管理オブジェクトも交換します。
   「左辺」と「右辺」は名前解決系以外の演算子の結果は使用できません。
   この演算子を含む式は名前解決系とこの演算子だけで構成されなければいけません。
   
   この演算子は特殊な用途のために用意されています。
   不用意に使用するとメモリリークや例外の原因になる可能性があります。
   通常は使用を避けてください。
   
   構文:
      左辺(Object) <<=>> 右辺(Object)

   評価後の識別子タイプ: なし

●?: (条件、組み込み、結合なし、特殊)
   「左辺」を真偽値評価し、真であれば「中辺」、偽であれば「右辺」を評価して結果を返します。
   「左辺」がオブジェクトの場合、 INativeBool で真偽値化します。

   「中辺」の評価結果と「右辺」の評価結果の識別子タイプが異なる場合、
   「中辺」の評価結果の識別子タイプに「右辺」の評価結果を変換します。
   「中辺」と「右辺」の評価後の型が同じ場合、演算子の結果はその型になります。
   「中辺」と「右辺」の評価後の型が異なる場合、演算子の結果は AnyClass 型になります。

   「左辺」と「中辺」、「右辺」はこの演算子で分割され、それぞれ独立した式として扱われます。
   後置インクリメント、後置デクリメント、一時オブジェクトの解放はこの演算子の処理中に解決されます。
   
   構文:
      左辺(FlagまたはObject) ? 中辺(FlagまたはObject) : 右辺(FlagまたはObject)

   評価後の識別子タイプ: Flag または Object (中辺の識別子タイプと同じ)
   評価結果は左辺が真であれば中辺の評価結果、偽であれば右辺の評価結果を返します。

●?? (NULL条件、組み込み、結合なし、特殊)
   「左辺」の評価結果が空参照でなければそれを返し、空参照なら「右辺」を評価して返します。
   
   「左辺」の評価結果と「右辺」の評価結果の識別子タイプが異なる場合、
   「左辺」の評価結果の識別子タイプに「右辺」の評価結果を変換します。
   「左辺」と「右辺」の評価後の型が同じ場合、演算子の結果はその型になります。
   「左辺」と「右辺」の評価後の型が異なる場合、演算子の結果は AnyClass 型になります。

   「左辺」と「右辺」はこの演算子で分割され、それぞれ独立した式として扱われます。
   後置インクリメント、後置デクリメント、一時オブジェクトの解放はこの演算子の処理中に解決されます。
   
   構文:
      左辺(Object) ?? 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は左辺が空参照でなければそれを返し、空参照であれば右辺の評価結果を返します。

●??= (NULL条件代入、組み込み、結合なし、特殊)
   「左辺」の評価結果が空参照でなければ、「右辺」を評価して「左辺」に代入します。
   この代入は通常の代入演算子として扱われますが、
   「左辺」の評価結果が空参照であれば「右辺」は評価されません。
   
   「左辺」と「右辺」はこの演算子で分割され、それぞれ独立した式として扱われます。
   後置インクリメント、後置デクリメント、一時オブジェクトの解放はこの演算子の処理中に解決されます。
   
   構文:
      左辺(Object) ??= 右辺(Object)

   評価後の識別子タイプ: Object
   評価結果は #operator= の戻り値を返します。

[前へ] [目次へ] [次へ]

最終更新 2020/10/26