夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

駄目ネタで試すScala-Actor-〜魔法少女まどか☆マギカ編〜

これで足場は揃ったので、今回からはscalaの要素等を色々試していこうと思います。

で、今回はActorです。
使ったコードは下記の通り。ネタはお察しください(笑
ネタの関係上、Actorに渡すクラス群の名称は全てラテン語になってます。

■Homo.scala

package jp.gr.kmtn.scalatutorial.incubator

/**
 * 「人間」クラス
 *
 * @author Fukushi-
 */
abstract class Homo(name: String) {

  /**
   * 名前を文字列型で返す抽象メソッド
   */
  def getName(): String
}


■Puella.scala

package jp.gr.kmtn.scalatutorial.incubator

/**
 * 「少女」クラス
 *
 * @author Fukushi-
 */
class Puella(name: String) extends Homo(name) {

  /**
   * 初期化時の名前を取得し、返す。
   */
  def getName(): String = { this.name; }
}


■PuellaMagi.scala

package jp.gr.kmtn.scalatutorial.incubator

/**
 * 「魔法少女」クラス
 * 動作は「少女」クラスに準ずる
 *
 * @author Fukushi-
 */
class PuellaMagi(name: String) extends Puella(name) {
}


■Puer.scala

package jp.gr.kmtn.scalatutorial.incubator

/**
 * 「少年」クラス
 *
 * @author Fukushi-
 */
class Puer(name: String) extends Homo(name) {

  /**
   * 初期化時の名前を取得し、返す。
   */
  def getName(): String = { this.name; }
}


■Incubator.scala

package jp.gr.kmtn.scalatutorial.incubator
import scala.actors.Actor

/**
 * Actor確認用クラス。キュゥべぇ。
 *
 * @author Fukushi-
 */
object Incubator extends Actor {

  /**
   * メッセージ待ち受けメソッド
   */
  def act() {
    loop {
      receive {
        case puellaMagi: PuellaMagi =>
          Console.println(puellaMagi.getName() + "、やがて「魔女」になる君たちのことは「魔法少女」と呼ぼう。");
        case puella: Puella =>
          Console.println(puella.getName() + "、僕と契約して魔法少女になってよ。");
        case homo: Homo =>
          Console.println(homo.getName() + "、残念ながら君には用は無いなぁ。");
        case "exit" =>
          Console.println("それじゃあね。"); exit;
          exit;
        case any: Any =>
          Console.println("訳が分からないよ。");
      }
    }
  }
}


上記がパーツで、実際に実行するプログラムエントリポイントは下記の通り。
■IncubatorMain.scala

package jp.gr.kmtn.scalatutorial.incubator

/**
 * Actor確認用Mainクラス
 *
 * @author Fukushi-
 */
object IncubatorMain {

  /**
   * Actor確認用プログラムエントリポイント
   */
  def main(args: Array[String]): Unit = {
   
    // Actor起動
    Incubator.start();
   
    Incubator ! new Puella("鹿目 まどか")
   
    Incubator ! new PuellaMagi("美樹 さやか")
   
    Incubator ! new Puer("上条 恭介")
   
    Incubator ! "UnKnown"
   
    Incubator ! "exit"
  }

}


実行すると、下記の結果となります。

鹿目 まどか、僕と契約して魔法少女になってよ。
美樹 さやか、やがて「魔女」になる君たちのことは「魔法少女」と呼ぼう。
上条 恭介、残念ながら君には用は無いなぁ。
訳が分からないよ。
それじゃあね。


とりあえず、解説は次投稿で。

]]>