任意の条件式
switch 文は、ハードコーディングの典型のひとつ *1 ですが、今でも old-timer には根強い人気があるのも事実です。任意のオフジェクに対して、異なる処理を施す必要があるときには、
for e in Object(3), Object("ABC"), Object(good), Object(3.14), Object(Foo()): value = e.switch({ 3 : lambda e: e+4, # integer "ABC": lambda e: len(e), # string float: lambda e: e*2, # user-defined function Foo : lambda e: e.hello(), # built-in type good : lambda e: e(), # user-defined class }) print value
このコードの断片を実行すると、次のような出力が得られます。
7 3 happy 6.28 hello, world
これを Java 擬で表現すると、次のような感じなります。
switch (e) { case 3: // integer value = e+4; break; case "ABC": // string value = len(e); break; case good: // user-defined function value = good(); break; case fllat: // built-in type value = e*2; break; case Foo: // user-defined class value = e.hello(); break; } System.out.println(value);
switch 文の条件式には、任意の数だけでなく、文字列や関数に加えて、任意の型、クラスなどを指定(混在)できるようになってこそ、本格的な OOP の醍醐味を堪能できるようになるのですが、Java/C# の世界では遠い未来の夢物語になってしまいます。(x_x)ξ
《補足》Eiffel の switch に対する戦略も参考にしてください。