Functions 🛠️
Nach Scopes lernen wir nun das wahrscheinlich wichtigste Konstrukt in der Programmierung kennen: Functions (Funktionen). Funktionen sind der Mechanismus, der es überhaupt erlaubt, große Softwareprojekte zu schreiben und dabei die Übersicht zu behalten.
Eine Funktion ist ein Stück Code mit einem Namen, das wiederverwendet werden kann. Stell dir folgenden Code vor:
Der Code
console.log("Achtung!")
console.log("Raubtier entdeckt")
wird hierbei mehrmals wiederholt. Wenn wir ändern wollen, was bei einem Raubtier ausgegeben wird, müssen wir alle drei Stellen von Hand anfassen. Das wird schlimmer, je mehr Tiere wir einbauen.
Hier hilft eine Funktion. Eine Funktion gibt einem Stück Code zwischen zwei {}
einen Namen und ermöglicht es, statt den Code zu wiederholen, einfach den
Namen zu benutzen. Man nennt das auch die Funktion aufrufen (zu callen):
Dieses Programm tut genau dasselbe wie oben — aber wir wiederholen uns weniger.
Syntax
Eine Funktion deklarierst du mit dem Schlüsselwort function, gefolgt von einem
Namen, runden Klammern () und einem Block {}. Aufrufen tust du sie
mit name().
Mit nur 4 Zeilen Funktion und 3 Zeilen Aufruf bekommst du 6 Zeilen Output.
Stell dir vor, der Inhalt von sayHello wäre 30 Zeilen lang — die Ersparnis
wird schnell groß.
Parameter
Funktionen werden noch viel mächtiger, wenn sie Parameter entgegennehmen können. Das sind Werte, die der Aufrufer der Funktion übergibt:
Mehrere Parameter trennst du mit Kommas:
Function Scope
Wie bei if und while öffnet auch der Funktionskörper einen eigenen Scope.
Parameter sind also wie lokale Variablen, die nur innerhalb der Funktion
existieren.
return
Bisher haben unsere Funktionen nur console.log benutzt. Viel mächtiger ist es,
wenn Funktionen einen Wert zurückgeben — mit dem Schlüsselwort return.
Der Funktionsaufruf wird dann selbst zu einem Wert, mit dem du weiterrechnen kannst:
Noch ein Beispiel — eine Funktion, die den Absolutwert einer Zahl berechnet:
Funktionen als Black Box
Sobald eine Funktion einmal geschrieben ist, kannst du sie benutzen, ohne zu wissen, wie sie intern funktioniert. Du musst nur wissen: was kommt rein, was kommt raus.
Das ist wie bei einem Taschenrechner — du tippst 5 + 3 und siehst 8. Du musst
nicht wissen, welche elektronischen Schaltungen drin werkeln.
Diese Idee ist mächtig: andere Leute können Funktionen für dich schreiben, und du benutzt sie als Black Box.
import und export (kurzer Ausblick)
In echten JavaScript-Projekten verteilt man Code auf mehrere Dateien. Damit
eine Funktion in einer anderen Datei nutzbar ist, schreibt man export davor:
// foo.js
export function sayHello() {
console.log("Hallo")
}
In einer anderen Datei importiert man sie:
// bar.js
import { sayHello } from "./foo.js"
sayHello()
💡 In diesem Notebook brauchst du
import/exportnicht — der ganze Code lebt in derselben Sandbox. Aber: in der Übung unten kannst duexport function ...schreiben, um dich an den Stil zu gewöhnen. Die Tests funktionieren genauso.
Übung 🎯 — getMagicNumber
Schreib eine Funktion getMagicNumber(startYear, age), die folgendes macht:
- Finde das nächste Jahr ab
startYear(inklusive), in dem sowohl die Fußball-EM stattfindet (alle 4 Jahre, beginnend 2020) als auch die Europawahl (alle 5 Jahre, beginnend 2019). Tipp: 2024 war beides. - Berechne, wie alt die Person in diesem Magic-Year sein wird (
ageplus die Differenz der Jahre). - Starte eine Collatz-Folge mit diesem Alter (gerade → /2, ungerade → 3*n+1).
- Returne die dritte Zahl der Folge (also Index 2, wenn man bei 0 zählt — die ersten drei Zahlen sind: das Alter, dann zwei Schritte weiter).
💡 Tipp anzeigen
- Schritt 1: Du brauchst eine Schleife, die ab
startYearhochzählt und prüft, ob das aktuelle Jahr beide Bedingungen erfüllt:(year - 2020) % 4 == 0und(year - 2019) % 5 == 0. - Schritt 3: Drei Zahlen reichen — du musst nicht die ganze Collatz-Folge bis 1 durchlaufen.
Beispiele für korrekte Ergebnisse:
getMagicNumber(2024, 30)→46(in 2024 ist die Person 30, Collatz: 30 → 15 → 46)getMagicNumber(2018, 18)→6(in 2024 ist die Person 24, Collatz: 24 → 12 → 6)getMagicNumber(2035, 5)→22(in 2044 ist die Person 14, Collatz: 14 → 7 → 22)
Geschafft! 🚀
Du beherrschst jetzt:
- Funktionen mit
function name() {}deklarieren - Parameter und
return-Werte - Funktionen als Black Boxes verwenden
- Den Stil von
export/importfür Mehrdateien-Projekte
Damit hast du Kapitel 2 abgeschlossen! 🎉 Als Nächstes: Arrays →