第67章 CSimple
CSimple 言語は コンパイルされた Simple 言語です。
67.1. CSimple と Simple の違い リンクのコピーリンクがクリップボードにコピーされました!
Simple 言語は、ランタイムが Camel 式または述語のセットに解析される動的式言語です。
csimple 言語は通常の Java ソースコードに解析され、他のすべてのソースコードとともにコンパイルされるか、camel-csimple-joor モジュールを介してブートストラップ中に 1 回コンパイルされます。
Simple 言語は通常、非常に軽量で高速ですが、OGNL パスを使用した動的メソッド呼び出しのユースケースによっては、Simple 言語はランタイムイントロスペクションを実行し、リフレクション呼び出しを行います。パフォーマンスのオーバーヘッドがあり、csimple が作成された理由の 1 つでした。
csimple 言語は型セーフで、OGNL パスを介したメソッド呼び出しでは、解析中にタイプを知っている必要があります。これは、スクリプトでクラス名を指定する必要がある csimple 言語式の意味で、これはランタイム時に単純なイントロスペクションを行います。
言い換えると、Simple 言語は duck の入力 (duck のように、クックなど)を使用し、csimple は Java タイプ(型安全なタイプ)を使用しています。タイプエラーがある場合、simple はこれを実行時に報告し、csimple では Java のコンパイルエラーが発生します。
67.1.1. 追加の CSimple 関数 リンクのコピーリンクがクリップボードにコピーされました!
csimple 言語には、コレクション、マップ、または配列タイプを使用する一般的なユースケースをサポートする追加の関数が含まれています。以下の関数 bodyAsIndex、headerAsIndex、および exchangePropertyAsIndex は、入力時にこれらのユースケースに使用されます。
| 機能 | タイプ | 説明 |
|---|---|---|
| bodyAsIndex (type,index) | タイプ |
既存の |
| mandatoryBodyAsIndex (type,index) | タイプ |
既存の |
| headerAsIndex (key,type,index) | タイプ |
既存の |
| mandatoryHeaderAsIndex (key,type,index) | タイプ |
既存の |
| exchangePropertyAsIndex (key,type,index) | タイプ |
既存の |
| mandatoryExchangePropertyAsIndex (key,type,index) | タイプ |
既存の |
たとえば、以下の簡単な式があるとします。
Hello $\{body[0].name}
Hello $\{body[0].name}
このスクリプトにはタイプ情報がありません。また、メッセージボディーをイントロスペクトし、これがベースである場合、最初の要素を検索し、リフレクションを使用して getName という名前のメソッドを呼び出すことで、実行時に Simple 言語が解決します。
Csimple (コンパイル)では、これを事前にコンパイルするため、エンドユーザーは bodyAsIndex 関数でタイプ情報を提供する必要があります。
Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}
Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}