数年に一度作るかどうかという奇跡のまともアプリw「マイ○スィー○ーもどき」のメソッドあたりの平均ライン数を求めてみます。
Smalltalk は強力なリフレクションを備えるため、いとも簡単に求めることができます。
商用のメトリクスツールなんて要りません。
| aBlock | aBlock := [ :aClass | | lines methods | lines := aClass methodDict inject: 0 into: [ :result :each | result + (each value sourceCode substrings: { Character cr }) size]. methods := aClass methodDict size. Transcript show: aClass printString, ' : '. Transcript show: lines printString , ' total lines, '. Transcript show: methods printString, ' methods, '. Transcript show: (lines / methods) asFloat printString, ' lines/method.'; cr]. Transcript clear. (RPackageOrganizer default packageNamed: 'PBE-LightsOut') definedClasses do: [ :each | aBlock value: each ]
結果は面倒なのでトランスクリプトに吐きます(手抜き
コードにコメントは書かないので考慮しません!
空行も入れないので無視です!
カテゴリが LightsOut のままですが気にしない。面倒くさいのでリスペクトしたいので変更しませんw
コードはすべて Pharo のフォーマット機能で整形しています。
LOCellTest : 199 total lines, 31 methods, 6.419354838709677 lines/method. LOGame : 134 total lines, 24 methods, 5.583333333333333 lines/method. LOCell : 132 total lines, 36 methods, 3.6666666666666665 lines/method. LOGameTest : 244 total lines, 22 methods, 11.090909090909092 lines/method.
メソッドあたりのステップ数は 10 行にもなっていませんね。
テストコードの方がボリュームがありますね。普通こうなるのが傾向でしょう。
Smalltalk の場合、文の区切りはピリオドなので、改行で区切って意味あるのか!
というツッコミはごもっともです。ピリオド区切りで計測した場合、メソッドあたりのステップ数はもっと少なくなります。ヤバイです!
*1:'PBE-LightsOut' の部分を好きに変えれば、お好みのパッケージ配下にあるクラス群の計測ができるよ!