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ę? :)