Matura: Systemtechnik

JavaScript/ECMA-Script

Grundlegendes

Historie

Elemenare Konstrukte / Syntax

Keine Datentypen - Auswirkung auf die Programmierung?

Funktionen

function foo ([parameter1[, parameter2[, ]]]) { 
    /* tue etwas, optional Rückgabe mit return */ 
}
var func = function ([parameter1[, parameter2[, ]]]) { 
    /* tue etwas, optional Rückgabe mit return */ 
};
tuwas(3);       // Funktioniert
machwas(5);     // Error: machwas ist keine Funktion

function tuwas(q) {
   return q*3;
}

var machwas = function(q) {
   return q*5;
}

machwas(17);    // Hier funktioniert es.
function baueNachricht(info, ...teile) {
   return info + ": " + teile.join(', ');
}

alert(baueNachricht("Finde die Lösung in", "SelfHTML", "MDN", "Wikipedia"));
// Ergibt: Finde die Lösung in: SelfHTML, MDN, Wikipedia

Objekte

Vererbung

this-Parameter

Google-V8-Engine

Interpreter / Compiler

https://web.stanford.edu/class/cs98si/slides/overview.html

Fehlerbehandlung

//  Registriere eine Fehlerbehandlung
window.addEventListener("error", fehlerbehandlung);

function fehlerbehandlung (errorEvent) {
    var fehler = "Fehlermeldung:\n" + errorEvent.message + "\n" + errorEvent.filename + "\n" + errorEvent.lineno;
    zeigeFehler(fehler);
    errorEvent.preventDefault();
}

function zeigeFehler(meldung) {
    alert(meldung);
}

//  Löse einen Laufzeitfehler aus, in dem eine undefinierte Funktion aufgerufen wird:
nichtDa();
window.onerror = fehlerbehandlung;

function fehlerbehandlung (nachricht, datei, zeile) {
    var fehler = "Fehlermeldung:\n" + nachricht + "\n" + datei + "\n" + zeile;
    zeigeFehler(fehler);
    return true;
}

function zeigeFehler (meldung) {
    alert(meldung);
}
function zeigeErgebnis (zaehler, ergebnis) {
    alert("Nach " + (Zaehler) + " Durchläufen existierte x.\nDie Zahl x ist " + ergebnis + ".")
}

function teste_x (zaehler) {
    try {
        if (x == 2) {
            throw "richtig";
        } else if (x == 3) {
            throw "falsch";
        }
    } catch (e) {
        if (e == "richtig") {
            zeigeErgebnis(zaehler, e);
            return;
        } else if (e == "falsch") {
            zeigeErgebnis(zaehler, e);
            return;
        }
    } finally {
        zaehler++;
    }

    setTimeout("teste_x(" + zaehler + ")", 30);

}

teste_x(0);

Detailierte Beschreibung

Debugger

ECS5/ECS6/ECS7 (Features wie: Pipelining, Destructuring, Arrow-Functions, Spread-Operator, Transpiler wie Babel)

Pipelining

function add(x) {
	return x + 10;
}

function subtract(x) {
	return x - 5;
}

// Without pipeline operator
let val1 = add(subtract(add(subtract(10))));
console.log(val1); // output: 20

// Using pipeline operator
let val2 = 10 |> subtract |> add |> subtract |> add;
console.log(val2); // output: 20

Destructuring

let a, b, rest;
[a, b] = [10, 20];

console.log(a); // expected output: 10

console.log(b);
// expected output: 20

[a, b, ...rest] = [10, 20, 30, 40, 50];

console.log(rest);
// expected output: Array [30,40,50]

Arrow-Functions


// before
hello = function() {
  return "Hello World!";
}

// with arrow function
hello = (val) => {
  return "Hello " + val;
}

Spread-Operator

function sum(x, y, z) {
  return x + y + z;
}

const numbers = [1, 2, 3];

console.log(sum(...numbers));
// expected output: 6

console.log(sum.apply(null, numbers));
// expected output: 6

Transpiler wie Babel

Code --(parse)-->AST--(transform)-->AST--(generate)-->Code

Bedeutung eines Editors bei der Programmierung

Funktionales Programmierparadigma - Idee, Konzeption, Auswirkungen auf die Programmierung

Funktionales Paradigma:

Prozedurales Paradigma:

Objektorientiertes Paradigma: