ifFalse: [ second ]. |
ifFalse: [ second ] |
==Kontrollstrukturen= Eine weitere erwähnenswerte Besonderheit ist die Abwesenheit von in die Sprache eingebauten Kontrollstrukturen. Kontrollstrukturen werden über DynamicClosures realisiert. Diese heißen in Smalltalk Blöcke und werden mit eckigen Klammern erzeugt. Kontrollstrukturen sind als Methoden von Boolean oder BlockClosure implementiert und es lassen sich beliebige Konstrukte nachrüsten. Die Implementation von whileTrue: bei BlockClosure könnte z. B. so aussehen: whileTrue: aBlock Werte aBlock solange aus, wie mein Wert wahr ergibt. [[Code] ^self value ifTrue: [ aBlock value [ self value ] whileTrue: [ aBlock value ]] ] Wer das begriffen hat, wird keine Probleme haben, die Methoden Boolean>>ifTrue:ifFalse oder Collection>>do: zu implementieren. Die mitgelieferte Klassenbibliothek hält eine Reihe von in dieser Form implementierten Kontrollstrukturen bereit. Diese werden i. A. durch die VirtuelleMaschine optimiert behandelt und sind daher Eigenkreationen vorzuziehen. ==Kapselung= Alle Instanzvariablen sind protected. Es ist durchaus üblich, trotzdem Zugriffsmethoden bereitzustellen, diese aber in ein Protokoll private zu verschieben. Das ist letztenendes eine Frage der persönlichen Vorlieben. Will man eine Methode als private kennzeichnen, so ist man generell auf solche Konventionen angewiesen. Die SpracheSmalltalk kennt keine privaten Methoden. |
Klassenbeschreibung | ![]() |
![]() |
|
class methods | ![]() |
instance creation | ![]() |
new
![]() |
|
instance methods | ![]() |
instance initialization | ![]() |
initialize
![]() |
|
random number generation | ![]() |
next moves to the next element of the pseudo random sequence
![]() |
|
inquiry | ![]() |
lastGaussian returns a pseudo random deviate from the gaussian distribution
![]() |
|
private | ![]() |
randuniv returns a random deviate from a uniform distribution on the unit interval
![]() |
|
randpoint from a uniform distribution on the area of the unit circle
![]() |
|
generate two pseudo random deviates from a gaussian distribution
![]() |
|
Bemerkungen | ![]() |
Teile der Smalltalk Syntax, etwa die Klassendefinition, werden bei Smalltalk in eine dafür vorgesehene Text-Schablone innerhalb eines Code-Browsers eingegeben. Für den fertigen Code gibt es verschiedene Ablagemöglichkeiten und Formate.
Eine Implementation in SpracheSmalltalk ist deshalb nicht ohne weiteres in die Form eines Textes zu bringen. fett sind die Nachrichten angegeben, die zum Protokoll von Randbox gehören. kursiv sind die Protokollbeschreibungen der einzelnen Nachrichten aufgeführt. Die Informationen über die Klasse selbst stehen oben in tabellarischer Form. Die Kategorien des Protokolls von Randbox sind als Gliederung dieses Quelltextes angegeben.
Wenn es der verwendete Zeichensatz hergeben würde, wäre der :=-Operator ein Pfeil nach links und der ^-Operator ein Pfeil nach oben.
Die Lesart bei Smalltalk ist satzähnlich, wobei die Objekte die Subjekt sind und die Methoden die Prädikate. Ergebnis jeder Kombination aus Objekt und Methode ist wieder ein Objekt. Methoden ohne expliziten Rückgabewert liefern self (das Objekt, an das die Methode geschickt wurde). Bei Methoden mit Parametern muss man den "Satz" klammern, um sein Ergebnisobjekt weiterverwenden zu können. Da es keinen Operatorvorrang a la Punkt- vor Strichrechnung gibt, muss diese Klammerung in Rechnungen meist explizit erfolgen.