Symbole

hauleth

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 a 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 jest przypisany do wartości long. 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

0 komentarzy