JavaScriptでこのe4xの例を見てください。
var sales = <sales vendor="John">
<item type="peas" price="4" quantity="6"/>
<item type="carrot" price="3" quantity="10"/>
<item type="chips" price="5" quantity="3"/>
</sales>;
alert( sales.item.(@type == "carrot").@quantity );
alert( sales.@vendor );
for each( var price in sales..@price ) {
alert( price );
}
特に、次の行を見てください。
alert( sales.item.(@type == "carrot").@quantity );
通常の静的言語では、アイテムが実行時までsalesのプロパティであることがわからないため、sales.itemを記述できません。これはe4xに限定されません。SOAPクライアントまたは実行時までわからないその他の基になるタイプを作成するときに接続するときに、同様のスタイルでプログラムを作成できます。静的言語では、通常、非常に冗長な方法でスタブクラスまたはプログラムを生成するツールを実行する必要があります。次に、Webサービスで何かが変更された場合は、スタブを最初からやり直す必要があります。JavaDOMコードを見てください。
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Foo {
public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "root" );
Element author1 = root.addElement( "author" )
.addAttribute( "name", "James" )
.addAttribute( "location", "UK" )
.addText( "James Strachan" );
Element author2 = root.addElement( "author" )
.addAttribute( "name", "Bob" )
.addAttribute( "location", "US" )
.addText( "Bob McWhirter" );
return document;
}
}
動的コードよりも間違いなくはるかに冗長です。そしてもちろん、静的に型付けされていません。実行時まで、「作成者」のつづりを「autor」と間違えたことを確認する方法はありません。この冗長性はすべて、本質的に静的なスタイルで動的なものをキャプチャできるようにするために本質的に存在します。
これが動的言語の強みのひとつだと思います。