Nesneler ayni mi ? (Ruby)
Belki daha sonra diğer dillerde de yapmaya çalışırım ama şimdilik sadece Ruby'de... Eğer sizlerden istek gelirse diğer dillerde de yazabilirim... Elbette eksikleri olabilir, yorumlarınız ile katkıda bulunursanız çok sevinirim.. :)Aslında yazıyı bitirdikten sonra kontrol ederken, bu yazının Ruby'nin çok güzel bir özelliği olan "Module Mixin" yeteneği için de çok iyi bir yazı olduğunu fark ettim.. umarım bu açıdan da sizlere faydalı olur.
öncelikle module mixin ile birçok yerde kullanmak üzere "ObjectDiffModule" adında bir modül içerisinde tüm kodlarımızı yazalım.. :) belki daha sonra bu modulü diğer sınıflar içerisinde kullanırız.
attr_reader :objectDiffArray
# Standart hata cümlesi oluşturuluyor.
OBJECTDIFF_ERRORSTR = "Objects are not have same class type."
def isPropertiesEqual(firstObject, secondObject)
# Yeni işlem için objectDiffArray bilgisi temizleniyor...
@objectDiffArray = Array.new()
# Her iki nesnenin property'leri alınıyor. Varsa @objectDiffArray değerleri temizleniyor.<br />
firstVarList = firstObject.instance_variables
firstVarList.delete("@objectDiffArray")
secondVarList = secondObject.instance_variables
secondVarList.delete("@objectDiffArray")
# Performans amacı ile property dizilerinin eşit olup olması el ile kontrol ediliyor.
raise RuntimeError, OBJECTDIFF_ERRORSTR if firstVarList.size != secondVarList.size
firstVarList.size.times {
variable = firstVarList.pop
raise RuntimeError, OBJECTDIFF_ERRORSTR if variable != secondVarList.pop
firstValue = firstObject.instance_eval(variable)
secondValue = secondObject.instance_eval(variable)
@objectDiffArray.push( [variable, firstValue, secondValue] ) if firstValue != secondValue
}
return @objectDiffArray
end
def ===(secondObject)
return true if self == secondObject
isPropertiesEqual(self, secondObject).empty?
end
end
Daha sonra bu modülü kullanacak olan static bir sınıf yapmalıyız ki, modulü kullanmayan nesneleri birbirleri ile karşılaştırabilelim :)
include ObjectDiffModule
@@objectDiff = nil
private_class_method :new
def initialize() end
def ObjectDiff.isEqual(firstObject, secondObject)
return true if firstObject == secondObject
@@objectDiff = new unless @@objectDiff
@@objectDiff.isPropertiesEqual(firstObject, secondObject).empty?
end
def ObjectDiff.objectDiffArray
@@objectDiff.objectDiffArray if @@objectDiff
end
end
Bu yazdığımız modülü kendi sınıflarımız içerisinde de kullanabiliriz böylece yeni oluşturduğumuz sınıflar ObjectDiff özelliklerini desteklerler :)
Örnek vermek gerekir ise;
include ObjectDiffModule
attr_reader :myname, :address, :den1, :den2
attr_writer :myname, :address
def initialize()
@myname = "Tankut"
@address = "<a href="http://www.blogcu.com/uordek">http://www.blogcu.com/uordek</a>"
@den1 = "aaaa"
@den2 = "bbbb"
@den3 = "aaaa"
end
public
def publicDene1() end
def publicDene2() end
def to_s()
super.to_s
end
private
def privateDene1() end
def privateDene2() end
def privateDene3() end
end
Bu kodları denemek için ise;
sSimple = SimpleClass.new()
sSimple.myname = "Sykai"
sSimple.address = "<a href="http://www.blogcu.com/Sykai">http://www.blogcu.com/Sykai</a>"
begin
p fSimple === sSimple
p fSimple.objectDiffArray
p sSimple === fSimple
p sSimple.objectDiffArray
p ObjectDiff.isEqual(fSimple, sSimple)
p ObjectDiff.objectDiffArray
rescue RuntimeError => err
p "Bunlar farklı... " + err
end
Kolay gelsin..

23.02.2007-15:11'de dedi şöyle dedi;
merhaba sayfanızı inceledim tebrikler çok faydalı bilgiler var
üniversite öğrencisiyim ve bitirme projemi ruby ile ilgili aldım konumun amacı da ;
sistemi kullanacak olan kişi veya kişilere anket oluşturmalarına olanak tanımak.kullanıcı sisteme “ben 30 sorulu bir anket” istiyorum diyecek.ve daha sonra her sorunun türünü (multiple, açık uçlu, true false, vs.) belirtecek, soru ve eğer varsa cevaplarını girecek.daha sonra bu anket veri tabanında saklanacak.ayrıca veritabanında başka bir tablo da sırf bu anketin cevaplarını barındıracak (anketi dolduranların gireceği).ve bu anket ayrıca sistemi kullanan kişi istediğinde belli bir adreste otomatik olarak devreye girecek.ve kullanıcı istediğinde de görüntülenmekten kalkacak.
veri tabanına hakimim sql biliyorum.ruby ise bilmiyorum kendim öğreneceğim.takıldığım yerlerde bana yardımcı olur musunuz.ruby öğrenmeyi çok istiyorum
kolay gelsin iyi çalışmalar
25.02.2007-21:33'de dedi şöyle dedi;
Öncelikle kolay gelsin :)
Cevap verebildiğim kadarı ile sorularını cevaplamaktan mutluluk duyarım.
Mezun olduktan sonra oluşturacağın iş yaşantısında da kullanabileceğin güncel ve güzel bir ödev.
Ruby on Rails’in de sana çok yardımcı olacaktır.
13.01.2008-16:21'de dedi şöyle dedi;
diet pills that work http://ephedraa.ep.funpic.de/diet-pills.html diet pills online fiorecet
26.01.2008-16:22'de dedi şöyle dedi;
fiorcet http://hydrocodoneyes.toplog.nl/ buy hydrocodone online symptoms of hydrocodone addiction http://www.pakstop.com/blog/?u=orderfioricet fiorecet
26.01.2008-22:06'de dedi şöyle dedi;
buy valium without prescription http://lowepriprop.actieforum.com/ buy propecia cheap soma
29.01.2008-19:19'de dedi şöyle dedi;
singulair price http://phenada.1sweethost.com/augmentin-online.html augmentin xr