17
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

sue445Advent Calendar 2016

Day 5

Go!プリンセスプリキュアのGo言語実装「GoPrecure」

Posted at

5日目なのでGo!プリンセスプリキュアのGo言語実装についての紹介です。1

GoPrecureとは?

Go!プリンセスプリキュア 2 のGo言語実装です。

使い方

go getしてimport

go get github.com/sue445/goprecure
import github.com/sue445/goprecure

プリキュアのインスタンスを作成

// キュアフローラ
flora := goprecure.NewCureFlora()

// キュアマーメイド
mermaid := goprecure.NewCureMermaid()

// キュアトゥインクル
twinkle := goprecure.NewCureTwinkle()

// キュアスカーレット
scarlett := goprecure.NewCureScarlett()

Name で名前を取得

flora := goprecure.NewCureFlora()

flora.Name()
// 春野はるか

Transform で変身

flora.Name()
// 春野はるか

flora.Transform()

flora.Name()
// キュアフローラ

実際にはこんな感じ

flora_transform.gif

GoPrecureではフォームチェンジを忠実に再現

flora_exchange.gif


各プリキュアに対応するドレスアップキー

// キュアフローラ
g.DressupKeys = []DressupKey{Flora, Rose, Lily, Sakura, Royal}

// キュアマーメイド
g.DressupKeys = []DressupKey{Mermaid, Ice, Bobble, Sango, Royal}

// キュアトゥインクル
g.DressupKeys = []DressupKey{Twinkle, Luna, ShootingStar, Ginga, Royal}

// キュアスカーレット
g.DressupKeys = []DressupKey{Scarlett, Hanabi, Phoenix, Sun, Royal}

苦労したこと

  • GoPrecureに適したREPLがない
    • 4〜5種類くらい使って総合的に gore が一番よかったが、直前までの入力を全部実行しているので標準出力に出力するメソッドとの相性が悪い

gore1.png

gore2.png

  • Transform の後に Exchange すると Exchange の標準出力だけ出してほしいのに直前の Transform のも一緒に出るので邪魔
  • この資料の大元は1年前に作ったものですが、念のため最新版で試したところこの挙動は同じでした

rubicureとGoPrecureの設計思想の違い

rubicureの設計思想

  • Rubyの柔軟性を利用してメタプロを大活用
    • クラスにメソッドはほとんど定義せずに method_missing でymlに飛ばすとか
  • transform!(変身) や attack!(必殺技) など破壊的メソッドには ! をつけるRubyの慣習に則った
  • 基本的にプリキュア全員対応するため特定のシリーズに特化させない汎用的な設計
  • rubicureのおかげでRubyの勉強になった

GoPrecureの設計思想

  • 静的型付けを意識した設計
    • DresupKey という型を const で定義することにより Exchange に未知のドレスアップキーが引数がわたらないようにした(コンパイルエラーになる)
  • Go!プリンセスプリキュアだけに特化させることでドレスアップキーとモードチェンジを関連付けた実装が実現した
  • GoPrecureのおかげでgolangの勉強になった

まとめ

新しい言語を学ぶ時はプリキュアを実装するといいと思います。

  1. 余談ですが僕の名前もGoです

  2. http://www.asahi.co.jp/precure/princess/

17
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?