Guide

Module und Pakete

Ein Programm mit public und use auf Dateien aufteilen, aus der Standardbibliothek importieren und ein Projekt so anlegen, dass seine Tests seinen Code erreichen.

Jede Datei ist ein Modul. Ein Name gehört seiner Datei, bis er public sagt, und eine andere Datei holt ihn mit use herein.

Ziel#

Am Ende dieser Seite kannst du ein Projekt auf Dateien aufteilen, aus der Standardbibliothek importieren und eine eigene Funktion testen.

Einen Namen zwischen Dateien teilen#

src/greeting.trb:

public fn greeting(name: String): String {
  "Hello, {name}!"
}

src/main.trb:

use greeting from "./greeting"

print greeting("World")

use nennt eine Datei über ihren Pfad relativ zur importierenden Datei, ohne .trb. Ein Name ohne public lässt sich nicht importieren: Die use-Zeile ist ein Fehler.

Die Standardbibliothek#

use File, IoError from "std/fs"

fn readSettings(path: String): Result<String, IoError> {
  File.readText path
}

Die Standardbibliothek ist eine Reihe von Paketen namens std/..., und sie kommen mit TorbScript. Die Grundlagen wie print, List, Option und Result sind in jeder Datei ohne use da. Alles, was aus dem Programm hinausreicht, wie Dateien oder das Netzwerk, braucht eines - so zeigt der Kopf einer Datei, was sie berührt.

Ein Projekt#

hello/
├ src/
├─ main.trb             das Programm, das torb run startet
├─ greeting.trb         ein Modul
├ tests/
├─ greeting.test.trb    ein Test
└ project.trb           das Manifest

Die Namen entscheiden, was jede Datei ist. src/main.trb ist das Programm, und nichts importiert es. Also liegt der Code, den Programm und Tests teilen, in einem Modul wie src/greeting.trb, und beide importieren es.

Deinen Code testen#

tests/greeting.test.trb:

use test from "std/test"
use greeting from "../src/greeting"

test "greets by name" {
  assert(greeting("World") == "Hello, World!")
}
$ torb test
tests/greeting.test.trb
  ok      greets by name

1 passed, 0 failed (1 file)

torb test führt jede Datei aus, deren Name auf .test.trb endet. group "name" { ... } fasst mehrere Tests unter einem Namen zusammen. Die Klammern in assert(...) sind nötig, weil das Argument auf oberster Ebene einen Operator hat.

Weiter#

  • Alles zusammensetzen - ein Programm, das alles bisherige benutzt.
  • use - jede Form eines Imports, auch das Umbenennen.
  • Packages - was ein Paket ist, und wie ein anderes Projekt davon abhängt.
Esc