Ruby

Symbole

Symbole to bardzo ciekawa struktura Rubiego, która została zapożyczona bezpośrednio ze Smalltalka. Większość początkujących programistów nie rozumie ich idei i uważa je za formę "lekkich stringów". Mają one jednak dużo większą rolę niż ta wymieniona wcześniej.

String vs Symbol


Różnice między symbolem a stringiem początkowo nie są zbyt wyraźne jednak z czasem zaczyna się dostrzegać ich zalety. Podstawową różnicą między stringiem a symbolem jest ich lokalizacja w pamięci. Każdy symbol istnieje w pamięci tylko raz co zbliża je bardziej do liczb niż do ciągów znaków. Można to sprawdzić odpalając prosty kod:
"abba".object_id == "abba".object_id #=> false
:abba.object_id == :abba.object_id #=> true


Oprócz tego symbole są szeroko stosowane jako nazwy metod. Wywołanie metody na obiekcie w Rubym w rzeczywistości jest wysłaniem symbolu i argumentów do odbiorcy (to samo dotyczy operatorów). Wszystkie poniższe przykłady są równoważne:
1 + 2 #=> 3
1.+ 2 #=> 3
1.send(:+, 2) #=> 3