Czym się rĂłżni String od Symbolu?

Z pewnością wiele osĂłb zastanawia się czym się rĂłżni “orzech” od :orzech

API RailsĂłw w dużej mierze pozwala na przekazywanie parametrow do funkcji za pomocą stringĂłw i symboli np.

Article.find :first, :conditions=>"available=true"

W powyższym przeypadku przekazujemy 2 parametry: :first oraz :conditions

W większości przypadkĂłw można zamiast symbolu użyć stringa, jednak w jeśli nie potrzebujemy całej funkcjonalności klasy String to lepiej użyć symbolu.

Symbol raz zdefiniowany w ktĂłrymś miejscu w programie, będzie wykorzystany pĂłźniej w innym.
Operowanie symbolami jest szybsze i zużywa mniej pamięci.

Oto przykład


./script/console albu sesja Irb'a:

Wpisujemy:

"orzech".id

"orzech".id

:orzech.id

:orzech.id

Okazuje się że id obiektu, ktĂłry jest symbolem pozostaje takie samo (jest to jeden i ten sam obiekt), natomiast string to 2 rĂłżne obiekty.

Podsumowując, symbole są idealne jeśli, potrzebujemy “słownych wskaźnikĂłw” w kodzie. Oczywiście zawsze możemy zamienić stringa na symbol i vice versa jeśli mamy taką potrzebę :slight_smile:

“orzech”.to_sym

Dzięki za info
Przydało się

@hosiawak Ech co to za kodowanie? Bo chyba tylko nie u mnie się posypało?

Ja bym jeszcze dodał że symbole można traktować jak liczby o unikalnych identyfikatorach symbolicznych, z wynikającymi z tego korzyściami (szybsze przekazywanie i rozpoznawanie, gwarancja identyczności dwóch symboli o tej samej nazwie na poziomie referencji).

Oraz uczulił że symbole nie są zbierane przez śmieciarza, więc należy się dwa razy zastanowić przed symbolizacją stringów pochodzących z wejścia / otrzymanych od użytkownika.

BTW, Hosiawak cannot unicode :stuck_out_tongue:

Pewnie przy migracji (w 2005:) się posypało. Baza jest zapisana w tabelach latin1 jako latin2. Migrowanie tego do unikodu to jest prawdziwe FUN FUN FUN.

Najważniejsze, że po ponad 5 latach ktoś podziękował Hosiawakowi :D.

Pisałem tego posta na ZX-81, co się czepiasz :wink:

Ech, łezka się w oku kręci jak czytam o “słownych wskaźnikach w kodzie”, to były czasy “the chunky bacon” :wink:

Wyręczę Tomasha:

Ale nikt nie zwrócił uwagi że to spam ? :slight_smile: