Blöcke in Funktionen in JavaScript (Blöcke in Funktionen in JavaScript), Lektion, Seite 723602
https://www.purl.org/stefan_ram/pub/bloecke_funktionen_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
JavaScript-Kurs

Blöcke in Pfeilfunktionen in JavaScript 

Ein Aufruf der folgenden Funktion hat den Wert »3«. Man sagt auch, die Funktion ergebe den Wert »3« oder sie gebe »3« zurück.

Auswertung
()=> 3
function ()
Auswertung
( ()=> 3 )()
3

Solche Pfeilfunktionen  haben wir schon kennengelernt.

Hinter dem Pfeil kann an der Stelle des bisherigen Ausdrucks (wie »3«) nun auch ein Block  geschrieben werden.

Auswertung
( ()=>{ console.log( "abc" ); console.log( "def" ); } )()

abc

def

undefined

Bei der Anwendung der Funktion wird der Block dann ausgewertet.

So ist es möglich, bei der Anwendung einer Funktion eine Sequenz  auswerten zu lassen.

Auswertung
f = ()=>{ console.log( "abc" ); console.log( "def" ); }
function f()
Auswertung
f()

abc

def

undefined

Pfeilfunktionen, bei denen ein Block auf der rechten Seite des Pfeiles steht, nennen wir auch Blockfunktionen.

Ausgabe eines Liedtextes

Die Eingabe der folgenden Anweisung führt zur Ausgabe eines Kuckucksliedes.

Konsole

{ { console.log( "Auf einem Baum ein Kuckuck, -" );
{ console.log( "Sim sa la dim, bam ba," );
console.log( "Sa la du, sa la dim -" ); }
console.log( "Auf einem Baum ein Kuckuck sass." ); }

{ console.log( "Da kam ein junger Jaeger, -" );
{ console.log( "Sim sa la dim, bam ba," );
console.log( "Sa la du, sa la dim -" ); }
console.log( "Da kam ein junger Jaegersmann." ); }

{ console.log( "Der schoss den armen Kuckuck, -" );
{ console.log( "Sim sa la dim, bam ba," );
console.log( "Sa la du, sa la dim -" ); }
console.log( "Der schoss den armen Kuckuck tot." ); }}

Auf einem Baum ein Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Auf einem Baum ein Kuckuck sass.
Da kam ein junger Jaeger, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Da kam ein junger Jaegersmann.
Der schoss den armen Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Der schoss den armen Kuckuck tot.
undefined

Der Kehrreim führt dazu, daß im Quelltext (also in der Anweisung), eine größeres Stück immer wiederholt wird.

Stilregel Die Wiederholung größerer Programmteile gilt als schlechter Stil, weil sie die Wartbarkeit des Programms verschlechtert.

Wir können die Wiederholung eines größeren Programmteils nun vermeiden, indem wir eine Funktion zur Ausgabe des Kehrreims definieren.

Konsole

k = () =>{ console.log( "Sim sa la dim, bam ba," );
console.log( "Sa la du, sa la dim -" ); };

{ { console.log( "Auf einem Baum ein Kuckuck, -" );
k();
console.log( "Auf einem Baum ein Kuckuck sass." ); }

{ console.log( "Da kam ein junger Jaeger, -" );
k();
console.log( "Da kam ein junger Jaegersmann." ); }

{ console.log( "Der schoss den armen Kuckuck, -" );
k();
console.log( "Der schoss den armen Kuckuck tot." ); }}

Auf einem Baum ein Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Auf einem Baum ein Kuckuck sass.
Da kam ein junger Jaeger, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Da kam ein junger Jaegersmann.
Der schoss den armen Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Der schoss den armen Kuckuck tot.
undefined

Das Ergebnis von Blockfunktionen

Das Ergebnis der oben gezeigten Funktionen ist immer »undefined«, was man auch so beschreiben kann, daß sie keinen  Wert ergeben (wenn man den Wert »undefined« als eine Art von „Unwert“ interpretiert). Daher kann man die obigen Funktionen als Wirkfunktionen  beschreiben, ihr Sinn ist es nicht, einen bestimmten Wert zu ergeben, sondern eine bestimmte Wirkung zu haben (wie beispielsweise auch die vordefinierte Funktion »console.log«.

Übungsfragen

?   Übungsfrage

Was ist die Ausgabe der folgenden Sequenz?

Skript
beta = ()=> { console.log( "beta" ); };
main = ()=> { console.log( "alpha" ); };
main();

?   Übungsfrage

Was ist die Ausgabe der folgenden Sequenz?

Skript
beta = ()=> { console.log( "Hallo!" ); };
zeta = ()=> { beta(); beta(); };
main = ()=> { beta(); zeta(); };
main();

Übungsaufgaben

Zur Erleichterung der Bearbeitung können Sie an Stelle von »document.getElementById« auch weiterhin NAOTWO  zum Elementzugriff verwenden, oder erst zum Schluß – nachdem die Aufgabe gelöst ist – NAOTWO  durch den Einsatz von »document.getElementById« ersetzen.

Zur Erleichterung der Bearbeitung können Sie an Stelle von »addEventListener« auch weiterhin on-Attribute verwenden, also beispielsweise an Stelle von »span.addEventListener( "click", () => span.innerHTML = 1 );« in einem Skript-Element »onclick="span.innerHTML=1"« als Attribut des span-Elements.

Durch NAOTWO  (“named access on the window object ”, NAOTWO, sprich “now two ”) werden die im HTML-Quelltext mit »id=« festgelegten Elementkennungen, falls möglich, in JavaScript  als globale Namen zur Verfügung gestellt. (Siehe auch: https://www.w3.org/TR/html5/browsers.html#named-access-on-the-window-object).
Unter HTML-Quelltext  versteht man Text, der in HTML geschrieben wurde – also beispielsweise »id=« enthält. – Etwa im Gegensatz zu der von einem Browser angezeigten Webseite.

Zur Erleichterung der Bearbeitung können Sie bei Übungsaufgaben in den folgenden Lektionen an Stelle von polyglottem HTML  auch weiterhin SIL verwenden. Dabei kann vor den SIL-Code ein style-Element gesetzt werden und hinter den SIL-Code ein script-Element. Die drei leeren Zeilen in dem folgenden SIL-Dokument können jeweils mit CSS -Code, HTML-Code beziehungsweise JavaScript -Code befüllt werden.

/   Übungsaufgabe

Schreiben Sie eine Definition einer Wirkfunktion namens »helloWorld«, so daß die Auswertung des Aufrufausdrucks »helloWorld()« dann den Text »hello, world« ausgibt. Hierbei soll zur Ausgabe »console.log« verwendet werden.

/   Würfeln **

Hinweis für den Dozenten  ► Diese Aufgabe ist für einen normalen Kurs an dieser Stelle zu schwierig. Sie sollte vereinfacht oder weiter nach hinten bewegt werden.

Das folgende Programm stellt drei Seiten eines Würfels dar. Überarbeiten Sie dieses Programm so, daß nur noch eine  jener drei Würfelseiten dargestellt wird und beim jedem Anklicken der Webseite eine der drei Würfelseiten zufällig ausgewählt erscheint wird. Sie können die Webseite dann auch noch so überarbeiten, daß alle sechs übliche Würfelseiten (statt nur drei) verwendet werden.

Bei dieser Aufgabe dürfen alle  Teile des HTML-Dokumentes verändert werden.

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

p.die
{ display: inline-block;
background-color: gray;
height: 40px; width: 40px; }

span.f0
{ position: relative; top: 10px; left: 15px;
border-radius: 50%; display: inline-block;
width: 10px; height: 10px; background-color: black; }

span.f1
{ position: relative; top: 10px; left: 5px;
border-radius: 50%; display: inline-block;
width: 10px; height: 10px; background-color: black;
box-shadow: 20px 00px 0px Black; }

span.f2
{ position: relative; top: 0px; left: 5px;
border-radius: 50%; display: inline-block;
width: 10px; height: 10px; background-color: black;
box-shadow: 10px 10px 0px Black,
20px 20px 0px Black; }

</style></head><body>

<p class="die"><span class="f0"></span></p><p></p>
<p class="die"><span class="f1"></span></p><p></p>
<p class="die"><span class="f2"></span></p><p></p>

<pre><code><script>/*<![CDATA[*/

/* JavaScript hier einfuegen */

/*]]>*/</script></code></pre></body></html>

/   Umsetzung von Willenserklärungen

Erstellen Sie eine Webseite, die „Ich erkläre mich mit den Nutzungsbedingungen einverstanden: [Ja] [Nein].“ anzeigt. Dies soll durch ein form-Element mit zwei button-Elementen und eventuell weiteren Elementen realisiert werden. Die Details der Gestaltung (beispielsweise eine Aufteilung mehrere Zeilen) kann von Ihnen festgelegt werden.

Wenn eine der beiden Tastfläche „[Ja]“ oder „[Nein]“ angeklickt wurde, soll das Formular verschwinden.

Falls die Tastfläche „[Ja]“ angeklickt wurde, soll der Text „Die Lösung lautet: 37.“ angezeigt werden.

(Zwei ähnliche Aufgaben wurde früher schon einmal gestellt, aber damals noch ohne Formulare und dann ohne die Anforderung des Ausblendens des Formulars.)

/   Übersetzungsprogramm

Schreiben Sie ein Programm, das mit »window.prompt« ein englisches Wort einliest und dann dessen deutsche Übersetzung anzeigt. Es reicht hierbei aus, wenn das Programm die beiden Wörter “table ” („Tisch“) und “star ” („Stern“) übersetzen kann. Für andere Eingabe soll die Übersetzung lauten: „(unbekannt)“.

Zusatzaufgaben

/   Funktion deklarieren

Schreiben Sie das folgende Skript so um, daß sich wiederholende Anweisungen von einer Funktion ausgewertet werden, die dann wiederholt aufgerufen wird (bzw. aufgerufen werden). Das Umschreiben soll die Ausgabe des Skripts nicht verändern. Es sollte möglichst nur eine einzige  weitere Funktionsdefinition geschrieben werden.

Skript
console.log( "Tomaten" );
console.log( "Rotkohl Gruenkohl" );
console.log( "Gurken" );
console.log( "Tomaten" );
console.log( "Rotkohl Gruenkohl" );
console.log( "Spinat" );
console.log( "Tomaten" );
console.log( "Rotkohl Gruenkohl" );
console.log( "Kohlrabi" );
Ausgabe
Tomaten
Rotkohl Gruenkohl
Gurken
Tomaten
Rotkohl Gruenkohl
Spinat
Tomaten
Rotkohl Gruenkohl
Kohlrabi

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723602 stefan_ram:723602 Blöcke in Funktionen in JavaScript Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723602, slrprddef723602, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/bloecke_funktionen_javascript