Bunu daha kompakt hale getirebilirsiniz, evet. İlk olarak, #ifTrue:
'un yanı sıra, #ifFalse:
ve #ifTrue:ifFalse:
'un yanı sıra, eğer değilse-sonra-sonra-ve-sonra-sonra-başka etkisi de vardır.
Ama aynı zamanda, zaten bir mantıksal AND koşulunu, böylece kullanmayın neden vardır:
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
Ayrıca #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])]
ile, bütün açıklamada etrafında dönüşünü yapabilirsiniz:
Ancak ifTrue: [true]
biraz artık,kullanalım
isEqual: givenRec
^(self a = givenRec a and: [self b = givenRec b]) or:
[self b = givenRec a and: [self a = givenRec b]]
Güzel ve tatlı, biz de oldukça kolay mantıksal yapısını görmek. (iki mantıksal ifadedeki benzerlikleri ve farklılıkları belirtmek için ortak biçimlendirme stillerinden ayrıldığımı unutmayın). Şimdi yalnızca bir tane geri ^
sahip
, örneğin değişken soru için hiçbir #ifTrue:…
: Eğer yaptığımız gibi sınıftaki bazı örnek değişkenleri tanımlarken
, içeri anlamıyla kullanabilirsiniz kodunuzu bunlara erişmek için:
Object subclass: #Contoso
instanceVariableNames: 'things'
classVariableNames: ''
poolDictionaries: ''
category: 'Examples'
isThingPlusThreeSameAs: anObject
^thing + 3 = anObject
Ama genellikle tutucuların yaygın erişimcileri denilen ve belirleyiciler yoluyla örnek değişkenleri başvurmak için daha iyidir.Sen tarayıcıda bir sınıfın (“... devamı” yoluyla) manuel olarak yazmak ya ikinci bağlam menüsünün 'inst var erişimci oluşturmak' menü öğesi kullanmak zorunda:
Bu forma
thing
^thing
thing: anObject
thing := anObject
ait bir erişim yöntemine üretecektir ve tasarımlarıyla bunları kullanabilir İkincisi çok iyi okumak değil çünkü bu
isThingPlusThreeSameAs: anObject
^self thing + 3 = anObject
sayesinde kullanışlı olduğu meta programlama vardır, ben sorumu düzenlenebilir - – Infested
başka bir soru @Tobias sınıf tanımını eklendi - i nasıl çizerim ekranda bir dikdörtgen iki kenarları uzunlukları verilen? – Infested
Yani sınıf iyi görünüyor, Şimdi gerçekten karşılaştırma için vardı koduna bağlıdır. ~~ Dikdörtgen çizerek için cevabım – Tobias