任意の条件式

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 に対する戦略も参考にしてください。

*1:Smalltalk: a la carte(23)ifと別れる50の方法《7》switchは百害あって一理なし, 1988.

《こちらに移動中です》
Python.use(better, for=C#) 記事一覧
ifと別れる50の方法
《6》switchは百害あって一理なし

《著》後藤いるか・森こねこ《監修》小泉ひよ子とタマゴ倶楽部
第0版♪1988/03/30 ● 第1版♪2000/05/23 ● 更新♪2008/11/22