Hi there, I have a question about lazy initialization accessor methods that always keep me thinking in terms of performance and style.
For years I did something like: MyClass>>#property property isNil ifTrue: [ self initializeProperty ]. "It could be ifNil: as well" ^property MyClass>>#initializeProperty "Returns the receiver, not the property." property := self foo collect: [:e | ... ]. But this made me think that maybe I'm performing extra operations, so I started doing something like: MyClass>>#property ^property ifNil: [ self initializeProperty ] MyClass>>#initializeProperty ^property := self foo collect: [:e | ... ] The initialize method is often created by an "Extract Method" refactoring I do in the accesor, where I do the initial implementation. The messages makes me think that the second implementation is "faster", but an initializationMethod returning the value instead of the receiver is a code smell to me. I early initialize everything I know will be be used right away, but for cases it doesn't make sense. What do you think/prefer? Why? Maybe we could use the reified variables (slots) to implement the lazy initialization themselves :) Best regards! Esteban A. Maringolo