4. Unterrichtsblock

Funktionen

Eine JavaScript-Funktion ist ein Codeblock, der zur Ausführung einer bestimmten Aufgabe entwickelt wurde. Eine JavaScript-Funktion wird ausgeführt, wenn „etwas“ sie aufruft (anspricht).

// Funktion zur Berechnung des Produkts von p1 und p2
function meineFunktion(p1, p2) {
  return p1 * p2;
}
function summeBerechnen(wert1) {
  return 5 + (wert1 - 2);
}
document.getElementById("demo").innerHTML = summeBerechnen; 

// Ausgabe: undefined

// Ausgabe: 4 (Weil die Rechnung in der Klammer zuerst ausgeführt wird)

// Ausgabe: function summeBerechnen(wert1) {return 5 + (wert1 - 2);}

// Ausgabe: 6 (Weil es in JavaScript keine Rolle spielt, ob eine Rechnung in Klammern steht)

Syntax von JavaScript Funktionen

  • Eine JavaScript-Funktion wird mit dem Schlüsselwort function definiert, gefolgt von einem Namen, gefolgt von runden Klammern ().
  • Funktionsnamen können Buchstaben, Ziffern, Unterstriche und Dollarzeichen enthalten (dieselben Regeln wie bei Variablen).
  • Die Klammern können durch Kommas getrennte Parameternamen enthalten: (parameter1, parameter2, …)
  • Der von der Funktion auszuführende Code steht in geschweiften Klammern: { }
function name(parameter1, parameter2, parameter3) {
  // Code der ausgeführt werden soll
}


// Variablen innerhalb von Funktionen sind lokal und können nur innerhalb der Funktion verwendet werden
// Der Code hier kann autoName NICHT verwenden

function meineFunktion() {
  let autoName = "Volvo";
  // Der Code hier KANN autoName verwenden
}

// Der Code hier kann autoName NICHT verwenden

Funktionsparameter

  • Funktions-Parameter sind innerhalb der Klammern () in der Funktionsdefinition aufgeführt.
  • Argumente sind die Werte, die von der Funktion empfangen werden, wenn sie aufgerufen wird.
  • Innerhalb der Funktion verhalten sich die Argumente (die Parameter) wie lokale Variablen.

Aufruf von Funktionen

Der Code innerhalb der Funktion wird ausgeführt, wenn „etwas“ die Funktion aufruft (auslöst):

  • Wenn ein Ereignis eintritt (wenn ein Benutzer auf eine Schaltfläche klickt)
  • Wenn es vom JavaScript-Code aufgerufen (ausgelöst) wird
  • Automatisch (selbst aufgerufen)

Funktion return

  • Wenn JavaScript eine return-Anweisung erreicht, stoppt die Ausführung der Funktion.
  • Wenn die Funktion von einem Statement (Aussage) aufgerufen wurde, kehrt JavaScript „zurück“, um den Code nach der aufrufenden Anweisung auszuführen.
  • Funktionen berechnen oft einen Rückgabewert. Der Rückgabewert wird an den „Aufrufer“ „zurückgesendet“:
let x = meineFunktion(4, 3);   // Funktion wird aufgerufen, der Rückgabewert der Funktion landet in x

function meineFunktion(a, b) {
  return a * b;                // Die Funktion gibt das Produkt von a und b zurück
}

// Das Wert von x wird 12 sein.

Ergebnis:

Warum nutzt man Funktionen?

  • Man kann Code wiederverwenden: Man definiert den Code einmal und verwenden Sie ihn viele Male.
  • Man kann denselben Code viele Male mit unterschiedlichen Argumenten verwenden, um unterschiedliche Ergebnisse zu erzielen.
// Beispiel einer Funktion, die Fahrenheit in Celsius umwandelt:
function zuCelsius(f) {
  return (5 / 9) * (f - 32);
}
document.getElementById("demo").innerHTML = zuCelsius(77);   // Ausgabe: 25



// Wenn () nicht mitgegeben wird, wird nur der Block der Funktion zurückgegeben
function zuCelsius(fahrenheit) {
  return (5 / 9) * (fahrenheit - 32);
}
document.getElementById("demo").innerHTML = zuCelsius; 

// Ausgabe: function zuCelsius(fahrenheit) {return (5/9) * (fahrenheit-32);}

Ergebnis:

Aufgabe

Bringe die o.g. Funktion mit der Farenheit-Celsius-Umrechnung wie in oben gezeigtem Beispiel zum Laufen.

  • Das Ergebnis soll ausgegeben werden, nachdem auf einen Button geklickt wurde.
  • Die Fahrenheit-Werte dürfen nur mit dem Event „onklick“ über den Funktions-Parameter in die Funktion eingebracht werden
  • Baue ein Website-Widget, welches als Variablen Öffnungszeiten enthält und in Echtzeit anzeigt, ob ein Geschäft gerade geöffnet hat.
  • Baue ein Website-Widget, welches als Variablen Besuchermengen einer jeden Stunde enthält und in Echtzeit anzeigt, wie lange die aktuelle durchschnittliche Wartezeit gerade ist.
    • Gestalte die beiden Widgets auch im CSS ansprechend – z. B. eine grüne Anzeige und hellgrüner Hintergrund, wenn die Praxis geöffnet ist und gelb, wenn sie nicht geöffnet ist. Oder blau, wenn die Wartezeit mehr als eine halbe Stunde beträgt.
    • Die Öffnungszeiten und die Besuchermengen sollen nur Werktags von Montag bis Freitag angezeigt werden. Am Wochenende, zu den Urlaubszeiten und an Feiertagen soll die Praxis geschlossen sein.
    • Nutze für die Urlaubszeiten und für die Feiertage separate Variablen
  • Baue ein weiteres Widget, welches das aktuelle Wetter anzeigt. Nutze hierfür die Wetter API: https://webdesign.tutsplus.com/de/build-a-simple-weather-app-with-vanilla-javascript–cms-33893t
    • Anmeldungen für die kostenlose API-Version können über die Schul-E-Mail-Adresse gemacht werden.

Datumsberechnungen mit getHours()

Funktionen als Variable Werte

Funktionen können in allen Arten von Formeln, Zuweisungen und Berechnungen genauso verwendet werden wie Variablen.

let x = zuCelsius(77);
let text = "Die Temperatur beträgt " + x + " Grad Celsius";


// Alternativ besteht auch die Möglichkeit die Funktion direkt als Variable einzubinden
let text = "Die Temperatur beträgt " + zuCelsius(77) + " Grad Celsius";

Objekte

Objekte, Eigenschaften und Methoden im Alltag

In unserem Alltag bezeichnen wir z.B. ein Auto als ein Objekt. Ein Auto hat Eigenschaften wie Gewicht und Farbe und Methoden wie Start und Stopp:

ObjektEigenschaften (Properties)Methoden

auto.name = BMW

auto.modell = 3er

auto.gewicht = 1600 kg

auto.farbe = schwarz

auto.start()

auto.beschleunigen()

auto.bremsen()

auto.stopp()

Alle Autos haben die gleichen Eigenschaften, aber die Eigenschaftswerte unterscheiden sich von Auto zu Auto. Alle Autos haben auch die gleichen Methoden, aber die Methoden werden zu unterschiedlichen Zeiten durchgeführt.

JavaScript Objekte

Sie haben bereits gelernt, dass JavaScript-Variablen Speicherorte für Daten bzw. "Werte" sind. Dieser Code weist einer Variablen namens "auto" einen einfachen Wert (BMW) zu:

let auto = "BMW";

Auch Objekte sind Variablen. Aber Objekte können viele Werte enthalten. Man könnte auch sagen, dass Objekte erweiterte Variablen sind. Dieser Code weist einer Variablen namens "auto" mehrere Werte (BMW, 3er, schwarz) zu:

const auto = {marke:"BMW", modell:"3er", farbe:"weiss"};

/*
  Die Werte in Objekten werden als name:"wert"-Paare geschrieben (Name und Wert werden dabei durch einen Doppelpunkt getrennt).
  Es ist üblich, Objekte mit dem Schlüsselwort "const" zu deklarieren.
*/ 


// DEKLARATION
const testPerson = {vorName:"Thomas", familienName:"Müller", alter:50, augenFarbe:"blau"};


const testPerson = {
  vorName:"Thomas",
  familienName:"Müller",  // Eigenschaft: familienName  // Wert: Müller
  alter:50,               // Eigenschaft: alter         // Wert: 50
  augenFarbe:"blau"
};

Objekteigenschaften (Properties)

Die name:wert Paare in JavaScript Objekten werden Eigenschaften (Properties) genannt:

Eigenschaft (Propertie)Wert
vorNameThomas
familienNameMüller
alter50
augenFarbeblau

Zugriff auf Objekteigenschaften

Sie können auf zwei Arten auf Objekteigenschaften zugreifen:

// Zugriff über einen Punkt
objektName.eigenschaftName;

testPerson.vorName;


// Zugriff über Eckige Klammern
objektName["eigenschaftName"];

testPerson["vorName"];

Name: Wie heißt die Testperson?

Alter: Wie alt ist die Testperson?

Aufgabe

  • Deklariere ein Objekt mit dem Namen lebensMittel
  • Füge dem Objekt bei der Deklaration die Eigenschaften "name", "preis", "herkunft" und "kategorie" zu und denke dir einen Wert für die Eigenschaften aus.
  • Baue o.g. Beispiel mit dem eben erstellen Objekt nach
  • Bei Knopfdruck auf Button 1 sollen dabei Preis und in der nächsten Zeile bei Knopfdruck auf Button 2 der Name ausgegeben werden
  • Greife dabei einmal mit der Punkt-Methode und einmal mit der ["Klammer"]-Methode auf die Werte der Eigenschaften zu
  • Schreibe Preis: und Name: in fett vor den Wert

Merke: JavaScript-Objekte sind Container (Speicher) für benannte Werte, die Eigenschaften (Properties) genannt werden.

Objekt-Methoden

  • Objekte können auch Methoden beinhalten.
  • Methoden sind Aktionen, die auf Objekten ausgeführt werden können.
  • Methoden werden in Eigenschaften als Funktionsdefinitionen gespeichert.
Eigenschaft (Propertie)Wert
vorNameThomas
familienNameMüller
alter50
augenFarbeblau
kompletterNamefunction() {return this.vorName + " " + this.familienName;}
// OBJEKT METHODE

const testPerson = {
  vorName: "Thomas",
  familienName: "Müller",  
  alter: 50,               
  augenFarbe: "blau",
  kompletterName: function() {
    return this.vorName + " " + this.familienName;
  }
};

Merke: Eine Objekt-Methode ist eine Funktion, gespeichert als Eigenschaft.

Was ist this?

In JavaScript bezieht sich das Schlüsselwort this auf ein Objekt.
Welches Objekt verwendet wird, hängt davon ab, wie this eingesetzt (verwendet oder benannt) wird.

Das Schlüsselwort this bezieht sich je nach Verwendung auf unterschiedliche Objekte:

In einer Objektmethode bezieht sich this auf das Objekt.
Alleinstehend bezieht sich this auf das globale Objekt.
In einer Funktion bezieht sich this auf das globale Objekt.
Innerhalb einer Funktion, im strict Modus, ist this undefiniert.
In einem Event, bezieht sich this auf das Element, welches das Event empfangen hat.
Methoden wie call(), apply(), und bind() können this auf ein beliebiges Objekt beziehen.

Merke: this ist keine Variable. Es ist ein Schlüsselwort. Man kann den Wert von this nicht ändern.

Das Schlüsselwort this

  • In einer Funktionsdefinition bezieht sich this auf den "Eigentümer" der Funktion.
  • In o.g. Beispiel ist this das testPerson-Objekt, das die kompletterName-Funktion „besitzt“.
  • Mit anderen Worten bedeutet this.vorName die vorName-Eigenschaft dieses Objekts.

Zugriff auf Objekt-Methoden

Um auf Objekt-Methoden zugreifen zu können, verwendet man folgende Syntax:

objektName.methodenName()

Kompletter Name: Wie heißt die Testperson?

<p><strong>Kompletter Name:</strong> <span id="objektmethode">Wie heißt die Testperson?</span></p>

<button onclick="document.getElementById('objektmethode').innerHTML =
testPerson2.kompletterName();">Gib den gesamten Namen aus</button>

<script>
const testPerson2 = {
  vorName: "Matthias",
  familienName: "Mayer",  
  alter: 40,               
  augenFarbe: "braun",
  kompletterName: function() {
    return this.vorName + " " + this.familienName;
  }
};

</script>

Aufgabe

  • Füge dem Objekt von vorhin eine Objektmethode hinzu, welche mittels Funktion die Werte der Eigenschaften "herkunft" und "kategorie" nebeneinander ausgibt.
  • Bei Knopfdruck den Button sollen die Werte der beiden Eigenschaften nebeneinander mit einem Leerzeichen getrennt erscheinen
  • Beziehe die Werte aus der Objektmethode
  • Schreibe Herkunft und Kategorie: in fett vor den Wert

Arrays

Ein Array ist eine spezielle Variable, die mehr als einen Wert enthalten kann.

Warum werden Arrays verwendet?

Wenn Sie eine Liste von Elementen haben (z. B. eine Liste mit Autonamen), könnte das Speichern der Autos in einzelnen Variablen wie folgt aussehen:

let auto1 = "Saab";
let auto2 = "Volvo";
let auto3 = "BMW";

Was aber, wenn Sie die Liste an Autos filtern wollen und ein bestimmtes Auto finden möchten? Und was wäre, wenn Sie nicht 3 Autos, sondern 300 hätten? Die Lösung ist ein Array! Ein Array kann viele Werte unter einem einzigen Namen enthalten, und Sie können auf die Werte zugreifen, indem Sie auf eine Indexnummer verweisen.

const autos = ["Saab", "Volvo", "BMW"];

Erstellung eines Arrays

// Die Verwendung eines Array-Literals ist die einfachste Möglichkeit, ein JavaScript-Array zu erstellen.
const array_name = [inhalt1, inhalt2, ...]; 

// Leerzeichen und Zeilenumbrüche sind nicht wichtig. Eine Deklaration kann mehrere Zeilen umfassen:
const autos = [
  "Saab",
  "Volvo",
  "BMW"
];


// Sie können auch ein Array erstellen und dann die Elemente bereitstellen:
const autos = [];
autos[0]= "Saab";
autos[1]= "Volvo";
autos[2]= "BMW";


// Das folgende Beispiel erstellt ebenfalls ein Array und weist ihm Werte zu:
const autos = new Array("Saab", "Volvo", "BMW"); 


// FEHLERQUELLE bei lediglich einem Wert
const punkte = [40];            // Erstellt ein Array mit dem Wert "40"
const punkte = new Array(40);   // Erstellt ein Array mit 40 undefinierten Werten 

Aufgabe

Baue o.g. Arrays nach und probiere auch die Fehlerquellen aus.

Zugriff auf Array-Elemente

Sie greifen auf ein Array-Element zu, indem Sie sich auf die Indexnummer beziehen.

  • Ein Array-Index beginnt bei 0.
  • [0] ist das erste Element.
  • [1] ist das zweite Element usw.
// Zugriff auf das erste Array-Element
const autos = ["Saab", "Volvo", "BMW"];
let auto = autos[0];

Mit JavaScript kann auf das vollständige Array zugegriffen werden, indem auf den Array-Namen verwiesen wird:

const autos = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = autos;

Ändern von Array-Elementen

Diese Anweisung ändert den Wert des ersten Elements in Autos:

const autos = ["Saab", "Volvo", "BMW"];
autos[0] = "Opel";

Unterschied zwischen Arrays und Objekten

Arrays sind "eigentlich" Objekte bzw. eine spezielle Art von Objekten. Der typeof-Operator in JavaScript gibt "object" für Arrays zurück.
JavaScript-Arrays lassen sich jedoch am besten als "Arrays" beschreiben.

// Arrays verwenden Zahlen, um auf ihre "Elemente" zuzugreifen. In diesem Beispiel gibt person[0] Thomas zurück:
const person = ["Thomas", "Müller", 46];

// Objekte verwenden Namen, um auf ihre "Elemente" zuzugreifen. 
const person = {vorName:"Thomas", nachName:"Müller", alter:46};

Wann verwendet man Arrays und wann verwendet man Objekte?

  • Sie sollten Objekte verwenden, wenn die Elementnamen Zeichenfolgen (Text) sein sollen.
  • Sie sollten Arrays verwenden, wenn die Elementnamen Zahlen sein sollen.

Erkennung von Arrays

Woher weiß man, ob eine Variable ein Array ist? Das Problem ist, dass der JavaScript-Operator typeof "object" zurückgibt:

// Gibt "objekt" zurück
const obst = ["Banane", "Orange", "Apfel"];
let type = typeof obst;


// 1. Lösung: Die Methode Array.isArray() 
Array.isArray(obst);        // Gibt "true" aus

// 2. Lösung: der instanceof Operator
const obst = ["Banane", "Orange", "Apfel"];
obst instanceof Array;      // Gibt "true" aus

Hinzufügen von Array-Elementen

/* push() Methode
   Der einfachste Weg, ein neues Element zu einem Array hinzuzufügen, 
   ist die Verwendung der Methode push():
*/
const obst = ["Banane", "Orange", "Apfel"];
obst.push("Zitrone");  // Fügt das Element (Zitrone) zu Obst hinzu 


/*
Ein neues Element kann auch mit der Eigenschaft "length" zu einem Array hinzugefügt werden:
*/
const obst = ["Banane", "Orange", "Apfel"];
obst[obst.length] = "Zitrone";  // Fügt "Zitrone" zu Früchten hinzu


// Die Zuweisung kann auch durch eine absolute Deklaration erfolgen
const obst = ["Banane", "Orange", "Apfel"];
obst[6] = "Zitrone";  // Generiert "undefined-Löcher" in obst

Assioziative Arrays

Viele Programmiersprachen unterstützen Arrays mit benannten Indizes. Arrays mit benannten Indizes werden als "assoziative Arrays" (oder Hashes) bezeichnet. JavaScript unterstützt keine Arrays mit benannten Indizes. In JavaScript verwenden Arrays immer nummerierte Indizes.


// Korrekte Benennung eines Array-Indexes
const person = [];
person[0] = "Thomas";
person[1] = "Müller";
person[2] = 46;
person.length;    // Gibt 3 aus
person[0];        // Gibt "Thomas" aus 


/*
Wenn Sie benannte Indizes verwenden, definiert JavaScript das ARRAY in ein OBJEKT um.
Danach führen einige Array-Methoden und -Eigenschaften zu falschen Ergebnissen.
*/

// Fehlerhafte Benennung eines Array-Indexes
const person = [];
person["vorName"] = "Thomas";
person["nachName"] = "Müller";
person["alter"] = 46;
person.length;     // Gibt 0 aus
person[0];         // Gibt undefined aus

Arrays können Funktionen, Objekte und weitere Arrays beinhalten

JavaScript-Variablen können Objekte sein. Arrays sind spezielle Arten von Objekten. Aus diesem Grund können Sie Variablen unterschiedlichen Typs im selben Array speichern.

  • Man kann Objekte in einem Array haben
  • Man kann Funktionen in einem Array haben.
  • Man kann Arrays in einem Array haben.
// Beispiel eines Arrays mit einer Funktion, einem Objekt und einem weiteren Array

const beispielArray = [
  "Kartoffel",
  "Kürbis",
 
  // FUNKTION
  rechnung(),

  // OBJEKT
  beispielObjekt = {
    vorName: "Thomas",
    nachName: "Müller",
    alter: 46
    },

   // ARRAY
   weiteresArray = [
     "Äpfel",
     "Birnen",
     "Pflaumen"
   ]

];
  

// Externe Funktion
function rechnung() {
  return 5 + 4;
}


Aufgabe

Gib von o.g. Code folgende Werte auf Knopfdruck aus:

  • Kartoffel
  • 9
  • Müller
  • Birnen

Übungsaufgaben

  • Erstelle eine Funktion, die auf Knopfdruck einem Array "europaeischeLaender" die Werte "Deutschland", "Spanien" und "Frankreich" hinzufügt
  • Baue in das o.g. Array ein Objekt "staedte" ein und füge diesem Objekt die Eigenschaften "name", "einwohnerzahl" und "land" sowie passende Werte hinzu
  • Gib auf Knopfdruck einen der Werte aus dem Array und einen der Werte aus dem Objekt aus.

Lösungen

4-unterricht.html