この項では、動的入力と静的入力の相違点について説明しているため、回復の場合のみ該当します。 動的入力と静的入力の違いを理解することは、変換スクリプト・エラーの処理方法と、Groovyがエラーを処理する方法との違いを理解するために重要です。 また、これは変換スクリプトで作成されたエラーの解釈にも役立ちます。
注意:
Big Data Discovery内のGroovy実装で静的な入力が強制されることを認識しておくことが重要です。 Groovy動的入力動作をオーバーライドする静的パーサーを使用する「変換」の例外処理の詳細は、「例外処理およびスクリプトのトラブルシューティング」を参照してください。動的入力と静的入力の違いは主に2つあり、変換スクリプトを記述する場合は注意が必要です。
最初に、動的に型指定された言語は実行時に型チェックを実行し、静的に型指定された言語はコンパイル時に型チェックを実行します。 つまり、動的に入力された言語(Groovyなど)で作成されたスクリプトには、スクリプトの正常な実行を妨げるエラーが含まれていても(存在する場合)、コンパイルできます。 静的に型指定された言語(Javaなど)で記述されたスクリプトにエラーがある場合は、エラーが修正されるまでコンパイルは失敗します。
// Java example int num; num = 5;
// Groovy example num = 5
どちらの例でも同じことが実行されます: num
という変数を作成し、それを5
という値に割り当てます。 これらの違いは、Javaの例の1行目にあります。int num;
は、num
データ型をint
として定義します。 Javaは静的に型指定されているため、値を割り当てる前に変数を宣言することを期待します。 Groovyは動的に入力され、変数のデータ型が値に基づいて決定されるため、この行は必要ありません。
// Groovy example number = 5 numbr = (number + 15) / 2 // note the typo
前述のコードでは、5
の値を使用して変数number
を作成し、その値を10
に変更します。そのためには、15
を追加して2
で除算します。 ただし、number
では、2行目の最初のスペルに誤りがあります。 Groovyでは変数を宣言する必要がないため、numbr
と呼ばれる新しい変数を作成し、それをnumber
が持つ値に割り当てます。 このコードでは正常にコンパイルされますが、その値が10
であると想定して、後からスクリプトでnumber
の処理を試行する際にエラーが発生することがあります。