参加せざるを得ない
Ppap.java
public class Ppap {
enum Word {
pen, pinapple, apple;
Word talk() {System.out.println("talk : " + this); return this;}
}
enum PpapState {
initial {PpapState transition(Word word) {return word == Word.pen ? p : initial;}},
p {PpapState transition(Word word) {return word == Word.pinapple ? pp : initial;}},
pp {PpapState transition(Word word) {return word == Word.apple ? ppa : initial;}},
ppa {PpapState transition(Word word) {return word == Word.pen ? ppap : initial;}},
ppap;
PpapState transition(Word next) {throw new InternalError();}
}
public static void main(String[] args) {
Random random = new Random();
for (PpapState state = PpapState.initial; state != PpapState.ppap; ) {
state = state.transition(Word.values()[random.nextInt(3)].talk());
}
System.out.println("finish : Pen Pinapple Apple Pen!");
}
}
心掛けたこと
- 状態遷移には、いかにも状態遷移を記述しているっぽいコードを使う
- 話す単語と状態は別の enum で(これはhmhmshさんの前記事のコメントでも指摘されていたけど)
- 一目でコードの挙動がわかるように書く