マトリックス スタイルとは、n 個の変数があり、それぞれにいくつかの入力があり、すべての可能な値を処理する必要があることを意味します。これの最も単純なケースは、複数のブール値であり、true/false のすべての組み合わせを処理する必要があります。これは、戻り値が特定のパターンに従っている場合は簡単ですが、それ以外の場合は非常に困難に思えます。
(「マトリックス スタイル」よりも適切な名前があれば、タイトルを更新できるようにコメントして教えてください。)
これを処理する醜い方法は、if else チェーンです。
IF self.A = 'N' THEN
IF self.B = 'N' THEN
...
ELSE
...
END IF;
ELSE
IF self.B = 'N' THEN
...
ELSE
...
END IF;
END IF;
特に変数が 4 つを超える場合は、この混乱を追跡してください。
これを行うためのもう少し読みやすい方法は、すべてのチェックを一緒に行うことです。
IF self.A = 'N' AND ... self.Y = 'N' AND self.Z = 'N' THEN
returnValue := 'Bob';
END IF;
If self.A = 'N' AND ... self.Y = 'N' AND self.Z = 'Y' THEN
returnValue := 'Birthday Party';
END IF;
...
If self.A = 'Y' AND ... self.Y = 'N' AND self.Z = 'N' THEN
returnValue := 'What did I ever do to deserve this?';
END IF;
...
If self.A = 'Y' AND ... self.Y = 'Y' AND self.Z = 'Y' THEN
returnValue := 'Thank God I am done!';
END IF;
一連の if/else の代わりに CASE ステートメントを実行すれば、これを少し改善できますが、それでも維持するのは非常に困難です。誤って N の代わりに Y を入力して、それを見つけに行かなければならないことを想像してみてください。新しい変数が追加されるたびにエラーの可能性が指数関数的に増加することを考慮すると (記述する必要があるコードの量が少なくとも 2 倍になるため)、このような大きなサイズの問題ではエラーが発生する可能性が高くなります。
エラーを減らすために、興味深いテキスト置換を行うことができる可能性があります。私は最近、5つの変数でこれを行いました。私は...
NNNNN
NNNNY
...
YYYYN
YYYYY
次に、メモ帳 ++ を使用して検索と置換を実行し、N または Y のタイプミスの可能性を減らしました。したがって、これを処理するためのより良い方法があるかどうか疑問に思っています (主に保守性の観点からですが、保守性を失うことなく効率を高めることも歓迎されます)。私は特に PL/SQL ソリューションを探していますが、PL/SQL に翻訳できる可能性があるため、他の言語でのソリューションも大歓迎です。
編集:誰かがこの問題を解決しようとしていて、私の現在のソリューションを使用したい場合は、ここで検索と置換を行います。
検索:([Y,N])
変数の数だけ繰り返されます。置換:\t\t\tWHEN self.valueName = '\1' THEN\r\n\t\t\t\treturnValue := ''
はself.valueName = '\1'
変数ごとに 1 回繰り返され、そのたびに \1 がインクリメントされます。また、\t の正しい数を設定して、どれだけインデントしても一致するようにする必要があります。これは、Notepad++、正規表現モードで機能します。