プログラマメモ2 - programmer no memo2

状態をあらわす 2008/04/10
2008/04/11

えーと、僕が状態、状態といっているのは、システムがその瞬間にある状態のことでして、えーと、そういうことです。
状態ってたとえば、その瞬間のメモリの《状態》、データベースにある全ての《状態》であったり、ユーザがある権限でログインして、何かしらの操作をするその瞬間であったりします。しつこく考えると、この瞬間と同じ《状態》は二度とないと思います。ですが、そんなこといってると、プログラムかけなくなってしまいそうです。

システムをこつこつ作っていく際に、相手にする《状態》は、もちろん再現可能な《状態》であります。あたりまえといえば、あたりまえですね。この《状態》を把握できてないと、突然のトラブルでロケットが空をとべなくなったり、バグだとさわがれたりします。へっぽこといわれたりもするでしょう。

この《状態》を正しく遷移させていくのが多分に、おおくのシステムの行っていることだと思います。

と、まえおきをしつつ、《状態》を表現してみます。


public class TestState {

public static void main(String[] args) {
String text = "日本語日本語";

Object[] s1 = { text, "a", "B", 11, new State(1, 2, 3) };
Object[] s2 = { new State(1, 3, 3), text, "a", "B", 11 };
Object[] s3 = { text, "a", "B", 11, };

State state = new State(s1);
State state2 = new State(s2);
State state3 = new State(s3);

System.out.println(state.hashCode());
System.out.println(state2.hashCode());
System.out.println(state3.hashCode());
System.out.println(state.equals(state2));

}

public static int state(Object... objects) {
int i = 0;
for (Object o : objects)
i += i ^ o.hashCode();

return i;
}


static class State {
final Object[] objects;
final int hashCode;
public State(Object... objects) {
this.objects = objects;
this.hashCode = TestState.state(objects);
}

public int state(){
return this.hashCode;
}

@Override
public int hashCode() {
return this.hashCode;
}

@Override
public boolean equals(Object obj) {

if (hashCode() == obj.hashCode()) {
return true;
}

return false;
}

}

}


それで、どういう目的かといいますと、複数のパラメーターで一個の状態を表現したいわけです。

State state = new State(new Object[]{ text, "a", "verified", 11, true, "COMPLETE"});


まあ、それだけなんですけどね。単純にデータをもってるだけじゃんっていわれそうですね。Orz...

追記:
だめだめ

: