4. Unterrichtsblock: Funktionen und Arrays

Heute lernst du zwei Werkzeuge, mit denen Programme übersichtlich werden: Funktionen bündeln Code, den du wiederverwenden willst. Arrays speichern mehrere Werte in einer Liste. Arbeite weiter in deinem js-projekt aus dem letzten Block.

Funktionen: Code wiederverwenden

Eine Funktion ist ein benannter Codeblock. Du schreibst ihn einmal und rufst ihn beliebig oft auf. Eine Funktion definierst du mit function, einem Namen, runden Klammern und geschweiften Klammern für den Inhalt.

function begruesse() {
  console.log("Hallo und willkommen!");
}

begruesse();   // Aufruf: jetzt läuft der Code
begruesse();   // noch einmal
Ausgabe in der Konsole
Hallo und willkommen!
Hallo und willkommen!

Die Funktion macht nichts, solange niemand sie aufruft. Aufgerufen wird sie durch ihren Namen mit Klammern, zum Beispiel direkt im Code oder per Klick auf einen Button:

<button onclick="begruesse()">Begrüßen</button>
Merke: Funktionsnamen schreibst du wie Variablen in camelCase und am besten als Tätigkeit: begruesse, berechneGesamtpreis, zeigeListe. Funktionen aus app.js kannst du in index.html mit onclick aufrufen.

Parameter und return

Damit eine Funktion flexibel ist, bekommt sie Parameter: Platzhalter in den Klammern. Beim Aufruf übergibst du Argumente, also die echten Werte.

function begruesse(name) {          // name ist der Parameter
  console.log("Hallo " + name + "!");
}

begruesse("Lina");      // "Lina" ist das Argument
begruesse("Max");
Ausgabe in der Konsole
Hallo Lina!
Hallo Max!

Mit return gibt eine Funktion einen Wert an den Aufrufer zurück. Danach endet die Funktion.

function addiere(a, b) {
  return a + b;
}

const summe = addiere(3, 4);
console.log(summe);              // 7
console.log(addiere(10, 5));     // 15
Ausgabe in der Konsole
7
15

Beispiel: Eine Funktion, die Fahrenheit in Celsius umrechnet. Probiere sie aus:

function fahrenheitZuCelsius(f) {
  return (f - 32) * 5 / 9;
}

console.log(fahrenheitZuCelsius(68));    // 20
Ergebnis im Browser
°F
Merke: console.log() zeigt einen Wert nur an. return gibt ihn zurück, sodass du ihn weiterverwenden kannst (in einer Variable, in einer Rechnung, auf der Seite).

Lokale Variablen: Wo gilt eine Variable?

Eine Variable, die du in einer Funktion anlegst, gibt es nur dort (lokal). Nach dem Ende der Funktion ist sie weg. Variablen außerhalb aller Funktionen sind global: Sie gelten überall, auch in Funktionen. Auch die Parameter einer Funktion sind lokal.

const gruss = "Hallo";            // global

function zeigeText(name) {           // name ist lokal
  const satz = gruss + " " + name;   // satz ist lokal, gruss ist sichtbar
  console.log(satz);
}

zeigeText("Lina");
console.log(gruss);                  // funktioniert: global
console.log(satz);                   // Fehler: satz gibt es nur in der Funktion
Ausgabe in der Konsole
Hallo Lina
Hallo
Uncaught ReferenceError: satz is not defined
Merke: Lokale Variablen sind gut: Eine Funktion kann mit eigenen Werten arbeiten, ohne den Rest des Programms zu stören. Dasselbe gilt für let und const in jedem { }-Block, zum Beispiel in einem if.

Aufgabe 1 – Begrüßungsfunktion

Zeit: ca. 5 Minuten

  1. Schreibe in app.js eine Funktion begruesse(name), die „Hallo …!“ in der Konsole ausgibt.
  2. Rufe sie mit zwei verschiedenen Namen auf.
  3. Baue in index.html einen Button, der die Funktion mit deinem Namen aufruft.

Aufgabe 2 – Umrechnen

Zeit: ca. 10 Minuten

  1. Schreibe die Funktion fahrenheitZuCelsius(f) mit return.
  2. Gib das Ergebnis für 50, 68 und 100 Grad Fahrenheit in der Konsole aus.
  3. Baue ein Eingabefeld und einen Button, die das Ergebnis auf der Seite anzeigen (auf eine Nachkommastelle gerundet).

Arrays: Listen von Werten

Ein Array speichert mehrere Werte in einer Reihenfolge. Die Werte stehen in eckigen Klammern, getrennt durch Kommas. Jedes Element hat eine Nummer, den Index. Der erste Index ist 0.

const filme = ["Matrix", "Shrek", "Inception"];

console.log(filme[0]);        // Matrix
console.log(filme[2]);        // Inception
console.log(filme.length);    // 3 (Anzahl der Elemente)
filme[1] = "Toy Story";       // Element ändern
console.log(filme);
Ausgabe in der Konsole
Matrix
Inception
3
(3) [‚Matrix‘, ‚Toy Story‘, ‚Inception‘]

Wähle einen Index und sieh, was im Array steht:

Ergebnis im Browser
Array: ["Matrix", "Shrek", "Inception"]

Index
Merke: Ein Index, den es nicht gibt, liefert undefined. Der letzte Index ist immer länge - 1: filme[filme.length - 1].

Obwohl ein Array mit const angelegt ist, darfst du seine Elemente ändern und Elemente hinzufügen. Nur das ganze Array darfst du nicht neu zuweisen:

const zahlen = [1, 2, 3];
zahlen[0] = 10;       // erlaubt
zahlen.push(4);       // erlaubt
zahlen = [5, 6];      // Fehler: Assignment to constant variable

Wichtige Array-Werkzeuge

SchreibweiseWirkungErgebnis
liste.push("x")hängt ein Element hinten anArray wird länger
liste.pop()entfernt das letzte Element und gibt es zurückArray wird kürzer
liste.lengthAnzahl der ElementeZahl
liste.join(", ")macht aus dem Array einen Text"Matrix, Shrek, Inception"
liste.includes("Shrek")prüft, ob ein Element vorkommttrue oder false
const einkauf = ["Brot", "Milch"];
einkauf.push("Käse");
console.log(einkauf.length);                 // 3
console.log(einkauf.join(", "));             // Brot, Milch, Käse
console.log(einkauf.includes("Milch"));      // true
const letztes = einkauf.pop();               // Käse wird entfernt
console.log(letztes);
Ausgabe in der Konsole
3
Brot, Milch, Käse
true
Käse

Aufgabe 3 – Einkaufsliste

Zeit: ca. 5 Minuten

  1. Lege ein Array einkauf mit drei Artikeln an.
  2. Gib den ersten und den letzten Artikel aus (der letzte mit length).
  3. Füge mit push einen Artikel hinzu und gib die Liste mit join(", ") aus.

Funktionen und Arrays zusammen

Funktionen können Arrays als Argument bekommen und Werte daraus zurückgeben:

function letztesElement(liste) {
  return liste[liste.length - 1];
}

const tage = ["Mo", "Di", "Mi", "Do", "Fr"];
console.log(letztesElement(tage));            // Fr
console.log(letztesElement([3, 8, 5]));       // 5
Ausgabe in der Konsole
Fr
5

Eine Funktion kann auch ein Array verändern, das sie bekommt, zum Beispiel mit push:

const liste = [];

function fuegeHinzu(text) {
  liste.push(text);
  console.log(liste.join(", "));
}

fuegeHinzu("Brot");
fuegeHinzu("Milch");
Ausgabe in der Konsole
Brot
Brot, Milch
Merke: Alle Elemente eines Arrays nacheinander bearbeiten (zum Beispiel alle Preise zusammenzählen) lernst du mit Schleifen, die später dran sind. Bis dahin arbeitest du mit einzelnen Indizes.

Math: Runden und Würfeln

Das Objekt Math ist schon eingebaut und enthält Werkzeuge für Zahlen. Du rufst sie mit Math. davor auf.

SchreibweiseWirkungBeispiel
Math.round(x)auf die nächste ganze Zahl rundenMath.round(4.6) ergibt 5
Math.floor(x)immer abrundenMath.floor(4.9) ergibt 4
Math.ceil(x)immer aufrundenMath.ceil(4.1) ergibt 5
Math.max(a, b), Math.min(a, b)größte bzw. kleinste ZahlMath.max(3, 8) ergibt 8
Math.abs(x)Betrag (ohne Vorzeichen)Math.abs(-5) ergibt 5
Math.sqrt(x)QuadratwurzelMath.sqrt(81) ergibt 9
Math.PIdie Zahl Pi3.14159…
Math.random()Zufallszahl von 0 bis unter 1z. B. 0.7302…

Mit Math.random() und Math.floor() würfelst du:

function wuerfeln(seiten) {
  return Math.floor(Math.random() * seiten) + 1;   // Zahl von 1 bis seiten
}

console.log(wuerfeln(6));      // z. B. 4
console.log(wuerfeln(20));     // z. B. 13
Ergebnis im Browser
Merke: Math.random() * 6 liefert Zahlen von 0 bis unter 6. Mit Math.floor werden es 0 bis 5, und das + 1 macht daraus 1 bis 6.

Aufgabe 4 – Würfel

Zeit: ca. 5 Minuten

  1. Schreibe wuerfeln(seiten) wie im Beispiel.
  2. Würfle damit dreimal mit einem normalen Würfel und einmal mit einem 20-seitigen Würfel und gib die Ergebnisse in der Konsole aus.
  3. Baue einen Button „Würfeln“, der das Ergebnis auf der Seite anzeigt.

Abschlussaufgaben

Jetzt wird es anspruchsvoller. Nimm dir Zeit, es müssen nicht alle Aufgaben geschafft werden.

Aufgabe 5 – Preisrechner als Funktion

Zeit: ca. 15 Minuten

Mache aus dem Preisrechner von letzter Woche eine Funktion.

  1. Schreibe berechneBrutto(netto, rabattProzent, mwstProzent), die den Bruttopreis zurückgibt.
  2. Rufe sie mit drei verschiedenen Beispielen auf und gib die Ergebnisse auf zwei Nachkommastellen gerundet auf der Seite aus.
  3. Baue Eingabefelder und einen Button, damit man Nettopreis, Rabatt und Mehrwertsteuer selbst eingeben kann.

Aufgabe 6 – Einkaufsliste mit Buttons

Zeit: ca. 15 Minuten

  1. Lege ein leeres Array einkauf an.
  2. Schreibe fuegeHinzu(artikel) (mit push) und entferneLetzten() (mit pop).
  3. Schreibe zeigeListe(), die die Liste mit join(", ") auf der Seite anzeigt und darunter die Anzahl der Artikel.
  4. Baue ein Eingabefeld und drei Buttons: „Hinzufügen“, „Letzten entfernen“, „Anzeigen“.

Denkaufgabe: Schreibe eine Funktion tausche(liste), die das erste und das letzte Element vertauscht. Tipp: Du brauchst eine Hilfsvariable, damit kein Wert verloren geht.

Kurz zusammengefasst

Funktionen bündeln Code. Parameter machen sie flexibel, return gibt ein Ergebnis zurück. Arrays speichern Listen, der erste Index ist 0, und mit length, push, pop und join arbeitest du damit. Beides zusammen macht Programme übersichtlich.