Kilka tygodni temu opublikowałem 5 tipsów w Elixir. Dziś kolejne ciekawe rzeczy które znalazłem a z których zacząłem korzystać częściej ostatnio.
1 Tworzenie pid ręcznie
Podczas zabawy z nodami, jak i z GenServer
czasami gubiłem zmienną pid
albo nie przypisałem jej gdzieś i mi przepadła. W treści miałem informację, że taki pid
jest ale nie potrafiłem go wykorzystać. pid
w elixir ma postać: #PID<0.85.0>
. Takiego stringu nigdzie nie wykorzystamy. Jeżeli zaś mamy taką informację to możemy stworzyć pid
sami:
pid(0,85,0)
A o to dowód, że to działa
iex(1)> self() #PID<0.80.0> iex(2)> s = pid(0,80,0) #PID<0.80.0> iex(3)> s == self() true
2 Usuwanie z list czy też z ciągu znaków
Możemy wykonać operację --
na dwóch listach jak i ciągach znaków. Operacja ta generuje nam nową listę bez elementów z prawej strony równania:
iex(1)> [1,2,3,4,5] -- [3,5] [1, 2, 4] iex(2)> 'jolka ma kota' -- ' ' 'jolkama kota'
Jak można zauważyć przy znakach, usuwane jest tylko jedno wystąpienie danego znaku.
3 Dodawanie do listy elementów
Możemy łączyć także dwie listy za pomocą znaku ++
. Tylko tym razem jest to po prostu przyłączenie prawa strona jest dodawana do końca listy (tail):
iex(1)> [1,2,3,4,5] ++ [0,6] [1, 2, 3, 4, 5, 0, 6]
Trzeba pamiętać tylko o tym, ze to nie jest super wydajne przy dużych listach!
4 Odwołanie się do kodu znaku
Ok z tym miałem problem dlatego to umieszczam. W każdej chwili możemy sprawdzić w elixir jaki jest kod danego znaku za pomocą znaku zapytania.
?a -> 97 ?A -> 65 ?1 -> 49
Jednak trzeba pamiętać, że jeżeli mamy kod typu:
iex(1)> a = "b" "b" iex(2)> ?a 97
To ?
zawsze się tyczy znaku a nie wartości znaku po. Nawet jak zastosujemy ^
(co zresztą nam się nie uda). Pamiętam jak raz nad tym spędziłem 2h nie kumając czemu alias mi zwraca zła wartość… no nic ;) podobno głupota nie boli.
5 Dodatkowy log informacji
W elixir możemy sprawdzać wartości za pomocą funkcji IO.inspect
. Czasami jednak jak mamy wiele takich wywołań to ja robiłem przynajmniej:
IO.put "test" IO.inspect [1,2]
Zamiast tego można zrobić:
iex(2)> IO.inspect [1,2], label: "test " test : [1, 2]
Podsumowanie
To tyle na dzisiaj, jak znajdę kolejne ciekawe funkcje, skróty to się podzielę. A Ty znasz jakieś ciekawy trick w Elixir, podzielisz się? :)