Kontynuuję swoją przygodę z Elixir. W zeszłym tygodniu, udało mi się postawić środowisko – zainstalować Elixir, Erlang jak i wybrać plugin do edytora by chociażby mieć kolorowanie składni. W tym tygodniu koncentruje się na poznaniu narzędzi z których będę korzystał przy pisaniu aplikacji. Jeszcze nie składnia, jeszcze nie jakiś gotowy program. Teraz jest pora na poznanie tego z czym przyjdzie mi pracować przez najbliższe tygodnie – jakie narzędzia dostarcza Elixir i co z nimi mogę zrobić.

side note: Jeżeli jesteś zapisany do newslettera, wiesz już że na zabawę mam mało czasu na razie, więc też dużych postępów nie będzie w każdym artykule. Ale będzie ich tyle na ile mi moje skromne 2h z napisaniem artykułu wystarczą. Jak w przyszłości uda mi się znaleźć więcej czasu, to i artykuły będą się częściej pojawiać. A jeżeli chcesz być na bieżąco i mieć informację z pierwszej ręki przed wszystkimi innymi, zapisz się do mnie do newslettera :)

W zeszłym tygodniu poznaliśmy pierwsze z narzędzi z którym przyjdzie mi pracować – interaktywna linia polecań iex. Ze względu na to, że jest to interaktywna linia poleceń, poznamy pewnych kilka zagadnień języka, ale tylko kilka :)

iex

Jest to typowy REPL, w którym możemy bawić się podstawami języka jak sprawdzać pewne pomysły. REPL jest super jeżeli chcemy coś sprawdzić. Ja do tej pory korzystam z LINQ Pad przy C# jak mam jakieś wątpliwości lub nie jestem pewny metody.

Na przykład można z miejsca sprawdzić czy potrafimy wypisać tekst na ekran – niech będzie on tym najbardziej popularnym: Hello, World!

iex(1)> "Hello, " + "World!"
** (ArithmeticError) bad argument in arithmetic expression
:erlang.+("Hello, ", "World!")

Jak widać już wiemy, że nie potrafimy dodawać i łączyć ciągi znaków ;) Ale zaś nie potrzebujemy konkatenacji, możemy wypisać sobie po prosty Hello, World!

iex(1)> "Hello, World!"
"Hello, World!"

Ale dzięki zastosowaniu + dowiedzieliśmy się, że aby połączyć znaki trzeba użyć <>:

iex(2)> "Hello, " <> "World!"
"Hello, World!"

Kolejną rzeczą która mnie bardzo interesuje i którą lubiłem zarówno w Objective-C jak i lubię w JavaScript, to tak zwane wartości true i false. Tak zwane:

if(smth) 
{
}

if(!smth) 
{
}

Powiem tak, w C# cały czas to piszę aż tak bardzo się do tego przyzwyczaiłem. A jak to wygląda w Elixir?

iex(3)> true
true

iex(4)> !true
false

iex(5)> !nil
true

iex(6)> !"Hello"
false

iex(7)> !0
false

iex(8)> false
false

iex(9)> !false
true

iex(10)> !""
false

Boom! :) super, czyli konwersja do boolean jest dość ciekawa, fajne i taka jaką lubię bez quirks z JavaScript (!'' === true).

Do tego możemy łączyć warunki za pomocą and, or, not, &&, || jak i ! – fajnie.

Wiem, na razie to prawie instrukcja Elixira, ale od czegoś trzeba zacząć. To tyle jeżeli chodzi o iex, możliwe, że będę do niego częściej wracał później jak już opanuje podstawy.

Mix

mix jest kolejnym narzędziem, z którego chyba będziemy korzystać i to dość często. Z miejsca można zapoznać się z listą poleceń:

mix help

Na razie ograniczmy się do może trzech które będą nam potrzebne:

mix new
mix compile
mix test

Pierwszy odpowiedzialny jest za tworzenie nowego projektu, drugi za kompilacje a trzeci zaś za odpalenie testów w tym projekcie. Ten mix tutaj to trochę taki Yeoman połączony z domyślnym taskiem budującym całość napisanym w Gulp albo w Grunt i zawierającym z miejsca załadowane parę fajnych pluginów.

Mix New

mix new tworzy nam projekt zgodnie z szablonem, czyli za każdym razem będziemy mieli taki sam układ plików i folderów. By stworzyć nowy projekt wystarczy napisać

mix new elixir02

Co wygeneruje nam katalog elixir02 a w nim:

./.gitignore
./README.md
./mix.exs
./config/config.exs
./lib/elixir02.ex
./test/elixir02_test.exs
./test/test_helper.exs

Gdzie /lib/elixr02.ex to nasz kod aplikacji i /test/elixir02_tests.exs to testy mu odpowiadające. Nazwa katalogu testów ma duże znaczenie i jak będzie inna to testy wam nie zadziałają (domyślnie).

config.exs odpowiedzialny jest za konfigurację projektu ale przed tym zanim cokolwiek zostanie załadowane. Na przykład tutaj możemy mieć ładowanie różnych konfiguracji w zależności od środowiska z jakim mamy styczność. Taki fajniejszy i bardziej rozbudowany nasz web.config z opcją debug/release itp.

test_helper.exs odpala testy.

mix.exs służy do konfigurowania naszego projektu.

Mix compile

mix compile służy do kompilowania aplikacji do pliku app. To co jest fajne, mając skompilowany projekt możemy odpalić interaktywną listę poleceń w kontekście naszej aplikacji, co da nam dostęp do typów i innych rzeczy udostępnionych przez nasz kod. W katalogu projektu elixir02:

iex -S mix

Mix Test

mix test skopiluje nasz kod i wykona testy jednostkowe z katalogu test. Super szybko i sprawnie, dzięki czemu naprawdę chce się pisać testy ;)

Podsumowanie

To tyle, większość czasu z tego co widzę to będzie jednak siedzenie w iex :) więc dobrze, cieszę się. Mam nadzieję, że na bazie tego co teraz wiem, w przyszłym tygodniu napiszę pierwszy Hello, World! Z odpowiednim zbiorem testów ;) Początku bywają nuudne, ale aż żałuje, że już więcej czasu dzisiaj nie mam :(

2 KOMENTARZE

Comments are closed.