Ugrás a tartalomhoz

Elm

A Wikiszótárból, a nyitott szótárból


Főnév

Elm (tsz. Elms)

  1. (informatika) Az Elm egy funkcionális programozási nyelv, amelyet kifejezetten front-end webfejlesztésre terveztek. Legfőbb célja a megbízhatóbb, könnyebben karbantartható webes alkalmazások készítésének támogatása. A nyelvet Evan Czaplicki fejlesztette ki 2012-ben egy egyetemi projekt részeként, de mára komoly nyelvvé nőtte ki magát, amelyet a funkcionalitás, a tiszta szintaxis, és a típusbiztonság jellemez.



🧠 Elm célja és filozófiája

Elm tervezési filozófiája több pilléren nyugszik:

  • Nincsenek runtime hibák a JavaScript-hez képest: Elm szigorú típusellenőrzése révén a legtöbb gyakori hiba már fordításkor elkapásra kerül (pl. undefined is not a function típusú hibák nem fordulnak elő).
  • Egyszerűség és tisztaság: Elm egy tisztán funkcionális nyelv, amelyben nincsenek mellékhatások.
  • Erős, statikus típusok: A típusellenőrzés segít megelőzni a hibákat, és megkönnyíti a refaktorálást.
  • Nagyszerű hibaüzenetek: Elm compiler hibaüzenetei oktató jellegűek, gyakran javaslatot is tesznek a megoldásra.



🧱 A nyelv alapjai

1. Típusok és típusbiztonság

Elm erősen típusos nyelv. A típusokat nem mindig kell explicit módon megadni, mivel a fordító képes a típusokat kitalálni (type inference), de mégis célszerű kiírni őket.

add : Int -> Int -> Int
add x y = x + y

Ez azt jelenti, hogy az add függvény két egész számot (Int) vesz át, és egy egész számot ad vissza.

2. Funkcionális szemlélet

Elm-ben minden függvény. Nincs objektumorientált modell, nincs this, nincs állapotmanipuláció. Ehelyett függvényeket és adatokat kombinálunk.

double x = x * 2

3. Immútabilitás

Elm-ben minden érték immutábilis. Ha egy változónak új értéket szeretnénk, új értéket hozunk létre – nem módosítjuk a régit.



🌲 Adatszerkezetek

Listák

Elm-ben listákat így lehet létrehozni:

numbers = [1, 2, 3, 4]

Műveletek:

List.map (\x -> x * 2) numbers
List.filter (\x -> x > 2) numbers

Tuple-ök

pair = (3, "alma")

🎯 A Model-Update-View architektúra

Elm legismertebb vonása az architekturális modellje, amelyet sok más framework is átvett (pl. Redux).

1. Model

Ez az alkalmazás állapota:

type alias Model =
    { count : Int }

2. Update

A Msg típus felsorolja az eseményeket:

type Msg
    = Increment
    | Decrement

A update függvény fogad egy Msg értéket és a jelenlegi Model-t, és visszaad egy új modellt:

update msg model =
    case msg of
        Increment ->
            { model | count = model.count + 1 }

        Decrement ->
            { model | count = model.count - 1 }

3. View

Ez hozza létre a HTML-t a modell alapján:

view model =
    div []
        [ button [ onClick Decrement ] [ text "-" ]
        , div [] [ text (String.fromInt model.count) ]
        , button [ onClick Increment ] [ text "+" ]
        ]

📦 Csomagkezelés

Elm saját csomagkezelő rendszerrel rendelkezik (elm install), amely a hivatalos csomagtárból (https://package.elm-lang.org/) dolgozik. Nincsenek harmadik féltől származó, nem típusbiztos csomagok.



🔁 Példa: Számláló app

module Main exposing (main)

import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)

-- MODEL
type alias Model = Int

init : Model
init = 0

-- UPDATE
type Msg = Increment | Decrement

update : Msg -> Model -> Model
update msg model =
    case msg of
        Increment -> model + 1
        Decrement -> model - 1

-- VIEW
view : Model -> Html Msg
view model =
    div []
        [ button [ onClick Decrement ] [ text "-" ]
        , div [] [ text (String.fromInt model) ]
        , button [ onClick Increment ] [ text "+" ]
        ]

-- PROGRAM
main =
    Browser.sandbox { init = init, update = update, view = view }

Ez a klasszikus számláló alkalmazás kevesebb mint 50 sornyi Elm kódban megvalósul, teljes típusbiztonsággal.



🛠️ Fordítás és futtatás

A fordításhoz az elm CLI eszközt használjuk:

elm make Main.elm --output=main.js

Ez lefordítja az Elm kódot JavaScript-re.



🧩 Interoperabilitás JavaScript-tel

Elm szigorúan elhatárolja magát a JavaScript-től, de lehetőség van “portok” segítségével JS-sel kommunikálni. Ez biztosítja, hogy az Elm rész továbbra is típusbiztos maradjon.



✅ Előnyök

  • Nincsenek futási hibák: Elm-ben a legtöbb hibát fordításkor észleljük.
  • Nagyon jól skálázható: Refaktorálás közben a fordító segít.
  • Remek hibaüzenetek: Az Elm compiler világos és emberi nyelven kommunikál.
  • Egyszerű, kiszámítható architektúra: A Model-Update-View minta következetesen alkalmazható.



❌ Hátrányok

  • Kisebb ökoszisztéma: Elm nem olyan elterjedt, mint pl. React vagy Angular.
  • Kevésbé rugalmas JS-integráció: A port-alapú kommunikáció szándékosan szigorú.
  • Nincs közvetlen DOM-hozzáférés: Elm saját virtuális DOM-ot használ.



🧭 Hasonlóság más nyelvekkel

  • Elm hasonlít a Haskellre a típuskezelés és szintaxis szempontjából.
  • Elm volt az inspiráció Redux számára a Model-Update-View minta alapján.
  • Elm-ben nincs null, nincs undefined, minden érték vagy típusban vagy Maybe konstruktorban van:
type Maybe a = Just a | Nothing

🏁 Összefoglalás

Elm egy egyedi, funkcionális nyelv, amelyet a frontend webfejlesztés problémáinak megoldására hoztak létre. A fordítója segít megelőzni a hibákat, architektúrája kiszámítható és skálázható, és kezdők számára is barátságos a tanulási görbéje. Bár az ökoszisztémája kisebb, cserébe stabilitást, tisztaságot és biztonságot kínál a fejlesztőknek.

  • Elm - Szótár.net (en-hu)
  • Elm - Sztaki (en-hu)
  • Elm - Merriam–Webster
  • Elm - Cambridge
  • Elm - WordNet
  • Elm - Яндекс (en-ru)
  • Elm - Google (en-hu)
  • Elm - Wikidata
  • Elm - Wikipédia (angol)