[squeak-dev] Object>>printOn: refined.
Tobias Pape
Das.Linux at gmx.de
Thu Jun 4 15:07:25 UTC 2020
> On 04.06.2020, at 16:11, David T. Lewis <lewis at mail.msen.com> wrote:
>
> I have added it to my image and I find it to be helpful. It gives a nice
> indication of object identity, and it does not get in the way of anything
> that I do.
I'm all in for having it in the inspector/explorer info, but not the default #printOn:
"an Object" dates back to the original st-80, iirc, lets retain it the way it is :)
-tobias
>
> Thanks,
> Dave
>
> On Thu, Jun 04, 2020 at 07:32:52AM +0200, Trygve Reenskaug wrote:
>> Quite.?? My small /printOn:/ goodie is designed to permeate the whole
>> image. It will not be part of a release image; people who like it add it
>> to their image; others don't have to see it.
>>
>> On 2020.06.03 21:56, Chris Muller wrote:
>>> Hi Marcel,
>>>
>>> It seems there are a couple??of different dimensions to consider.?? You
>>> +1'd the idea of sending #asOop from #printOn:.?? I'm definitely a -1
>>> on that, because it would force everywhere that doesn't want id to
>>> override printOn:, and they wouldn't even be able to call "super"!??
>>> And even if they DO want id printing, overriding #asOop means they're
>>> forced to??mix concatenation with streaming, which isn't a good idea.??
>>> To stay with streaming, you would at least want a,#printOopOn:, but
>>> that name is too domain-specific.?? (#asOop is already a common
>>> selector in persistence frameworks, I think).
>>>
>>> A generic, supplementary printing method that works on a Stream avoids
>>> those issues, and can be either a no-op in Object, OR,
>>> Object>>#printOn: could check if it #respondsTo: it, allowing the
>>> supplementary??method to be provided on Object by external frameworks
>>> without dirtying the Kernel package.
>>>
>>> Over the years, I've found having a separate, String-based "id"
>>> representation (that is not always it's oop / oid), and not any of its
>>> other attributes of its standard #printString, to be a useful
>>> extrusion of behavior for disparate domain hierarchies to inherit
>>> rather than each implement their own.
>>>
>>> Best,
>>> ?? Chris
>>>
>>>
>>>
>>>
>>> On Wed, Jun 3, 2020 at 3:24 AM Marcel Taeumel <marcel.taeumel at hpi.de
>>> <mailto:marcel.taeumel at hpi.de>> wrote:
>>>
>>> Hi Chris.
>>>
>>>> Seeing just their identifications removes a level of formality
>>> that seems to foster a better UI "connection" to the objects.
>>>
>>> Domain-specific objects can provide a good-enough identification
>>> in their #printOn: specialization. Maybe the class name is part of
>>> it. Maybe not. If you develop a database, for example, you surely
>>> have another notion of identity. Meaning, other than Object >>
>>> #identityhash or #oop. That other notion of (compact) identity
>>> should then be part of an object's print-string that is part of
>>> the database.
>>>
>>> Yet, nothing one can foresee, when thinking about Object >>
>>> #printOn:. There, you have only the meta-object protocol at hand:
>>> class name, identity hash, maybe ref counter? :-D Having a new
>>> subclass of Object, what should that #printOn: look like
>>> out-of-the-box? The class name is fine. So you can actually see
>>> that your new class' instances are populating the world. Next step
>>> should be to implement a custom #printOn: in that new class.
>>>
>>> Best,
>>> Marcel
>>>>
>>>> Am 03.06.2020 05:16:31 schrieb Chris Muller <asqueaker at gmail.com
>>>> <mailto:asqueaker at gmail.com>>:
>>>>
>>>> Hi Trygve,
>>>>
>>>> Of all the attributes that objects print, I find the "type"
>>>> (class) to be one of the least interesting.?? It's usually already
>>>> obvious in its contextual usage. Indeed, it is the "identity"
>>>> that I, too, am??interested in seeing printed.?? My solution since
>>>> 2006 has been an override of??#printOn: that adds a one-line
>>>> dispatch to #printIdentificationOn:.?? I then take care in my
>>>> #printIdentificationOn: implementations to keep the printing as
>>>> terse as it can be, and sans any line endings,??to serve this
>>>> seemingly recurring use-case I have of wanting a "short version"
>>>> of an object's string.?? For example,??when printing the elements
>>>> of a collection.?? Having entire domain hierarchies exclude the
>>>> type entirely from their printString's has been a fantastic
>>>> experience. Seeing just their identifications removes a level of
>>>> formality that seems to foster a better UI "connection" to the
>>>> objects.
>>>>
>>>> Regards,
>>>> ?? Chris
>>>>
>>>> On Tue, Jun 2, 2020 at 7:10 AM Trygve Reenskaug
>>>> <trygver at ifi.uio.no <mailto:trygver at ifi.uio.no>> wrote:
>>>>
>>>> I find it frustrating to open 3 inspectors on different
>>>> objects, all of them titled 'aString' (or whatever),
>>>> IMO, it is much better to open them on the 3 objects: [1234]
>>>> aString, [3456] a String, [4567 a String.
>>>> The numbers in square brackets stand for the objects /oop/,
>>>> actually its /identityHash/. They can be a 7-digit numbers;
>>>> much too long for my short-time memory to hold many of them.
>>>> I therefore truncate the number to 4 digits, accepting that I
>>>> may, in rare cases, get 2 objects with the same identifier.
>>>>
>>>> I'm running 'Squeak5.3'.
>>>>
>>>> *Object>>printOn: aStream*
>>>> ?????????????? "Append to the argument, aStream, a sequence of
>>>> characters that identifies the receiver."
>>>> ?????????????? " The previous version identified the class,
>>>> not
>>>> the instance "
>>>> ?????????????? " This new version identifies the instance with
>>>> its oop. "
>>>> ?????????????? " I arbitrarily truncate the oop to 4 digits to
>>>> simplify reading. "
>>>>
>>>> ?????????????? | title |
>>>> ?????????????? title := self class name.
>>>> ?????????????? aStream
>>>> ?????????????????????? nextPutAll: '[' , (self asOop
>>>> printString
>>>> truncateTo: 4) , ']' ;
>>>> ?????????????????????? nextPutAll: (title first isVowel
>>>> ifTrue: ['an
>>>> '] ifFalse: ['a ']);
>>>> ?????????????????????? nextPutAll: title
>>>>
>>>> Enjoy
>>>> --Trygve
>>>> --
>>>>
>>>> /The essence of object orientation is that objects
>>>> collaborateto achieve a goal. /
>>>> Trygve Reenskaug mailto: trygver at ifi.uio.no
>>>> <mailto:%20trygver at ifi.uio.no>
>>>> Morgedalsvn. 5A http://folk.uio.no/trygver/
>>>> N-0378 Oslo http://fullOO.info
>>>> Norway??????????????????????????????????????????Tel: (+47) 468 58
>>>> 625
>>>>
>>>>
>>>
>>
>> --
>>
>> /The essence of object orientation is that objects collaborateto achieve
>> a goal. /
>> Trygve Reenskaug mailto: trygver at ifi.uio.no <mailto:%20trygver at ifi.uio.no>
>> Morgedalsvn. 5A http://folk.uio.no/trygver/
>> N-0378 Oslo http://fullOO.info
>> Norway??????????????????????????????????????????Tel: (+47) 468 58 625
More information about the Squeak-dev
mailing list
|