i

Modularisierung

Ein Modul erstellen

Ein Modul ist eine Zusammenstellungen von Definitionen, die eine Einheit bildet und als Baustein für die Programmierung zur Verfügung gestellt wird.

Um aus der Sammlung von (kommentierten) Funktionsdefinitionen ein Modul zu erstellen, muss diese Sammlung nur noch als Modul (hier: module Teilzeichenketten exposing (..)) ausgezeichnet werden und als Datei mit dem eingeführten Modulnamen (hier: Teilzeichenketten.elm) im Verzeichnis src-Verzeichnis für Elm-Projekte abgelegt werden.

Verzeichnisstruktur:

- elm-stuff
- src
  - Teilzeichenketten.elm
  - ...
elm.json

Quelltext von Teilzeichenketten.elm:

module Teilzeichenketten exposing (..)

-- ZeichenAnPos

{--
Beispiele:
zeichenAnPos 2 "F CK 1900" -> " "
zeichenAnPos 4 "F CK 1900" -> "K"
zeichenAnPos 0 "F CK 1900" -> ""
zeichenAnPos 20 "F CK 1900" -> ""
--}

zeichenAnPos: Int -> String -> String

zeichenAnPos n text =
    String.slice (n-1) n text
	

-- ... 

Ein Modul verwenden

Wenn man die REPL jetzt im Verzeichnis für die Elm-Projekte startet, dann kann man mit import die Definitionen aus dem Modul laden und anschließend verwenden.

> import Teilzeichenketten
> Teilzeichenketten.zeichenAnPos
<function> : Int -> String -> String
> Teilzeichenketten.zeichenAnPos 2 "Hallo"
"a" : String

Aufgabe 1

Teste das selbst.

Die verwendbaren Funktionen festlegen

Mit dem Zusatz exposing ... legt man fest, welche Definitionen aus dem Modul an anderer Stelle importiert werden können. Mit exposing (..) werden alle Definitionen zur Verfügung gestellt. In den Klammern kann man aber auch genau die Namen auflisten, deren Definitionen zur Verfügung gestellt werden sollen.

module Teilzeichenketten exposing (zeichenAnPos, zeichenVorPos)

-- ZeichenAnPos

{--
Beispiele:
zeichenAnPos 2 "F CK 1900" -> " "
zeichenAnPos 4 "F CK 1900" -> "K"
zeichenAnPos 0 "F CK 1900" -> ""
zeichenAnPos 20 "F CK 1900" -> ""
--}

zeichenAnPos: Int -> String -> String

zeichenAnPos n text =
    String.slice (n-1) n text
	

-- ... 

Aufgabe 2

Teste den Fall, dann man eine Funktion verwenden möchte, die nicht mit exposing ... zur Verfügung gestellt wurde.

Ein Kürzel für den Modulnamen verwenden

Gerade bei längeren Modulnamen ist es günstig, wenn man ein Kürzel für diesen Modulnamen einführt und verwendet.

module Teilzeichenketten exposing (..)

-- ZeichenAnPos

{--
Beispiele:
zeichenAnPos 2 "F CK 1900" -> " "
zeichenAnPos 4 "F CK 1900" -> "K"
zeichenAnPos 0 "F CK 1900" -> ""
zeichenAnPos 20 "F CK 1900" -> ""
--}

zeichenAnPos: Int -> String -> String

zeichenAnPos n text =
    String.slice (n-1) n text
	

-- ... 

> import Teilzeichenketten as TZK
> TZK.zeichenAnPos
<function> : Int -> String -> String
> TZK.zeichenAnPos 2 "Hallo"
"a" : String

Aufgabe 3

Führe selbst ein kürzel ein und teste die Verwendung in Funktionsaufrufen.

Auf den Modulnamen verzichten

Es ist auch möglich, den Modulnamen bei Funktionsaufrufen ganz wegzulassen, wenn man den import um eine exposing-Angabe erweitert.

module Teilzeichenketten exposing (..)

-- ZeichenAnPos

{--
Beispiele:
zeichenAnPos 2 "F CK 1900" -> " "
zeichenAnPos 4 "F CK 1900" -> "K"
zeichenAnPos 0 "F CK 1900" -> ""
zeichenAnPos 20 "F CK 1900" -> ""
--}

zeichenAnPos: Int -> String -> String

zeichenAnPos n text =
    String.slice (n-1) n text
	

-- ... 

> import Teilzeichenketten exposing (..)
> zeichenAnPos
<function> : Int -> String -> String
> zeichenAnPos 2 "Hallo"
"a" : String

Aufgabe 4

Teste das selbst.

Ein Vorgehen vereinbaren

Die letzte Variante mit import ... exposing (..) wird bei größeren Projekten nicht empfohlen. Mit dieser Variante kann es zu Konflikten kommen, wenn in verschiedenen Modulen derselbe Name für Funktionen benutzt wird. Wir verwenden daher in größeren Projekten die anderen Varianten.

Wir benutzen die Variante mit import ... exposing (..) hier dagegen häufig zum schnellen Testen von Funktionsdefinitionen in der REPL.

Suche

v
110.2.5.1.1.5
inf-schule.de/fp_elm_alteversion/elm_programme/module/textbearbeitung/lernstrecke/modularisierung
inf-schule.de/110.2.5.1.1.5
inf-schule.de/@/page/lKlQTBJ0HaW0po9d

Rückmeldung geben