Sie können das kompakter machen, ja.
Zuerst gibt es neben #ifTrue:
auch #ifFalse:
und #ifTrue:ifFalse:
, die ungefähr die Wirkung von Wenn-nicht-dann und Wenn-dann-sonst haben.
Aber auch wir haben bereits eine logische UND-Bedingung, also warum nicht nutzen:
isEqual: givenRec
(self a = givenRec a and: [self b = givenRec b])
ifTrue: [^ true].
(self b = givenRec a and: [self a = givenRec b])
ifTrue: [^ true].
^false
Mit #ifTrue:ifFalse:
isEqual: givenRec
(self a = givenRec a and: [self b = givenRec b])
ifTrue: [^ true]
ifFalse: [^ (self b = givenRec a and: [self a = givenRec b])]
Auch können wir die Rückkehr um die ganze Aussage machen:
isEqual: givenRec
^(self a = givenRec a and: [self b = givenRec b])
ifTrue: [true]
ifFalse: [self b = givenRec a and: [self a = givenRec b]]
Aber ifTrue: [true]
ist ein bisschen redundant, lassen Sie unsverwenden
isEqual: givenRec
^(self a = givenRec a and: [self b = givenRec b]) or:
[self b = givenRec a and: [self a = givenRec b]]
Schön und süß, wir sehen auch die logische Struktur ziemlich leicht. (Beachten Sie, dass ich von den üblichen Formatierungsstilen abweiche, um auf die Ähnlichkeiten und Unterschiede in den beiden logischen Ausdrücken hinzuweisen).
Wir haben jetzt nur eine Rückkehr ^
, kein #ifTrue:…
Für die Instanzvariable Frage:
Wenn Sie einige Instanzvariablen in der Klasse definieren wie Sie haben, können Sie sie buchstäblich verwenden in
Object subclass: #Contoso
instanceVariableNames: 'things'
classVariableNames: ''
poolDictionaries: ''
category: 'Examples'
isThingPlusThreeSameAs: anObject
^thing + 3 = anObject
0123: Ihr Code auf sie zuzugreifen
Aber in der Regel ist es besser, über Getter zu Instanzvariablen beziehen und Setter, allgemein Accessoren genannt.Sie müssen sie manuell schreiben oder den Menüpunkt des Sekunden Kontextmenü ‚inst var Accessor erstellen‘ verwenden (über „mehr ...“) einer Klasse im Browser:

Diese wird Accessormethoden der
thing
^thing
Form erzeugen
thing: anObject
thing := anObject
und Sie können sie in othe verwenden r Methoden wie dies
isThingPlusThreeSameAs: anObject
^self thing + 3 = anObject
Dank, herausgegeben ich meine Frage - hat der Klassendefinition – Infested
eine andere Frage @Tobias - Wie kann ich zeichnen ein Rechteck auf dem Bildschirm angesichts seiner zwei Kantenlängen? – Infested
So sieht Ihre Klasse gut aus, es kommt jetzt wirklich auf den Code an, den Sie für den Vergleich hatten. ~~ Bitte machen Sie eine neue Frage für die Instanz Variable Frage ~~ BEARBEITEN Sie meine Antwort – Tobias