XML をフィルター処理する古いコードを再検討していますが、これはメソッドのパラメーターに簡単に適用できます (私が使用している方法では、本質的にそうです)。これは、私がよく遭遇する問題であり、これを回避する良い方法がわかりません。
問題は、引数が 3 つあることです。それらはすべてオプションです。どれが存在するかを確認し、どれが存在するかに基づいてそれらの値をテストします(可能性に従ってソートされます):
var shiftDown : Boolean = false;
var controlDown : Boolean = false;
if ( "@shift" in x )
{
shiftDown = Global.stringToBoolean( x.@shift.toString() );
}
if ( "@control" in x )
{
controlDown = Global.stringToBoolean( x.@control.toString() );
}
if ( "@code" in x && "@shift" in x && "@control" in x )
{
if ( KeyManager.keyIsDown( KeyManager[ x.@code.toXMLString().toUpperCase() ] ) && ( KeyManager.shiftKey == shiftDown ) && ( KeyManager.controlKey == controlDown ) )
{
...
}
}
else if ( "@code" in x && "@shift" in x )
{
if ( KeyManager.keyIsDown( KeyManager[ x.@code.toXMLString().toUpperCase() ] ) && ( KeyManager.shiftKey == shiftDown ) )
{
...
}
}
else if ( "@code" in x && "@control" in x )
{
if ( KeyManager.keyIsDown( KeyManager[ x.@code.toXMLString().toUpperCase() ] ) && ( KeyManager.controlKey == controlDown ) )
{
...
}
}
else if ( "@code" in x )
{
if ( KeyManager.keyIsDown( KeyManager[ x.@code.toString().toUpperCase() ] ) )
{
...
}
}
else if ( "@shift" in x )
{
if ( KeyManager.shiftKey == shiftDown )
{
...
}
}
else if ( "@control" in x )
{
if ( KeyManager.controlKey == controlDown )
{
...
}
}
else if ("@control" in x ) && ( "@shift" in x ) )
{
if ( ( KeyManager.shiftKey == shiftDown ) && ( KeyManager.controlKey == controlDown ) )
{
...
}
}
現在の形で繰り返しを繰り返してこれを書くには、もっと短い方法が必要だと思います。誰かがこれを書くためのよりクリーンで効率的な方法を提案できますか?
ご意見ありがとうございます。
編集: if ステートメントの順序が間違っていました。それを変更しました。
これは一般化できます。わかりやすくするためにコードを含めています。一般的な質問がまだ不明確な場合は、次のような印象を受けます。
オプションの引数のみのすべての組み合わせをテストする最もクリーンで効率的な方法は何ですか?