Skip to content

Symbol

Symbol (sembol) Ruby’e ait özel bir nesnedir. Bir tür placeholder (yer tutucu) görevindedir. : işareti ile başlayan her şey semboldür.

Sembolün, değişkenden en önemli farkı tekil olmasıdır. Yani sembole atanan değişkenden hafızada 1 adet bulunur.

user = "vigo"
user.object_id # => 70122132113780

# şimdi başka değer atayalım
user = "bronx"
user.object_id # => 70122132113340
# object_id değişti!

Eğer Symbol kullansaydık:

user = :vigo
user.object_id # => 420488

user = :bronx
user.object_id # => 420648

user değişkeninin değeri Symbol cinsinden olduğu için, artık hafızada sabit bir yer ayrılmış oldu bu iş için. Değer değişse bile hafızadaki adreslendiği alan değişmemiş oluyor :)

String olarak atanmış değişkeni de Symbol’e çevirmek mümkün:

full_name = "Uğur"         # => "Uğur"
full_name.to_sym           # => :Uğur
full_name == :Uğur.id2name # => true
user_full_name = :Uğur     # => :Uğur
user_full_name.object_id   # => 420428

:is_user_admin.id2name     # => "is_user_admin"
:is_user_admin.to_s        # => "is_user_admin"

Symbol’ler, değişkenler gibi direkt atama yöntemiyle yani :a = 1 gibi bir şekilde çalışmazlar. Eğer bir String’den Symbol üretmek isterseniz to_sym methodunu kullanmanız gerekiyor.

Hafızayı idareli kullanmak, boşu boşuna değişken kirliği yaratmamak gibi konularda tercih edilir. Keza Hash’lerde de KEY ataması Symbol olarak yapılıyor bu tür hız / tasarruf işleri için.

{:user=>"vigo"}