uordek.esiyo.each
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.
[ruby]
module ObjectDiffModule
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.
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[/ruby]
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 :)
[ruby]class ObjectDiff
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[/ruby]
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;
[ruby]class SimpleClass
include ObjectDiffModule
attr_reader :myname, :address, :den1, :den2
attr_writer :myname, :address
def initialize()
@myname = “Tankut”
@address = “http://www.blogcu.com/uordek”
@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[/ruby]
Bu kodları denemek için ise;
[ruby]fSimple = SimpleClass.new()
sSimple = SimpleClass.new()
sSimple.myname = “Sykai”
sSimple.address = “http://www.blogcu.com/Sykai”
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[/ruby]
Kolay gelsin..
| Print article | This entry was posted by Tankut ŞENTÜRK on 21/11/2006 at 05:00, and is filed under Bilgisayar, Ruby (Ruby on Rails). Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
about 3 years ago
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
about 3 years ago
Ö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.
about 2 years ago
diet pills that work http://ephedraa.ep.funpic.de/diet-pills.html diet pills online fiorecet
about 2 years ago
fiorcet http://hydrocodoneyes.toplog.nl/ buy hydrocodone online symptoms of hydrocodone addiction http://www.pakstop.com/blog/?u=orderfioricet fiorecet
about 2 years ago
buy valium without prescription http://lowepriprop.actieforum.com/ buy propecia cheap soma
about 2 years ago
singulair price http://phenada.1sweethost.com/augmentin-online.html augmentin xr