少し前に、JavaScript コード生成フレームワークを実装していたときに、特定の C# 設計上の問題に対処する必要がありました。私が思いついた解決策の 1 つは、「using」キーワードをまったく異なる方法で使用することでした。私はそれを階層的なコード構造を構築するための構文シュガーとして使用しました (まあ、元はとにかく 1 つでした)。このようなもの:
CodeBuilder cb = new CodeBuilder();
using(cb.Function("foo"))
{
// Generate some function code
cb.Add(someStatement);
cb.Add(someOtherStatement);
using(cb.While(someCondition))
{
cb.Add(someLoopStatement);
// Generate some more code
}
}
Function および While メソッドが IDisposable オブジェクトを返すため、これは機能しています。これは、廃棄時にビルダーに現在のスコープを閉じるように指示します。このようなことは、ハードコーディングする必要があるツリーのような構造に役立ちます。
そのような「ハッキング」は正当化されると思いますか? たとえば、C++ では、テンプレートや演算子のオーバーロードなどの機能の多くが乱用されており、この動作は多くの人によって奨励されていると言えます (たとえば、boost を見てください)。一方で、現代の多くの言語は、そのような悪用を思いとどまらせ、より制限された特定の機能を提供していると言えます。
もちろん、私の例はやや難解ですが、現実的です。では、特定のハッキングと問題全体についてどう思いますか? 同様のジレンマに遭遇したことがありますか? 虐待はどこまで許せる?