去年発表したSmalltalkJengaが少しだけパワーアップしたので紹介したいと思います。
インストール
gistからSmalltalkJenga.st
とRSJengaLayout.st
をDLします。
Roassal3
を使っているのでそちらを事前にインストールします。
Metacello new
baseline: 'Roassal3';
repository: 'github://ObjectProfile/Roassal3/src';
load.
SmalltalkJenga.st
とRSJengaLayout.st
をFile inしてから
SmalltalkJenga playWithRoassal.
ブロックについて
ブロックの色はオレンジのものほどメソッド数が少なく、赤いものほどメソッド数が多いです。
またブロックの幅はサブクラスの数が少ないほどブロックが細く、サブクラスの数が多いほど太くなります。
赤い長いこのブロックがObject
クラスのブロックです(その下の赤い長いブロックはProtoObject
)。
遊び方
クリックすると、該当クラスとそのサブクラスたちが一斉に消えます。
クラスを消すと以下のような計算式に従ってスコアが計算され加算されていきます。
システムが止まらない間にどれだけスコアを稼げるか、というゲームです。
- (コード行数 * 1)
- (インスタンス変数の数 * 2)
- (インスタンスメソッドの数 * 3)
- (クラス変数の数 * 4)
- (クラスメソッドの数 * 6)
- (インスタンスとクラスの参照の数 * 10)
- (サブクラスのスコア)
クラス毎のスコア
いくつか試しに削除時のスコアを計算してみます。
あんまり影響が無さそうなClassVariableTest
クラスを消すとスコアは下記のようになります。
LOC : 35
Instance Variables : 0
Instance Methods : 6
Class Variables : 1
Class Methods : 0
Instance Refs : 0
Class Refs : 10
Subclasses : 0
deletion score : 157
続いてTrue
クラス。インスタンスの参照数がすごいです。
LOC : 62
Instance Variables : 0
Instance Methods : 13
Class Variables : 0
Class Methods : 1
Instance Refs : 24486
Class Refs : 12
Subclasses : 0
deletion score : 245077
Metacello
を削除すると……意外とスコアが低いです。Smalltalkシステム自体はMetacello
クラスが無くても動きに支障は無いのでこのくらいなのでしょう。
LOC : 206
Instance Variables : 2
Instance Methods : 62
Class Variables : 0
Class Methods : 6
Instance Refs : 0
Class Refs : 12
Subclasses : 0
deletion score : 552
そして最後にDuration
のスコア。スコア自体はそこまででも無かったのですが、クラスの参照が多いためかやたらと時間がかかりました。
Class Name :
LOC : 287
Instance Variables : 2
Instance Methods : 45
Class Variables : 0
Class Methods : 16
Instance Refs : 3495
Class Refs : 741
Subclasses : 0
deletion score : 42882
このスコア計算はすごく雑ですが、きちんと計算するようにすれば該当クラスのシステムにおける重要度が客観的に評価できる……かもしれません。
ESUG2019での発表
2019年8月下旬に開催されたESUG2019のShow us your projectにて飛び込みでLTをしてきました。
https://youtu.be/RNQKwcYb6Jc?t=2556
割と受けてました。
今後の展望
REST APIに対応させてネットワーク内の不特定多数と遊べるようにするのはどうか、というアイデアをいただいたので、頑張って実装していきたいと思います。
それから結局パッケージマネージャでインストールできるようになっていないので、方法を調べてGitHubにリポジトリを作ってそこからインストールできるようにもしていきたいなと思っています。
あとWodenを使って3Dのジェンガタワーを作るというのも面白そうなので、挑戦してみたいです。