Squeak Smalltalk のクラス階層の深さ
Smalltalk のクラス階層が深すぎる気がする
Twitter / 星一
というつぶやきを見かけたので、調べてみました。
| dict | dict := Dictionary new. SystemNavigation default allBehaviorsDo: [:class | class isMeta not ifTrue: [ (dict at: class allSuperclasses size ifAbsentPut: [OrderedCollection new]) add: class]]. World findATranscript: nil. dict inspect; keysAndValuesDo: [:key :val | Transcript cr; show: key; show: ' -> '; show: (String new: (val size // 5 max: 1) withAll: $|)]
出力はこちら。
0 -> |||| 1 -> | 2 -> ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 3 -> |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 4 -> ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 5 -> ||||||||||||||||||||||||||||||||||||||||||||||||||||| 6 -> ||||||||||||||||||||||||||||||||||||| 7 -> |||||||||||||| 8 -> ||||||||| 9 -> || 10 -> |
確かに全体的に深めで、7 - 8 レベルにも馴染みのクラスが見つかります。最大が 10 というのもまた深いですね^^;。
EToyMultiChatMorph allSuperclasses asArray reversed
=> {ProtoObject . Object . Morph . BorderedMorph . RectangleMorph . AlignmentMorph . AlignmentMorphBob1 . EToyCommunicatorMorph . EToyChatOrBadgeMorph . EToyChatMorph}
EToyProjectQueryMorph allSuperclasses asArray reversed
=> {ProtoObject . Object . Morph . BorderedMorph . RectangleMorph . AlignmentMorph . AlignmentMorphBob1 . EToyGenericDialogMorph . EToyProjectRenamerMorph . EToyProjectDetailsMorph}