完全変態ageha

※この記事は、変態アドベントカレンダーの9日目です。http://atnd.org/events/22020
参加されている諸氏の記事に目を通してみると多くの記事で腑に落ちないものを感じた。その代表として、最初に書かれた裏紙氏の記事をとりあげ、その違和感を説明するところからはじめよう。
裏紙氏の記事には2つの役として警官とJKが登場する。なぜ警官でなければならないのか判然とはしないが、たとえば羽化の瞬間を目の当たりにしたいという警官がいてもそれ自体は不自然ではないのかもしれない。羽化しようとしている蛹をみつかけたら教えてほしいというのも分からないでもない。たしかに羽化の瞬間は奇跡的だしそうそう出会えるものではないとしても、それを人に頼むのはすこし行き過ぎな感じがする。なにかしらの拍子にふと見つけてしまうほうがふさわしいと思う。それにしても頼む相手がジャミロクワイのボーカルだという設定には、あまりにも唐突すぎて戸惑いを隠せない。
羽化の瞬間を捉えることを変態を逮捕するという言い回しで記述するという一点が裏紙氏の記事の賭け金である。この言い回しによって、変態があたかも「もの」のように存在するのような世界をつくりだすこと。変態が名詞だとはいえ、逮捕されるのはあくまで蛹であり蝶であるというのが当たり前の立場だとすれば、カテゴリーミステイクを犯して変態を逮捕するという言い回しにまで辿り着くためには周到な準備が必要であろう。変態を逮捕するという言い回しが受け入れられてこそ変態という「もの」の実在を主張する裏紙氏の試みは功を奏する。この逮捕ということばをつかうために登場人物に警官が含まれるのは安易だが仕方ないともいえるかもしれない。しかし警官といいJKといい、このように当然のように登場されても、少なくとも私は戸惑うばかりである。以降につづく諸氏の記事の多くがどうやら裏紙氏の世界設定を共有しているようもにみえるのが奇妙なのだが(追記参照)。
もちろん変態は魅力的だ。それにこだわる裏紙氏の心情もわからないではない。とくに蝶の羽化には言葉に奪われるだろう。変態 - Wikipediaを参照すれば、蝶のように蛹の段階を経る変態を完全変態とよぶらしい。そして完全変態の例としてagehaの写真を掲載している。完全なる変態としてのageha。この記事では、裏紙氏の記事のような迂回路をとおらず、このagehaを実現することにより変態を記述することを試みる。

卵が孵化して幼虫となり、蛹を経て成虫になる。外見がどう変態してもやはりで昆虫ある。そして昆虫は動き回り餌を見つけてはそれを口にするだろう。

public interface 蟲 {
    public abstract String 動();
    public abstract String 喰();
}

つづいて、それぞれの状態をつくる。

public classimplements 蟲 {
    @Override
    public String 動() {
        return "・";
    }

    @Override
    public String 喰() {
        return "・";
    }
}
public classimplements 蟲 {
    @Override
    public String 動() {
        return "蠢";
    }

    @Override
    public String 喰() {
        return "葉";
    }
}
public classimplements 蟲 {
    @Override
    public String 動() {
        return "・";
    }

    @Override
    public String 喰() {
        return "・";
    }
}
public classimplements 蟲 {
    @Override
    public String 動() {
        return "舞";
    }

    @Override
    public String 喰() {
        return "蜜";
    }
}

蝶はこの状態を順番に移り変わっていく。つまり、これが変態だ。裏紙氏の記事では肝心の変態が「変態出没」という出来事のなかに埋没してしまっている。むしろ変態そのものが出来事であるはずなのに。

public classimplements Runnable {
    private 蟲 態 = new 卵();
    
    @Override
    public void run(){
       変態();
    }
    
    public String 生(){
        return 態.動() + 態.喰();
    }

    private void 変態() {
        try {
            Thread.sleep(1000);
            態 = new 幼();
            Thread.sleep(4000);
            態 = new 蛹();
            Thread.sleep(1000);
            態 = new 成();
	    Thread.sleep(4000);
        } catch (InterruptedException e) {
	    System.out.print("幽");
        }
    }
}

完全変態ageha

public class 完全変態ageha {
    public static void main(String[] args) throws InterruptedException {
        蝶 ageha = new 蝶();
        Thread 命 = new Thread(ageha);
        命.start();
        while(命.isAlive()){
           System.out.print(ageha.生());
           Thread.sleep(20);
        }
    }
}

agehaの生が始まり、やがて終わる。10秒あまり。出力結果はあえて省略しよう。

$ ls
完全変態ageha.class  成.class  蝶.class  幼.class  卵.class  蛹.class  蟲.class
$
$ java 完全変態ageha
(略)

結論:stateパターンは状態をクラスとして存在させるものであり、これにより変態を記述できた。

追記:もちろん裏紙氏の記事が何らかの典拠を踏まえてのものだという可能性も否定できない。そうであれば、諸氏の記事の多くがこの世界設定を共有しているようことも理解できる。ご存知の方がおられたらご教示いただきたい。