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..
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
Ö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.
diet pills that work http://ephedraa.ep.funpic.de/diet-pills.html diet pills online fiorecet
fiorcet http://hydrocodoneyes.toplog.nl/ buy hydrocodone online symptoms of hydrocodone addiction http://www.pakstop.com/blog/?u=orderfioricet fiorecet
buy valium without prescription http://lowepriprop.actieforum.com/ buy propecia cheap soma
singulair price http://phenada.1sweethost.com/augmentin-online.html augmentin xr