Yigit C. Bacakoglu Yazılım Mühendisi | Rubyist | Mekanist on Rails

  19/12/2013 at 20:09       by yigit     under ,

Merhaba arkadaşlar,

Bazı Rubyistler sembolün sırrını ve string & sembol ne zaman kullanılır tam bilemeyebilirler..

Bu yazımda Ruby'de Symbol ve String kullanımından bahsedeceğim.

Symbol Nedir?

Ruby'de Symbol olarak oluşturduğunuz şeyler aslında bir objedir ve bir idsi vardır ve değiştirelemez (immutable). Aşağıda ki örneklerin her biri birer semboldür.

:"name"
:name
"name".to_sym

Stringler, sembollerden farklı olarak değiştirilebilir (mutable) ve bu yüzden tanımlanan her string farklı object id'ye sahiptir ve her biri memoryde bir yer kaplar.

"selam".object_id #=> 70349310903600
"selam".object_id #=> 70349314874260
"selam".object_id #=> 70349314903300

#Semboller

:selam.object_id #=>  4146248
:selam.object_id #=> 4146248

Bu yüzden eğer aynı değeri bir çok yerde kullanacaksak sembol kullanılmalıdır. Örneğin elimizdeki kullanıcı setine rol atayacaksak:

user_a.role = :admin
user_b.role = :staff
user_c.role = :staff
user_d.role = :admin

Yukarıda ki kullanım string ile rol tanımlamaya göre daha performanslıdır. Ancak kontrolümüz dışında sembol kullanımı tehlikelidir. Çünkü stringler her işlem sonunda Garbage Collection (Çöp Toplayıcı) tarafından memoryden kaldırılırken semboller kaldırılmaz ve memory leake neden olabilir. Örn:

@users.each do |user|
hash[user.name.to_sym] = "deger"
end

Yukarida ki örnekte eğer 100 kullanıcı varsa çok etkilenmez, ama milyonlarca kullanıcı varsa? İşte o zaman kontrolsüz sembol oluşturmamızın sıkıntısını çekmeye başlarız.

Bu yüzden, tekrarlayan değerler için sembol kullanabiliriz ama dediğim gibi heryerde sembol kullanmak, işletim sistemimizin hafızasında kaçağa neden olabilir :)

Etiketler: ruby, ruby symbol, symbol string farkı, fark, ruby symbol ile string farkı nedir

Comment Ruby - Symbol vs String