LoginSignup
2
0

More than 3 years have passed since last update.

SmalltalkJenga v1.0.2

Last updated at Posted at 2019-12-23

去年発表したSmalltalkJengaが少しだけパワーアップしたので紹介したいと思います。

インストール

gistからSmalltalkJenga.stRSJengaLayout.stをDLします。

Roassal3を使っているのでそちらを事前にインストールします。

Metacello new
    baseline: 'Roassal3';
    repository: 'github://ObjectProfile/Roassal3/src';
    load.

SmalltalkJenga.stRSJengaLayout.stをFile inしてから

SmalltalkJenga playWithRoassal.

を実行すると、ジェンガタワーが現れます。
image.png

ブロックについて

ブロックの色はオレンジのものほどメソッド数が少なく、赤いものほどメソッド数が多いです。
またブロックの幅はサブクラスの数が少ないほどブロックが細く、サブクラスの数が多いほど太くなります。
赤い長いこのブロックがObjectクラスのブロックです(その下の赤い長いブロックはProtoObject)。
image.png

遊び方

クリックすると、該当クラスとそのサブクラスたちが一斉に消えます。
クラスを消すと以下のような計算式に従ってスコアが計算され加算されていきます。
システムが止まらない間にどれだけスコアを稼げるか、というゲームです。

  • (コード行数 * 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のジェンガタワーを作るというのも面白そうなので、挑戦してみたいです。

2
0
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
2
0