Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
complexvalues [2019/01/04 16:38] christian [Using Values] |
complexvalues [2019/01/04 16:55] christian [Anatomy of a Value] |
||
---|---|---|---|
Line 80: | Line 80: | ||
The variables are set all at once by an initalizing method which has all initial values as parameters. | The variables are set all at once by an initalizing method which has all initial values as parameters. | ||
The object becomes immutable after initialization and all instance variables are effectively constants. | The object becomes immutable after initialization and all instance variables are effectively constants. | ||
+ | |||
+ | The parameter names are the concatenated name and its class. This prevents name clashes, is systematic and still readable. | ||
<code smalltalk> | <code smalltalk> | ||
- | Person>> | + | Person>> |
- | name := aString. | + | name := nameString. |
- | sex := aSymbol. | + | sex := sexSymbol. |
- | birthday := aDate. | + | birthday := birthdayDate. |
self beImmutable | self beImmutable | ||
</ | </ | ||
Line 92: | Line 94: | ||
<code smalltalk> | <code smalltalk> | ||
- | Person class>> | + | Person class>> |
| inst | | | inst | | ||
inst := self new. | inst := self new. | ||
- | inst initializeName: | + | inst initializeName: |
^inst | ^inst | ||
</ | </ | ||
Line 115: | Line 117: | ||
< | < | ||
< | < | ||
- | < | + | < |
</ | </ | ||
=== Defaults === | === Defaults === | ||
- | The simple values above are not very interesting. But when you define defaults for some of the variables, Values become more useful | + | The simple values above are not very interesting. But when you define defaults for some of the variables, Values become more useful. Lets add a nickname to the specification: |
+ | |||
+ | <code smalltalk> | ||
+ | Person class>> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | After generating code with: | ||
+ | <code smalltalk> | ||
+ | our example responds to #nickname : | ||
+ | |||
+ | <code smalltalk> | ||
+ | Person example nickname | ||
+ | </ | ||
+ | |||
+ | and there is a new constructor available: | ||
+ | <code smalltalk> | ||
+ | Person class>> | ||
+ | </ | ||
+ | |||
+ | Now you can specify a nickname: | ||
+ | <code smalltalk> | ||
+ | Person name: ' | ||
+ | </ | ||
+ | |||
+ | If you use the same parameter as the default, it is ignored | ||
+ | <code smalltalk> | ||
+ | Person name: ' | ||
+ | </ | ||
+ | because it is equal to | ||
+ | <code smalltalk> | ||
+ | Person name: ' | ||
+ | </ | ||
==== Get it ==== | ==== Get it ==== |