[squeak-dev] The Trunk: Morphic-mt.1347.mcz

marcel.taeumel Marcel.Taeumel at hpi.de
Wed Jul 19 08:24:19 UTC 2017


Bert Freudenberg wrote
> How about using onDNU: instead of respondsTo:?
> 
>     windowColor := [each model windowColorToUse] onDNU: #windowColorToUse
>  do:
>         [UserInterfaceTheme current get: #uniformWindowColor for: Model].
> 
> I don't have a strong opinion, but it feels "cleaner".
> 
> - Bert -
> 
> On Tue, Jul 18, 2017 at 9:14 PM, Eliot Miranda <

> eliot.miranda@

> >
> wrote:
> 
>> nice!
>>
>> On Tue, Jul 18, 2017 at 1:12 AM, <

> commits at .squeak

> > wrote:
>>
>>> Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
>>> http://source.squeak.org/trunk/Morphic-mt.1347.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: Morphic-mt.1347
>>> Author: mt
>>> Time: 18 July 2017, 10:11:56.69381 am
>>> UUID: f95fc4b5-03e5-2f45-9a3f-087fb10cae98
>>> Ancestors: Morphic-eem.1346
>>>
>>> Regarding window colors and window listing, improve robustness for
>>> models
>>> that do not subclass Model and forget to provide #windowColorToUse.
>>>
>>> Note that we could have added that message to Object but I do prefer not
>>> to clutter the interface any further.
>>>
>>> =============== Diff against Morphic-eem.1346 ===============
>>>
>>> Item was changed:
>>>   ----- Method: TheWorldMainDockingBar>>listWindowsOn: (in category
>>> 'submenu - windows') -----
>>>   listWindowsOn: menu
>>>
>>>         | windows |
>>>         windows := self allVisibleWindows sorted: [:winA :winB |
>>>                 ((winA model isNil or: [winB model isNil]) or: [winA
>>> model name = winB model name])
>>>                         ifTrue: [winA label < winB label]
>>>                         ifFalse: [winA model name < winB model name]].
>>>         windows ifEmpty: [
>>>                 menu addItem: [ :item |
>>>                         item
>>>                                 contents: 'No Windows' translated;
>>>                                 isEnabled: false ] ].
>>>         windows do: [ :each |
>>> +               | windowColor |
>>> +               windowColor := (each model respondsTo:
>>> #windowColorToUse)
>>> +                       ifTrue: [each model windowColorToUse]
>>> +                       ifFalse: [UserInterfaceTheme current get:
>>> #uniformWindowColor for: Model].
>>>                 menu addItem: [ :item |
>>>                         item
>>>                                 contents: (self windowMenuItemLabelFor:
>>> each);
>>> +                               icon: (self colorIcon: windowColor);
>>> -                               icon: (each model ifNotNil: [self
>>> colorIcon: each model windowColorToUse]);
>>>                                 target: each;
>>>                                 selector: #comeToFront;
>>>                                 subMenuUpdater: self
>>>                                 selector: #windowMenuFor:on:
>>>                                 arguments: { each };
>>>                                 action: [ each beKeyWindow; expand ] ]
>>> ].
>>>         menu
>>>                 addLine;
>>>                 add: 'Close all windows' target: self selector:
>>> #closeAllWindowsUnsafe;
>>>                 addItem: [:item | item
>>>                         contents: 'Close all windows without changes';
>>>                         target: self;
>>>                         icon: MenuIcons smallBroomIcon;
>>>                         selector: #closeAllWindows];
>>>                 add: 'Close all windows but workspaces' target: self
>>> selector: #closeAllWindowsButWorkspaces.!
>>>
>>>
>>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>>
>>
>>
>>

Hi Bert,

I've never heard of this message before. :) This would be an option but it
impedes readability because of the DNU acronym, which could have been MNU
btw. ;)

I would rather call it #ifUnknown:do: or do something similar to
#perform:orSendTo:? Hmm... well, using/handling/expecting exceptions is
quite different from asking an object whether it responds to a message.
Basic object messaging and exception handling are two concepts on different
abstraction levels. At least for me. Then, the DNU exception is generic and
not domain-specific. I would prefer to use exception handling with
domain-specific exceptions in such specific (i.e. windows, colors, etc.)
code.

TL;DR: I prefer this respondsTo-check-pattern over the DNU-handler-pattern
because of code readability.

Best,
Marcel



--
View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1347-mcz-tp4955500p4955830.html
Sent from the Squeak - Dev mailing list archive at Nabble.com.


More information about the Squeak-dev mailing list