2014-03-20 8:43 GMT+01:00 Pharo4Stef <pharo4Stef@free.fr>:Yes I would like to rename them to sharedVariable
On 20 Mar 2014, at 08:32, Yuriy Tymchuk <yuriy.tymchuk@me.com> wrote:
> Thank you all for your replies.
>
> I would say, that �Class Variable� name is a bit misleading, but now I know what is going on behind it. :)
It's exactly a shared variable, but that does not describe the scope.It's a shared variable accessible in all methods of a class, its metaclass and their subclasses...
>
> Cheers!
> Uko
>
> On 19 Mar 2014, at 23:53, Ben Coman <btc@openinworld.com> wrote:
>
>> Yuriy Tymchuk wrote:
>>> Can anybody tell me what is the difference between the class variable on the "instance side� definition and instance variable on the �class side� definition?
>>>
>>> Thanks in advance.
>>> Uko
>>>
>>>
>> instance-variable: A variable that holds the private state of an object. In Smalltalk these can only be accessed by instance-methods.
>>
>> class-variable: An attribute of a class that is shared by that class, its subclasses, and all instances of those classes. Can be accessed by both instance-methods and class-methods.
>>
>> class-instance-variable: An attribute of a class that is not shared outside that specific class. Only the definition is inherited by subclasses, not the value . Each subclass has its own private value. Accessible only by class-methods.
>>
>>
>> You will understand it best by experimenting. Here is one I made for myself...
>>
>> ivCounter - instance variable counter
>> CVCounter - class variable counter
>> CIVCounter - class instance variable counter
>>
>> "----------"
>> Object subclass: #TestCounter
>> instanceVariableNames: 'ivCounter iName'
>> classVariableNames: 'CVCounter'
>> poolDictionaries: ''
>> category: 'MyExamples'
>>
>> TestCounter class "accessed by clicking the <Class> button"
>> instanceVariableNames: 'CIVCounter'
>>
>> TestCounter subclass: #TestSubCounter
>> instanceVariableNames: ''
>> classVariableNames: ''
>> poolDictionaries: ''
>> category: 'MyExamples'
>> "----------"
>> TestCounter name: myInstanceName
>> iName := myInstanceName.
>> TestCounter >> next
>> ivCounter ifNil: [ ivCounter := 0 ].
>> CVCounter ifNil: [ CVCounter := 0 ].
>> ivCounter := ivCounter + 1.
>> CVCounter := CVCounter + 1.
>> TestCounter >> printOn: aStream
>> super printOn: aStream.
>> aStream nextPutAll: ' ['. aStream
>> print: iName.
>> aStream nextPutAll: '] ( '. aStream
>> nextPutAll: ' ivCounter=';
>> print: ivCounter.
>> aStream
>> nextPutAll: ', CIVCounter=n/a'.
>> aStream
>> nextPutAll: ', CVCounter=';
>> print: CVCounter.
>> aStream nextPutAll: ' )'. "----------" TestCounter class >> next2
>> CIVCounter ifNil: [ CIVCounter := 0 ].
>> CVCounter ifNil: [ CVCounter := 0 ].
>>
>> CIVCounter := CIVCounter + 1.
>> CVCounter := CVCounter + 1.
>> TestCounter class >> printOn: aStream
>> super printOn: aStream.
>> aStream nextPutAll: ' ( '. aStream
>> nextPutAll: 'ivCounter=n/a'.
>> aStream
>> nextPutAll: ', CIVCounter=';
>> print: CIVCounter.
>> aStream
>> nextPutAll: ', CVCounter=';
>> print: CVCounter.
>> aStream nextPutAll: ' )'. TestCounter class >> reset
>> CVCounter := nil.
>> CIVCounter := nil.
>>
>> "---------"
>> Then from Workspace evaluate these...
>>
>> tc1 := TestCounter new.
>> tc2 := TestCounter new.
>>
>> tsc1 := TestSubCounter new.
>> tsc2 := TestSubCounter new.
>>
>> TestCounter reset.
>> TestSubCounter reset.
>>
>> tc1 next. tc2 next.
>> tc1 next.
>> tc2 next.
>>
>> tsc1 next.
>> tsc2 next.
>> tsc1 next.
>> tsc2 next.
>>
>> TestCounter next2.
>> TestCounter next2.
>> TestCounter next2.
>>
>>
>> TestSubCounter next2.
>> TestSubCounter next2.
>> TestSubCounter next2.
>>
>> cheers -ben
>>
>>
>>
>>
>>
>
>