Artykuł przygotował: 22.06.2022
Programowanie w języku Haskell
Haskell to funkcyjny język programowania, rozwijany od roku 1990. Nigdy nie należał do grona najpopularniejszych języków, ale do dziś ma swoje grono oddanych fanów. Haskell jest ciągle wspierany, utrzymywany i na bieżąco rozwijany.
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. Programistów Haskell jest niewielu, ale jeśli dobrze znasz ten język to masz szansę na bardzo lukratywną karierę. Niszowość języka sprawia, że specjaliści są bardzo poszukiwani na rynku pracy.
Fundamenty Haskell Level 1
Poznaj język, który potrafi skierować myślenie w zupełnie nowym kierunku. Programiści, którzy podjęli wyzwanie i nauczyli się Haskella, zazwyczaj bardzo go sobie chwalą Interaktywny kurs Haskell
Programowanie funkcyjne w Haskell
Haskell jest językiem funkcyjnym. W praktyce oznacza to możliwość pisania kodu 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 Haskella
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ą.
Pierwszy kod Haskell
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.
Funkcje w Haskell
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 kolejny 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.
Listy w Haskell
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 sztuczka jest 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.
Jak zacząć programować w tym ciekawym języku?
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 Kursu Fundamenty Haskell . To jedyny interaktywny kurs Haskell w języku polskim. Znajdziesz w nim przystępną teorię oraz całą masę praktycznych zadań i ćwiczeń. Poznaj Haskell i twórz nowoczesny, funkcyjny kod!