<< 前 ホーム 次 >>

bakaid: 20061120

import java.awt.Point;
import java.util.HashMap;

public class jv {
    public static void main(String[] args) {
    Point p0 = new Point();
    Point p1 = new Point(1,1);
    HashMap<Point, Integer> points = new HashMap<Point, Integer>();
    points.put(p0, new Integer(0));
    points.put(p1, new Integer(1));
    System.out.println(points.get(p0));
    System.out.println(points.get(p1));
    p0.move(1,1);
    p1.move(2,2);
    System.out.println(points.get(p0));
    System.out.println(points.get(p1));
    }
}

$ javac jv.java && java -classpath . jv
0
1
null
null

なんちゅうーワナ。いや、だったら、x,yの値
変えられちゃまずいだろう。って、まぁ、しゃーないか。
利便性との兼ね合いか。

--

ああ、やっぱりオブジェクトの唯一性っていうのは
大事なんですよね。上のは、まぁ、話が違うんですけど。

でも、コピーがデフォルトなのか、それとも意図しないと
コピーが生まれないのかっていうのは、結構デカイ。

前にまつもとさんが『C++ではポインタ渡しがデフォ』
みたいなことを書かれてたと思ったんですけど。それには
唯一性の話も含まれてるんじゃないですかね。

--

だから、LL、たとえばRubyなんかの表記法は、心理的な
負担も減らしてると思うんですよね。配列なんかに
しても:

array = []

っていうほうが気軽に使おうと思うじゃないですか。
でも、C++だと生の配列のほうが手軽な表記法で、しかも
実際に軽いっていうのがわかっちゃってるもんだから、
なかなかvectorを使おうっていう気持ちにならないんじゃ
ないかって気がするんですよね。

こういうのが積もり積もって、LLの生産性が高いって
いわれるんじゃないかと思うわけです。もちろん、
絶対的にタイプ量が少ないっていうのもあるんですけど。

こういうのって、最適化の話でもあるんですよね。
プログラマっていうのは、ほんっとに貧乏性で、
なかなか富豪にはなれないんです。でも、Rubyみたいな
感じだと最適化へのプレッシャーが少なくって、だから
問題に集中できちゃう。

もちろん、これは、最適化の手段が少ないっていう
デメリットと裏表なんですけど。

--

4つの座標を『コ』の字の順に並べる。drawPolygonのためね。
これは富豪というより単にバカなだけなんですけど。
今見て笑っちゃいました (笑)。

まぁ、でも、最適化は頭のいい人がやってくれそうだから。
って思ってると、いつまでも残っちゃったりするんだよ
なあ (笑)。

import java.awt.Point;
import java.util.*;

class RectPointSorter {
    private static final Comparator<Point> CMP_TOP_LEFT =
        new Comparator<Point>() {
            public int compare(Point o1, Point o2) {
                if (o1.x + o1.y < o2.x + o2.y) return -1;
                if (o1.x + o1.y > o2.x + o2.y) return 1;
                return 0;
            }
        };

    private static final Comparator<Point> CMP_Y =
        new Comparator<Point>() {
            public int compare(Point o1, Point o2) {
                if (o1.y < o2.y) return -1;
                if (o1.y > o2.y) return 1;
                return 0;
            }
        };

    private static final Comparator<Point> CMP_X =
        new Comparator<Point>() {
            public int compare(Point o1, Point o2) {
                if (o1.x < o2.x) return -1;
                if (o1.x > o2.x) return 1;
                return 0;
            }
        };

    public static ArrayList<Point> sort(Point p1, Point p2, Point p3,
                                        Point p4) {
        ArrayList<Point> sorted = new ArrayList<Point>();
        sorted.add(p1);
        sorted.add(p2);
        sorted.add(p3);
        sorted.add(p4);
        Collections.sort(sorted, CMP_TOP_LEFT);
        Point tl = sorted.remove(0);
        Collections.sort(sorted, CMP_Y);
        Point tr = sorted.remove(0);
        Collections.sort(sorted, CMP_X);
        Point bl = sorted.remove(0);
        Point br = sorted.remove(0);
        sorted.add(tl);
        sorted.add(tr);
        sorted.add(br);
        sorted.add(bl);
        return sorted;
    }
}

本家Permlink

<< 前 ホーム 次 >>


Copyright © 1905 tko at jitu.org

バカが征く on Rails