Listen, List Comprehensions und Zeichenketten

LektionOpenSCAD: Programmierenca. 3 Min. Lesezeit

Begriffe vorab

  • List Comprehension: Ausdruck, der eine Liste aus einer Schleife erzeugt.
  • each: Entpackt eine Liste in die umgebende Liste.
  • search(): Sucht Werte in Listen oder Zeichenketten.
  • Typtest: Funktion, die den Typ eines Wertes prüft, z. B. is_list.
  • str(): Wandelt Argumente in Text um und verkettet sie.

List Comprehensions

Mit [ for (i = bereich) ausdruck ] erzeugst du Listen. Erweiterungen:

  • Filter: [ for (x = liste) if (bedingung) x ].
  • if/else innerhalb der Liste (laut Doku ab 2019.05).
  • let für Zwischenwerte.
  • each (ab 2019.05) entpackt eine Liste, z. B. zum Flachklopfen.
  • C-artiges for for (init; bedingung; schritt) für rekursive Berechnungen (ab 2019.05).

Kerngedanke: Du beschreibst die Liste, statt sie schrittweise zu füllen. Das passt zur unveränderlichen Natur von OpenSCAD-Variablen. Typisch: Punktlisten für polygon mit Winkelfunktionen.

Zeichenketten

  • str(…) wandelt alle Argumente in Text um und verkettet sie.
  • chr(…) (ab 2015.03) wandelt Unicode-Codepunkte in Zeichen (chr(65) = „A“).
  • ord("a") (ab 2019.05) liefert den Codepunkt (97).
  • len("Hello world") liefert 11 – auch für Listen.
  • search() findet Werte in Listen und Text.

Typtests (ab 2019.05)

is_undef, is_bool, is_num, is_string, is_list und – ab 2021.01 – is_function. Besonderheiten: is_undef(a) prüft ohne Warnung bei unbekannter Variable; is_num gilt auch für Unendlich, aber nicht für nan.

// Ellipse aus einer List Comprehension
punkte = [ for (a = [0 : 10 : 359]) [ 20 * cos(a), 10 * sin(a) ] ];
linear_extrude(4) polygon(punkte);

// Filter und Transformation
zahlen = [1, 2, 3, 4, 5, 6];
gerade = [ for (z = zahlen) if (z % 2 == 0) z * z ];
echo(gerade);                                    // [4, 16, 36]

// Flachklopfen mit each
flach = [ each [1, 2], each [3, 4] ];
echo(flach);                                     // [1, 2, 3, 4]

// Text und Typen
beschriftung = str("Maß: ", 12, " mm");
echo(beschriftung, len(beschriftung), is_string(beschriftung), is_list(zahlen));
echo(chr(65), ord("a"));

Die erste Liste erzeugt 36 Punkte einer Ellipse mit Halbachsen 20 und 10 und gibt sie an polygon. Die zweite filtert gerade Zahlen und quadriert sie.

Statt eine Liste in einer Schleife „aufzufüllen“, beschreibst du sie mit einer List Comprehension.

Zum Selbermachen

  1. Erzeuge die Eckpunkte eines Sterns mit abwechselnd zwei Radien.
  2. Filtere aus einer Liste von Maßen alle über 10 und gib sie aus.

Verwandte Themen

OpenSCAD → Die übrigen Lektionen dieser Themenwelt; Informatik: Grundlagen → „Algorithmen und Berechenbarkeit“ für das Denken in Schritten.

Prüfstatus: Belegt (Stand 1. Oktober 2026): Syntax der List Comprehensions (Filter, if/else, let, each, C-artiges for) samt Versionsangaben, str, chr (2015.03), ord (2019.05), len, search sowie die Typtests (2019.05, is_function 2021.01, nan-Verhalten) wurden gegen die Seiten „List Comprehensions“, „String Functions“ und „Type Test Functions“ geprüft. Alle Codebeispiele dieser Lektion wurden mit OpenSCAD 2026.09.18 (lokale Installation) ausgeführt und liefen ohne Fehler und Warnungen. Nicht einzeln belegt: die Erklärungen in eigenen Worten, die Beispiele als solche (konstruiert) und die Wertungen.

Quellen

  • OpenSCAD User Manual – List Comprehensions (en.wikibooks.org/wiki/OpenSCAD_User_Manual/List_Comprehensions)
  • OpenSCAD User Manual – String Functions (en.wikibooks.org/wiki/OpenSCAD_User_Manual/String_Functions)
  • OpenSCAD User Manual – Type Test Functions (en.wikibooks.org/wiki/OpenSCAD_User_Manual/Type_Test_Functions)
  • OpenSCAD Cheat Sheet (openscad.org/cheatsheet, bezieht sich auf Version 2021.01)

Alles zu „OpenSCAD: Programmieren“