vieweditattachhistoryswikistopchangessearchhelp

長いセレクタ

Squeak 3.2 時点でもっとも長いセレクタ(他言語風にいうところの関数名、メソッド名)は、

PluggableCollectionMorph >> #setModel:collectionOrSelector:okaySelector:cancelSelector:addSelector:deleteSelector:gotoSelector:menuSelector:changeSelector:valueMorphSelector:keyMorphSelector:objectToStringSelector:releaseSelector:balloonTextSelector:

の 221 文字!

セレクタがシンボルであること、セレクタ以上に長い通常使用のシンボルはなさげなことから、

(Symbol allInstances asSortedCollection: [ :a :b | a size > b size]) first

で簡単に探せる。ちなみにこれだけ長いセレクタを入力するのはさぞ辛かろう…と思ったら、setm と入力したあと、alt/cmd-q を2回タイプするだけで全文入力できた(笑)。だから長くてもいいってもんでもないが…(^_^;)。なお、次点、

(Symbol allInstances asSortedCollection: [ :a :b | a size > b size]) second

は、218 文字で同じく PluggableCollectionMorph の、

PluggableCollectionMorph >> #model:collectionOrSelector:okaySelector:cancelSelector:addSelector:deleteSelector:gotoSelector:menuSelector:changeSelector:valueMorphSelector:keyMorphSelector:objectToStringSelector:releaseSelector:balloonTextSelector:

こちらも model: とタイプした後、alt/cmd-q 2回で全文入力可能。もしや…と思って記述者を調べたが bob ではなかった(笑)。--sumim

ついでに、自作自演(違!)でない、つまり他のオーサーの書いたメソッドで使われている長いセレクタを持つメソッドということになると、ぐっと文字数は減って、

#start:stop:minorTick:minorTickLength:majorTick:majorTickLength:caption:tickPrintBlock:labelsAbove:captionAbove:

の 111 文字。以下、

#setDestForm:sourceForm:fillColor:combinationRule:destOrigin:sourceOrigin:extent:clipRect:
#destForm:sourceForm:halftoneForm:combinationRule:destOrigin:sourceOrigin:extent:clipRect:
#start:stop:minorTick:minorTickLength:majorTick:majorTickLength:caption:tickPrintBlock:
#destForm:sourceForm:fillColor:combinationRule:destOrigin:sourceOrigin:extent:clipRect:

と続きます。これらは、
| symbols compliedMethods authorsOf |
symbols _ Symbol allInstances asSortedCollection: [ :a :b | a size > b size].
symbols _ symbols copyFrom: 1 to: 50.
compliedMethods _ OrderedCollection new.
symbols do: [ :sym | 
   | methodRefs | 
   methodRefs _ Smalltalk allImplementorsOf: sym. 
   methodRefs notEmpty ifTrue: [
      methodRefs do: [ :mr | compliedMethods add: (mr actualClass >> mr methodSymbol)]]].
authorsOf _ [ :method |
   | stamp |
   stamp _ Utilities timeStampForMethod: method.
   stamp notEmpty ifTrue: [stamp substrings first] ifFalse: ['']].
((compliedMethods select: [ :cm |
   | senders |
   senders _ Smalltalk allCallsOn: cm selector.
   senders size > 1 and: [
      ((senders collect: [ :sn | authorsOf value: (sn actualClass >> sn methodSymbol) ]) 
         copyWithout: (authorsOf value: cm)) notEmpty]] thenCollect: [ :cm | cm selector ]) asSet asSortedCollection: [ :a :b | a size > b size]) inspect
といったスクリプトで調べることができます。ちょっとながったらしいですが(^_^;)。--sumim


最長のほうは両者とも、プラガブルな MVC に私が感じる悪印象をまさに具現化したようなセレクタですね(^_^;)。--sumim


このページを編集 (3091 bytes)


Congratulations! 以下の 2 ページから参照されています。

This page has been visited 4254 times.