TypeScript Syntax

Im Folgenden erhältst du einen tiefgehenden Einblick in die TypeScript Syntax und deren Anwendungsbereiche. Dabei wird grundlegendes Wissen vermittelt und auf spezielle Bereiche der Syntax, wie Klassensyntax, Funktionssyntax und Import-Syntax eingegangen. Du wirst auch erfahren, wie du generische Typen, Enums und Dekoratoren effektiv einsetzt. Wichtige Besonderheiten und Best Practices in der Anwendung und Nutzung der TypeScript Syntax werden ebenso behandelt. Vervollständigt wird das Ganze durch Übungsaufgaben, die den erlernten Stoff festigen helfen. Dieser tiefe Einblick in die TypeScript Syntax, hilft dir dabei, diese Programmiersprache effektiv zu nutzen und ihre Vorteile voll auszuschöpfen.

Los geht’s

Lerne mit Millionen geteilten Karteikarten

Leg kostenfrei los

Brauchst du Hilfe?
Lerne unseren AI-Assistenten kennen!

Upload Icon

Erstelle automatisch Karteikarten aus deinen Dokumenten.

   Dokument hochladen
Upload Dots

FC Phone Screen

Brauchst du Hilfe mit
TypeScript Syntax?
Frage unseren AI-Assistenten

Review generated flashcards

Leg kostenfrei los
Du hast dein AI Limit auf der Website erreicht

Erstelle unlimitiert Karteikarten auf StudySmarter

Inhaltsverzeichnis
Inhaltsverzeichnis

Springe zu einem wichtigen Kapitel

    TypeScript Syntax: Grundlagen und Übersicht

    Eine wichtige Fähigkeit für jeden angehenden Informatiker ist das Verständnis der Syntax verschiedener Programmiersprachen. Heute wirst du alles über die TypeScript Syntax erfahren, einer hochgradig effizienten und beliebten Sprache, die von JavaScript abgeleitet ist. Der Unterschied zwischen den beiden und die speziellen Syntax-Elemente von TypeScript werden im Detail erklärt.

    JavaScript vs TypeScript Syntax: Vergleich und Unterschiede

    JavaScript und TypeScript sind in vielerlei Hinsicht ähnlich, da TypeScript eine Überschreibsprache von JavaScript ist. Infolgedessen basiert die Syntax von TypeScript weitgehend auf der von JavaScript, mit einigen zusätzlichen Funktionen und Syntaxelementen, die speziell für Typsicherheit und Skalierbarkeit entwickelt wurden.

    Die TypeScript-Syntax unterscheidet sich von der JavaScript-Syntax hauptsächlich durch das Hinzufügen eines starken, statischen Typsystems, das bei der Kompilierzeit überprüft wird. Dies ermöglicht eine verbesserte Codequalität und verringert die Wahrscheinlichkeit von Laufzeitfehlern.

    Zum Beispiel, während du in JavaScript Variablen ohne Typ definieren kannst, erfordert TypeScript, dass du den Typ jeder Variante spezifizierst.

     
    let x = 4; // JavaScript 
    let x: number = 4; // TypeScript
    

    TypeScript Klassensyntax: Einführung und Besonderheiten

    In TypeScript, wie auch in anderen objektorientierten Sprachen, ist die Klasse ein grundlegendes Konstrukt, das für die Definition von Datenstrukturen und Verhaltensweisen verwendet wird. Wenn du bereits mit Klassen in JavaScript vertraut bist, wirst du feststellen, dass die TypeScript Klassensyntax äußerst ähnlich ist, jedoch mit einigen wichtigen Unterschieden.

    TypeScript fügt der Klassensyntax Konzepte hinzu, die du vielleicht aus anderen Sprachen wie Java oder C# kennst, z.B. Zugriffskontrolle (public, private, protected) und Dekoratoren.

    Eine TypeScript-Klasse wird durch das Schlüsselwort "class" gefolgt von einem Klassennamen definiert, und kann Eigenschaften und Methoden enthalten.

    Hier ist ein einfaches Beispiel für eine TypeScript-Klasse:

    class Person {
        name:string;
        constructor(n:string){
            this.name = n;
        }
        sayHello() {
            return "Hello, " + this.name;
        }
    }
    

    TypeScript Function Syntax: Funktionen erstellen und verwenden

    Funktionen spielen eine zentrale Rolle in der TypeScript-Syntax, sie sind das Hauptwerkzeug für die Modularisierung und Wiederverwendung von Code. Die Syntax für die Definition von Funktionen in TypeScript ähnelt der in JavaScript, mit dem Unterschied, dass TypeScript die Typisierung der Funktionsparameter und des Rückgabewerts ermöglicht.

    Hier ist ein Beispiel für eine Funktion in TypeScript:

    function greet(name: string): string {
        return 'Hello ' + name;
    }
    

    TypeScript Import Syntax: Module richtig importieren

    In TypeScript, wie auch in modernem JavaScript, wird Code nicht in einem einzelnen großen Skript geschrieben, sondern in mehreren Modulen, die dann importiert werden müssen. Die Syntax zum Importieren von Modulen in TypeScript ist identisch mit der in ES6 JavaScript.

    Ein Modul ist eine Datei, die etwas exportiert, das dann zu einem anderen Ort importiert werden kann, indem das Schlüsselwort 'import' gefolgt von dem, was importiert werden soll, und dem relativen Pfad zur Quelldatei verwendet wird.

    Hier ist ein Beispiel, wie du ein Modul in TypeScript importieren kannst:

    import { ModuleName } from './path/to/module';
    

    Generics und Enums in Typescript: Verständnis und Anwendung

    Generics und Enums sind zwei mächtige Konzepte in TypeScript, die dir erlauben, flexible und wiederverwendbare Codekomponenten zu erstellen.

    Generics sind ein Weg, um wiederverwendbare Komponenten zu erstellen, die auf unterschiedliche Typen arbeiten können. Enums - oder Aufzählungen - sind eine Menge von benannten Konstanten, die einem speziellen Datentyp zugeordnet sind.

    Hier ist ein Beispiel sowohl für Enums als auch für Generics in TypeScript:

    enum Color {Red, Green, Blue}
    let c: Color = Color.Green;
    
    function identity(arg: T): T {
        return arg;
    }
    

    Typen und Schnittstellen in TypeScript: Funktion und Bedeutung

    Der wichtigste Unterschied zwischen TypeScript und JavaScript ist das Typsystem von TypeScript. Dieses statische Typsystem ermöglicht es TypeScript, Typfehler zu erkennen und zu verhindern, bevor der Code ausgeführt wird.

    In TypeScript, gibt es zwei grundlegende Arten von Typen: primitive Typen (z.B. number, string, boolean) und komplexe Typen (z.B. interfaces und classes). Ein Interface definiert eine Form für Werte, während eine Klasse eine Form sowie Implementationsdetails definiert.

    Dieses Beispiel zeigt die Verwendung von Typen und Schnittstellen in TypeScript:

    interface Person {
        name: string;
        age: number;
    }
    
    function greet(person: Person) {
        return "Hello, " + person.name;
    }
    

    Dekoratoren in TypeScript: Syntax und Anwendungsmöglichkeiten

    Dekoratoren sind eine experimentelle Funktion in TypeScript, die dir erlauben, Annotationen und eine Metaprogrammierung in einem einheitlichen Syntaxschema zu verwenden.

    Ein Dekorator ist eine spezielle Art von Funktionserklärung, die an eine Klasse, Methode, Eigenschaft oder Parameter angehängt werden kann. Dekoratoren verwenden den @- Operator, gefolgt vom Namen und den optionalen Ausführungsklammern.

    Hier ist ein einfaches Beispiel für einen Dekorator in TypeScript:

    @classDecorator
    class MyClass { }
    

    Übungen zur TypeScript Syntax: Beispiele und Lösungsansätze

    Der beste Weg, um TypeScript Syntax zu lernen, ist durch Praxis. Unten sind einige Übungen, die dir helfen werden, dein Verständnis zu vertiefen.

    Schreibe eine TypeScript-Funktion, die zwei Zahlen als Argumente entgegennimmt und ihr Produkt zurückgibt. Definiere dann eine Klasse, die eine Methode enthält, welche diese Funktion verwendet.

    Weitere Übungen und Lösungen können in vielen Online-Tutorien und Kursen gefunden werden. Wie beim Erlernen jeder neuen Fähigkeit, ist es wichtig, so viel wie möglich zu üben und dein Wissen regelmäßig zu überprüfen.

    TypeScript Variablendeklaration und Arrow Function Syntax

    Im Rahmen dessen, was TypeScript von JavaScript unterscheidet, sind zwei Elemente von besonderem Interesse: die Art und Weise, wie Variablen deklariert werden, und die Verwendung von Pfeilfunktionen, auch bekannt als Arrow Functions. Beide Elemente heben die Vorteile der TypeScript Syntax hervor und sind wesentliche Bestandteile beim Erstellen skalierbarer und effizienter TypeScript-Programme.

    TypeScript Variablendeklaration: Best Practices und Tipps

    Bei der Variablendeklaration in TypeScript gibt es einige wichtige Punkte zu beachten. Im Unterschied zu JavaScript, legst du in TypeScript den Datentyp einer Variablen bei ihrer Deklaration fest. Dabei gibt es verschiedene Arten von Variablen, die du deklarieren kannst, darunter Boolesche Werte, Zahlen, Zeichenketten und Arrays.

    Der Datentyp wird durch einen Doppelpunkt und den Namen des Typs nach dem Variablennamen bestimmt, z.B.: let varName: number; für eine Zahlenvariable, or let varName: string; für eine Zeichenkettenvariable.

    Dieses Beispiel zeigt die Verwendung verschiedener Datentypen in TypeScript:

    let isDone: boolean = false;
    let decimal: number = 6;
    let color: string = "blue";
    let list: number[] = [1, 2, 3];
    

    Eine gute Praxis in TypeScript ist es, immer den genauesten Typ für deine Variablen zu verwenden. Dies bedeutet nicht nur die Verwendung der richtigen Datentypen, sondern auch die Verwendung von 'never' und 'unknown', wenn eine Variable niemals einen Wert haben oder ihr Typ nicht bekannt sein sollte.

    Arrow Functions in TypeScript: Syntax und Verwendung

    Pfeilfunktionen, auch bekannt als Arrow Functions, sind eine weitere wichtige Syntax-Erweiterung in TypeScript. Sie bieten eine kompakte Syntax, um anonyme Funktionen zu definieren, und sie teilen das gleiche 'this'-Konstrukt wie die Funktionen, in denen sie definiert werden, im Unterschied zu normalen Funktionen.

    Pfeilfunktionen sind ähnlich wie traditionelle Funktionen, haben aber eine kürzere Syntax. Sie werden durch das '=>' Symbol definiert, das die Parameterliste von dem Funktionsrumpf trennt.

    Hier ist ein Beispielfall, der den Unterschied zwischen einer herkömmlichen Funktion und einer Pfeilfunktion darstellt:

    function square(n) { // herkömmliche Funktion
      return n * n;
    }
    
    let square = n => n * n; // Pfeilfunktion
    

    Eine der praktischen Funktionen von Pfeilfunktionen besteht darin, dass sie kein eigenes 'this' haben. In einer Pfeilfunktion bleibt 'this' auf den Kontext bezogen, in dem die Funktion definiert wurde, und nicht darauf, wie und wo die Funktion aufgerufen wurde. Dies ermöglicht einen flexibleren und sichereren Code.

    TypeScript Typen Erklärung: Verstehen und Anwenden

    Wie du vielleicht bereits erahnen kannst, sind Typen ein zentrales Konzept in TypeScript. Sie ermöglichen es dir, sicherzustellen, dass deine Funktionen und Variablen in einer bestimmten, vorhersehbaren Weise agieren. TypeScript bietet eine Vielzahl von eingebauten Typen, einschließlich Primitiven wie 'Number', 'String', 'Boolean', 'Null' und 'Undefined', sowie komplexeren Typen wie 'Array', 'Tuple', 'Enum', 'Any', 'Void', 'Never', und 'Unknown'.

    Durch die Verwendung von Typen kannst du sicherstellen, dass deine Funktionen und Variablen korrekt funktionieren und weniger fehleranfällig sind. Beispielsweise können sie dazu beitragen, Fehler zu verhindern, z.B. die Ausführung einer Zahlenoperation auf einer Zeichenkettenvariable.

    Das folgende Beispiel veranschaulicht, wie Typen in TypeScript verwendet werden:

    let isCompleted: boolean = false;
    let decimal: number = 8;
    let hex: number = 0xf00d;
    let color: string = "white";
    

    Weiterführende Themen zur TypeScript Syntax

    Während die vorhergehenden Abschnitte eine grundlegende Übersicht über die TypeScript Syntax bieten, gibt es einige fortgeschrittene Aspekte, die du benötigst, um ein solides Verständnis für die Möglichkeiten und den Umfang von TypeScript zu erlangen. In den folgenden Abschnitten lernst du mehr über den Abstract Syntax Tree, Interfaces, Modules, Enums, Namespaces, Kommentare und Generics in TypeScript.

    Abstract Syntax Tree TypeScript: Erstellung und Anwendung

    Der Abstract Syntax Tree (AST) ist ein essentielles Konzept für das Verständnis, wie TypeScript (und viele andere Programmiersprachen) intern operieren. Es ist eine Baumstruktur, in der jede Node eine Konstruktion aus dem Quellcode repräsentiert. Wenn du TypeScript-Code kompilierst, erzeugt der TypeScript Compiler einen AST aus deinem Quellcode.

    Der Abstract Syntax Tree ist ein zentraler Bestandteil des Kompilierungsprozesses. Er wird nicht nur für die Codegenerierung verwendet, sondern auch für die Durchführung von Typprüfungen und für die Implementierung von Refactoring- und Navigationsservices in Entwicklungsumgebungen.

    Das folgende Beispiel zeigt eine vereinfachte Darstellung eines AST, der aus einer JavaScript-Expression erstellt wurde:

    subtract(x, add(y, z));
    
    Die Baumstruktur könnte wie folgt aussehen:
          subtract
          /     \
         x      add
                /   \
               y     z
    

    TypeScript Interfaces Syntax: Verstehen und Anwenden

    Interfaces sind ein leistungsstarkes Werkzeug in TypeScript. Sie ermöglichen es dir, die Struktur eines bestimmten Objekttyps zu definieren und sicherzustellen, dass alle Objekte, die als dieser Typ gekennzeichnet sind, diese Struktur einhalten.

    Ein Interface wird mit dem Schlüsselwort 'interface' gefolgt vom Namen des Interfaces definiert. Innerhalb der geschweiften Klammern, die dem Namen folgen, definierst du die Eigenschaften und Methoden, die das Interface erfordert.

    Schau dir das folgende Beispiel eines Interfaces in TypeScript an:

    interface Rectangle {
      width: number;
      height: number;
    }
    

    TypeScript Modules Syntax: Einführung und Anwendung

    Modules in TypeScript ermöglichen es dir, deinen Code in logische, wiederverwendbare Einheiten zu organisieren. Sie bieten den Vorteil der Code-Kapselung und erleichtern die Zusammenarbeit in großen Projekten.

    Ein Modul in TypeScript ist eine Datei, die Code enthält. Du kannst Funktionen, Variablen, Klassen oder Interfaces in einem Modul mit dem 'export'-Schlüsselwort kennzeichnen, um sie außerhalb des Moduls sichtbar zu machen. Um die exportierten Elemente in einer anderen Datei zu verwenden, nutzt du das 'import'-Schlüsselwort.

    Schau dir das folgende Beispiel an, das zeigt, wie du ein Modul in TypeScript erstellst und verwendest:

    // math.ts
    export function add(a: number, b: number) {
        return a + b;
    }
    
    // main.ts
    import { add } from './math';
    console.log(add(1, 2));
    

    TypeScript Enums und Namespaces: Einsatz und Bedeutung

    Enums und Namespaces sind zwei weitere wichtige Konzepte in TypeScript. Mit Enums kannst du eine Menge von benannten Konstanten definieren, und Namespaces bieten eine Möglichkeit, verwandte Codeblöcke zu organisieren.

    Ein Enum ist ein Typ, der eines oder mehrere Werte aus einer festgelegten Liste von Konstanten darstellen kann. Ein Namespace ist ein Container, der dazu dient, zusammengehörige Werte, Funktionen und Typen unter einem gemeinsamen Namen zu organisieren.

    Folgendes Beispiel zeigt, wie du Enums und Namespaces in TypeScript verwenden kannst:

    // Enums
    enum Color {Red, Green, Blue}
    let c: Color = Color.Green;
    
    // Namespaces
    namespace Shapes {
      export class Rectangle {
        // class content
      }
    }
    let r = new Shapes.Rectangle();
    

    TypeScript Kommentar Syntax: Richtig kommentieren

    Kommentare sind in TypeScript genauso wichtig wie in JavaScript. Sie dienen dazu, deinen Code zu erklären und andere Programmierer (oder dich selbst in der Zukunft) darüber zu informieren, was der Code tut. TypeScript unterstützt sowohl einzeilige (//) als auch mehrzeilige (/\* \*/) Kommentare.

    Hier siehst du, wie Kommentare in TypeScript verwendet werden:

    // Dies ist ein einzeiliger Kommentar
    
    /\*
    Dies ist ein
    mehrzeiliger Kommentar
    \*/
    

    TypeScript Generics Syntax: Erklärung und Anwendungsbeispiele

    Generics sind ein mächtiges Werkzeug in TypeScript. Sie bieten eine Möglichkeit, die Typen von Eigenschaften, Methoden, Klassen und Interfaces zu abstrahieren, wodurch du wiederverwendbaren und flexiblen Code schreiben kannst.

    Gegeben sei folgendes Beispiel für die Verwendung von Generics in TypeScript:

    function identity(arg: T): T {
        return arg;
    }
    
    let output = identity("a string");
    

    TypeScript Syntax: Beispiele für fortgeschrittene Anwendungsbereiche

    Die Syntax von TypeScript ermöglicht viele fortgeschrittene Anwendungsbereiche, einschließlich komplexer Datentypen, benutzerdefinierter Typwächter und mächtiger Typmanipulationen. Für alle diese fortgeschrittenen Funktionen und Konzepte gelten die grundlegenden Regeln und Syntax von TypeScript, so dass das Erlernen der Grundlagen dich gut auf diese fortgeschrittenen Themen vorbereitet.

    Um dein Verständnis der TypeScript Syntax zu vertiefen, solltest du dir Zeit nehmen, dich mit fortgeschrittenen Konzepten wie Typaliasen, Literaltypen, Vereinigungs- und Durchschnittstypen, optionalen Parametern und Werten sowie Typschablonen auseinanderzusetzen.

    Dieses Beispiel zeigt die Verwendung von einigen fortgeschrittenen Funktionen in TypeScript:

    type Point = {x: number, y: number};
    
    function printPoint(p: Point) {
      console.log(`${p.x}, ${p.y}`);
    }
    
    const point = {x: 10, y: 20};
    printPoint(point);
    

    TypeScript Syntax - Das Wichtigste

    • TypeScript Syntax: Klassensyntax ähnelt JavaScript mit Zugriffskontrolle und Dekoratoren.
    • TypeScript Funktionssyntax: Typisierung der Funktionsparameter und des Rückgabewerts.
    • TypeScript Import Syntax: Code wird in Modulen geschrieben, die importiert werden müssen.
    • Generics und Enums in TypeScript: Zur Erstellung flexibler und wiederverwendbarer Codekomponenten.
    • Typen und Schnittstellen in TypeScript: Statisches Typsystem erkennt und verhindert Typfehler.
    • TypeScript Dekoratoren Syntax: Experimentelle Funktion für Annotationen und Metaprogrammierung.
    • TypeScript Variablendeklaration: Typ einer Variablen wird bei der Deklaration festgelegt.
    • TypeScript Arrow Function Syntax: Anonyme Funktionen mit kompakter Syntax und geteiltem 'this'-Konstrukt.
    • Abstract Syntax Tree TypeScript: Baumstruktur zur internen Darstellung des Quellcodes.
    • TypeScript Interfaces Syntax: Struktur von Objekttypen definieren und durchsetzen.
    • TypeScript Modules Syntax: Code in wiederverwendbare Einheiten organisieren.
    • TypeScript Enums und Namespaces: Mengen von benannten Konstanten definieren und verwandten Code organisieren.
    TypeScript Syntax TypeScript Syntax
    Lerne mit 12 TypeScript Syntax Karteikarten in der kostenlosen StudySmarter App
    Mit E-Mail registrieren

    Du hast bereits ein Konto? Anmelden

    Häufig gestellte Fragen zum Thema TypeScript Syntax
    Was ist der Unterschied zwischen der Syntax von TypeScript und JavaScript?
    TypeScript ist eine Obermenge von JavaScript, d.h. jede gültige JavaScript-Syntax ist auch in TypeScript gültig. Der Hauptunterschied besteht darin, dass TypeScript zusätzliche Funktionen bietet, wie z.B. statische Typisierung und Interfaces, die in JavaScript nicht vorhanden sind.
    Wie kann man in TypeScript mit der Syntax Funktionen definieren und verwenden?
    In TypeScript kann man Funktionen definieren, indem man das Schlüsselwort "function" gefolgt vom Funktionsnamen, Parameterklammern und in geschweiften Klammern den Funktionskörper schreibt, z.B. `function myFunc(param1: type, param2: type) {...}`. Man kann die Funktion verwenden, indem man den Funktionsnamen gefolgt von den Argumenten in Klammern schreibt, z.B. `myFunc(arg1, arg2)`.
    Wie sieht die TypeScript Syntax für Klassen und Interfaces aus?
    Die Syntax für Klassen in TypeScript sieht aus wie folgt: class ClassName { property: type; constructor(args) {} method() {} } Für Interfaces sieht die Syntax so aus: interface InterfaceName { property: type; method(args: type): returnType; }
    Wie kann man Variablen und Konstanten in TypeScript mithilfe der Syntax deklarieren und zuweisen?
    In TypeScript kann man Variablen mit dem Schlüsselwort 'let' und Konstanten mit 'const' deklarieren. Die Zuweisung von Werten erfolgt mit einem Gleichzeichen, z.B. `let variable = Wert;` oder `const konstante = Wert;`.
    Wie wird die TypeScript Syntax für Generics und Type Annotations verwendet?
    In TypeScript werden Type Annotations dazu verwendet, den Typ einer Variablen oder Funktion festzulegen. Zum Beispiel: `let name: string;` oder `function add(a: number, b: number): number {...}`. Generics ermöglichen es, wiederverwendbare Codekomponenten mit verschiedenen Typen zu erstellen, z.B: `function print(args: T[]): T {...}`.
    Erklärung speichern

    Teste dein Wissen mit Multiple-Choice-Karteikarten

    Was ist der Hauptunterschied zwischen TypeScript und JavaScript Syntax?

    Wie werden Variablen in TypeScript deklariert?

    Was ist der Abstract Syntax Tree in TypeScript?

    Weiter

    Entdecke Lernmaterialien mit der kostenlosen StudySmarter App

    Kostenlos anmelden
    1
    Über StudySmarter

    StudySmarter ist ein weltweit anerkanntes Bildungstechnologie-Unternehmen, das eine ganzheitliche Lernplattform für Schüler und Studenten aller Altersstufen und Bildungsniveaus bietet. Unsere Plattform unterstützt das Lernen in einer breiten Palette von Fächern, einschließlich MINT, Sozialwissenschaften und Sprachen, und hilft den Schülern auch, weltweit verschiedene Tests und Prüfungen wie GCSE, A Level, SAT, ACT, Abitur und mehr erfolgreich zu meistern. Wir bieten eine umfangreiche Bibliothek von Lernmaterialien, einschließlich interaktiver Karteikarten, umfassender Lehrbuchlösungen und detaillierter Erklärungen. Die fortschrittliche Technologie und Werkzeuge, die wir zur Verfügung stellen, helfen Schülern, ihre eigenen Lernmaterialien zu erstellen. Die Inhalte von StudySmarter sind nicht nur von Experten geprüft, sondern werden auch regelmäßig aktualisiert, um Genauigkeit und Relevanz zu gewährleisten.

    Erfahre mehr
    StudySmarter Redaktionsteam

    Team Informatik Lehrer

    • 13 Minuten Lesezeit
    • Geprüft vom StudySmarter Redaktionsteam
    Erklärung speichern Erklärung speichern

    Lerne jederzeit. Lerne überall. Auf allen Geräten.

    Kostenfrei loslegen

    Melde dich an für Notizen & Bearbeitung. 100% for free.

    Schließ dich über 22 Millionen Schülern und Studierenden an und lerne mit unserer StudySmarter App!

    Die erste Lern-App, die wirklich alles bietet, was du brauchst, um deine Prüfungen an einem Ort zu meistern.

    • Karteikarten & Quizze
    • KI-Lernassistent
    • Lernplaner
    • Probeklausuren
    • Intelligente Notizen
    Schließ dich über 22 Millionen Schülern und Studierenden an und lerne mit unserer StudySmarter App!
    Mit E-Mail registrieren