SICP : Ex1.04 : Java
[id:lethevert:20051219:p1]
手続きを条件で切り替えるという問題
public class Main { public static void main(String[] args) { System.out.println(plus_abs(2,3)); System.out.println(plus_abs(2,-3)); } public static int plus_abs(int x, int y) { abstract class Oper { abstract int f(int x, int y); } Oper op = y > 0 ? new Oper() {int f(int x, int y) { return x+y;}} : new Oper() {int f(int x, int y) { return x-y;}} ; return op.f(x,y); } }
手続きの内容がシンプルだと、このように形式的な部分の記述が長くなってしまうのだけれど、手続きが複雑になれば、有用なテクニックになります。オブジェクト指向用語で、「多態性」とか「多相性」とかと呼ばれることが多いテクニックですね。