Otwórz sobie drzwi do kariery programisty     |        Wybierz swoją ścieżkę kariery w IT!     |       Zacznij naukę z 30% rabatem

3 dni 21 godzin
close
Cart icon
User menu icon
User icon
Skontaktuj się z nami:
+48 888-916-333
Lightbulb icon
Jak to działa?
FAQ icon
FAQ
Contact icon
Kontakt
Terms of service icon
Regulamin zakupów
Privacy policy icon
Polityka prywatności
Zdjęcie główne artykułu.

Haskell - tak!

Haskell to niszowy ale niezwykle ciekawy język programowania. Jego korzenie sięgają dość daleko - do roku 1990. Nigdy nie był szczególnie popularnym językiem. Pomimo tego, ma on swoje grono wiernych użytkowników. Jest też ciągle rozwijany oraz wspierany.

Jeśli popatrzmy na garść statystyk to rysuje nam się następujący obraz:

  • 28 miejsce na liście najpopularniejszych języków programowania (dane z roku 2021);
  • około 1% repozytoriów na Github to kod napisany w Haskellu.

Niby mało ale z drugiej strony są bardziej niszowe języki. Zresztą takie dane nie pokazują pełnego obrazu sytuacji.

Programowanie funkcyjne

Haskell jest językiem funkcyjnym. W praktyce oznacza to możliwość pisaniakodu z użyciem funkcji czystych, które nie posiadają tzw. efektów ubocznych.

Taki kod jest zazwyczaj bardziej “ekspresyjny”. Umożliwia skupienie się na wyniku operacji a nie na poszczególnym krokach, które do tego wyniku prowadzą. Co ciekawe, w tej dziedzinie Haskell był często językiem pionierskim. Tak modne obecnie programowania funkcyjne nie jest więc szczególną nowością. Podstawy tej koncepcji znane były od lat.

Haskella czasami używa się jako języka wprowadzającego do koncepcji programowania funkcyjnego. Jego natura zmusza nas do myślenia w sposób funkcyjny.

Haskell potrafi skierować myślenie na zupełnie nowe tory. Zmusza niejako do odkrywania nowych sposobów rozwiązywania programistycznych problemów.

Zalety

Jest parę cech języka, które sprawiają, że ma on swoje grono użytkowników oraz liczne zastosowania w produkcyjnym kodzie

  • Bardzo dobrze radzi sobie z wielowątkowością.
  • Ma solidny zestaw dobrej jakości bibliotek.
  • Haskell oferuje bardzo elastyczny system statycznego typowania.
  • Jest językiem relatywnie szybkim i wydajnym. Pod warunkiem oczywiście, że kod jest napisany “z głową”.

Próg wejścia dla Haskella jest relatywnie duży. A na pewno trochę wyższy niż w przypadku bardziej popularnych języków takich jak Python czy JavaScript. Jednak ci, którzy podjęli ryzyko i zaczęli poważnie interesować się Haskellem, zazwyczaj bardzo go sobie chwalą.

Prosty przykład 1

Linijka kodu jest warta więcej niż 1000 słów. Popatrzmy więc na prosty przykład składni Haskella.

main = putStrLn "Hello, World!"

Rezultat powyższego kodu jest banalnie łatwy do przewidzenia:

Hello, World!

I to tyle jeśli chodzi o pierwszy kontakt z Haskellem. Na razie nie ma tu nic nadzwyczajnego.

Prosty przykład 2

Dużo ciekawiej się robi jeśli spróbujemy napisać oraz uruchomić prostą funkcję. Popatrzmy:

add :: Integer -> (Integer -> Integer) add x y = x + y main = print(add 2 4)

Na pierwszy rzut oka ten kod wygląda trochę dziwnie, zwłaszcza jeśli jesteśmyprzyzwyczajeni do bardziej tradycyjnych języków. Spróbujmy więc przyjrzeć się uważnie poszczególnym elementom.

To jest definicja funkcji o nazwie add. Będzie ona zwracała wartość typu Integer oraz przyjmowała dwa parametry typu Integer.

add :: Integer -> (Integer -> Integer)

W kolejnym kroku deklarujemy co nasza funkcja będzie robić. Mamy dwa parametry,które nazwaliśmy x oraz y. Funkcja ma zwrócićsumę tych parametrów (x + y).

add x y = x + y

A tutaj naszą funkcję wywołujemy. Podajemy wartości 2 oraz 4. Wynik wyprowadzamy na ekran za pomocą print().

main = print(add 2 4)

Widzisz ten element main? To funkcja, która jest głównym punktem wejściowym programu. Jeśli znasz takie języki jak C++ albo Java to pewnie kojarzysz tą koncepcję. W Haskellu działa to podobnie choć oczywiście składnia jest nieco inna.

A skoro jesteśmy już przy składni to mamy kilka interesujących rzeczy specyficznych dla Haskella.

  • Parametrów funkcji nie trzeba oddzielać przecinkami. Możemy więc użyć takiego zapisu x y.
  • Nie ma nawiasów klamrowych. Trochę to przypomina np. Pythona.
  • W naszym kodzie może tego nie widać, ale Haskell używa wcięć wewnątrz bloków.To też element przypominający Pythona.

Generalnie da się zauważyć, że Haskell wiele rzeczy robi po swojemu.I raczej nie ułatwia to zadania, jeśli jesteś na etapie nauki podstaw języka. Z drugiej strony do wszystkiego da się przyzwyczaić. To kwestia wprawy i doświadczenia.

Prosty przykład 3

Haskell oferuje możliwość pisania zwięzłego, ładnego i bardzo ekspresyjnego kodu. Spójrz:

list1 = [1,2,3] list2 = [4,5,6] main = print(list1 ++ list2)

W powyższym przykładzie stworzyliśmy dwie listy, które następnie połączyliśmy za pomocą ++ (operator konkatenacji w Haskellu). Wynikiem będzie połączona lista [1,2,3,4,5,6]. Podobna sztuczkajest dostępna np. w Pythonie. Tak jak pisaliśmy wcześniej, Haskell u podstaw jest językiem funkcyjnym. A to z kolei umożliwia dużą “ekspresję” przy pisaniu kodu. Umożliwia skupienie się na wyniku operacji a nie na jej poszczególnych krokach.

Gdzie się używa Haskella

Haskell od zawsze miał opinię języka eksperymentalnego czy też “akademickiego”. Był postrzegany jako ciekawostka dla pasjonatów. Język, który może jest interesujący ale nie ma wielu praktycznych zastosowań.

Tyle, że to nie do końca prawda. Jest wiele przykładów zastosowania tego języka w produkcyjnym kodzie.

  • Semantic - system do parsowania, analizy oraz porównywania kodu źródłowego używany przez Github.
  • System antyspamowy stworzony i używany przez Facebooka/Meta.
  • Różne systemy wspierające infrastrukturę IT w firmie Google

Generalnie Haskell jest używany zazwyczaj do pisania wyspecjalizowanego oprogramowania. Takiego, które musi być wydajne, stabilne i bezpieczne. Często jest to oprogramowanie, które przetwarza duże ilości danych. Warto wspomnieć także o tym, że Haskell ma szerokie zastosowania w środowiskach akademickich i naukowych.

Haskell jest też dobrym sposobem na to, aby wyrwać się ze schematów i opanować zupełnie nowe podejście do pisania kodu. Jego funkcyjna natura sprawia, że zmusza on nas niejako do przemyślenia naszego dotychczasowego podejścia. Jest więc dobrym wyborem jeśli masz już jakieś pojęcie o programowaniu i chcesz poszerzyć swoje horyzonty.

Co jest potrzebne aby zacząć

Haskell jest językiem kompilowanym. Najczęściej używanym kompilatorem jest GHC. Wszystko co potrzebne jest do rozpoczęcia pracy znajdziesz tutaj:
https://www.haskell.org/downloads/

A jak poznać podstawy języka? Zacznij od tego kursu Codenga. Znajdziesz w nim nie tylko podstawy Haskella. ale przede wszystkim całą masę zadań oraz ćwiczeń. To bardzo praktyczne podejścia do nauki programowania.