if you are using the null object pattern then you should not write those checks (ifNil:ifNotNil:, isNil, isNotNil). you should send the message to an instance of the null object and that object should decide what to do. just an opinion.��


On Tue, Mar 15, 2022 at 3:16 PM <sean@clipperadams.com> wrote:

I had some chaining that was getting too complex due to many nil checks, so I started to refactor using a Null Object.

However, I���m struggling a bit with the refactor due to inlining. Since #ifNil: variants might be inlined, it seems that something like:

anObject with a long chain of messages ifNotNil: [ :result | ��������� ]

must be changed into something like:

anObject with a long chain of messages isNil ifFalse: [ anObject with a long chain of messages ��������� ].

Obviously, I can use a temp to have:

result := anObject with a long chain of messages.

result isNil ifFalse: [ result ��������� ].

But both seem ugly and make me question using this pattern.

  1. What am I missing?

  2. After 40+ years of Moore���s Law, can we turn off these inlines by default?



--
Bernardo E.C.

Sent from a cheap desktop computer in South America.