Lernressourcen Modularisierung – digibasics
Zum Hauptinhalt springen
Version 1.0
Prototyp zur Erprobung

Lernressourcen Modularisierung

Programmkonstrukte

Beim Programmieren gibt es zentrale Programmkonstrukte. Diese Konzepte gibt es in praktisch jeder Programmiersprache, sie sind nur nicht immer gleich benannt und umgesetzt. Im Folgenden werden vier essenzielle Programmkonstrukte vorgestellt, die auch im Lehrplan 21 aufgegriffen werden.

Schleifen

Schleifen sind im Grunde genommen Wiederholungen. Solche Wiederholungen begegnen uns im Alltag immer wieder. Angenommen, das Kochen müsste als Programm beschrieben werden, dann könnte der Pseudocode für das Schneiden der Kochzutaten so aussehen:

Nimm das Messer in deine Hand. Bewege das Messer, bis du das Objekt, das geschnitten werden soll, berührst.
Drücke das Messer nach unten und bewege es dabei abwechselnd nach vorne und nach hinten. 
Hebe das Messer nach oben. 
Bewege das Messer einen Zentimeter nach links. 
Bewege das Messer einen Zentimeter in Richtung des Objekts. 
Drücke das Messer nach unten und bewege es dabei abwechselnd nach vorne und nach hinten…

Dabei werden einige Schritte mehrfach und in der gleichen Reihenfolge ausgeführt. Statt diese Schritte x-mal aufzuschreiben, könnte man angeben wie oft diese wiederholt werden sollen:

Wiederhole die folgenden Schritte zehn Mal: 
Drücke das Messer nach unten und bewege es dabei abwechselnd nach vorne und nach hinten. 
Hebe das Messer nach oben. 
Bewege das Messer einen Zentimeter nach links.

So spart man sich eine Menge Schreibarbeit und deswegen werden Schleifen auch häufig in Programmiercode genutzt. Natürlich könnte man die Wiederholung auch 100 Mal, 1000 Mal oder unendlich lange ausführen lassen. Aber wird so jedes Objekt korrekt geschnitten? Vermutlich nicht. Hier kommt ein anderes, zentrales Programmierkonstrukt Spiel: die Fallunterscheidung (auch Bedingung oder Verzweigung genannt).

Fallunterscheidungen

Fallunterscheidungen sind vereinfacht gesagt Fragen, die mit ja oder nein beantwortet werden können. Im Pseudocode oben gibt es bereits eine Fallunterscheidung: «Bewege das Messer, bis du das Objekt, das geschnitten werden soll, berührst.»

Der Koch würde sich immer wieder fragen «Berühre ich schon das Objekt?» und diese Frage mit ja oder nein beantworten. Solange das Objekt nicht berührt wird, bewegt er das Messer näher zum Objekt. Sobald er das Objekt berührt, hält er an. Es gibt also zwei mögliche Handlungen, je nachdem, ob die Bedingung erfüllt ist oder nicht. Deswegen heissen Fallunterscheidungen auch Verzweigungen.

Für die Schneidebewegung kann also eine Bedingung gestellt werden:

Wiederhole die folgenden Schritte, bis du beim Herunterdrücken das Objekt nicht mehr berührst: 
Bewege das Messer einen Zentimeter in Richtung des Objekts. 
Drücke das Messer nach unten und bewege es abwechselnd nach vorne und nach hinten. 
Hebe das Messer nach oben.

Jetzt muss der Koch nicht mehr x-mal das Nichts zerschneiden oder mit einer halb geschnittenen Karotte dastehen. Er schneidet das Objekt bis zum Ende.

Variablen

Eine Variable ist zum Beispiel eine definierte Zahl, die verändert werden kann. Das Geld in deinem Porte­mon­naie könnte man zum Beispiel als Variable darstellen. Vielleicht hast du darin 50 Franken. In vielen Programmiersprachen würde man in dem Fall etwas wie «Geld_in_Portemonnaie = 50» schreiben. Das Setzen dieses Ausgangswertes nennt man «Initialisierung». Bei der Initialisierung wird der Variable ein Anfangswert zugewiesen.

Eine Variable kann im Programm auch verändert werden. Wenn man 10 Franken mehr ins Portemonnaie steckt, hat man nachher das ursprüngliche Geld plus 10 Franken. In einer Programmiersprache könnte das so aussehen:

Geld_in_Portemonnaie = Geld_in_Portemonnaie + 10

Das Programm rechnet also 50 + 10 und weist diesen Wert der Variable Geld_im_Portemonnaie zu.

Variablen kann man in der Informatik für verschiedenste Dinge brauchen. Besonders spannend für Schüler:innen sind Variablen in Spielen, in denen zum Beispiel Punkte gezählt werden. Punkte sind ein typisches Beispiel für eine Variable, genauso wie die Anzahl Leben oder das aktuelle Level.

Funktionen und Parameter

Stell dir vor, du bist gerade dabei, einen Küchenroboter zu programmieren. Gerade hast du ihn programmiert, etwas zu schneiden – ein Vorgang, der aus mehreren Einzelschritten besteht. Jetzt könntest du diese Befehlszeilen immer wieder kopieren und an verschiedenen Stellen in deinem Programm einsetzen. Das braucht aber viel Platz und macht auch den Code schnell unübersichtlich. Wäre es nicht praktisch, wenn du dem Roboter einfach den Befehl «schneiden» geben könntest und er dann alle erforderlichen Einzelschritte ausführt?

Genau das macht eine Funktion. Eine Funktion ist ein Unterprogramm, mit dem ein oder mehrere Befehle gebündelt angewiesen werden können. Fürs Kochen könnte es zum Beispiel die Funktion «schneiden» geben, die die einzelnen Bewegungen des Messers umfasst. Vielleicht hat der Küchenroboter zudem Funktionen wie «braten», «kochen» oder «würzen».

Einem Koch könnte man sagen: «Schneide mal drei Karotten.» Geht das bei einem Roboter oder einem Programm auch? Ja. Man kann eine Funktion definieren, die mehrfach ausgeführt werden kann und dabei bestimmte Objekte benutzt. Das ist in diesem Fall der Unterschied zu einer Schleife. Beim Kochroboter könnte man den Pseudocode von oben nehmen und eine Funktion daraus bauen:

schneide (Anzahl Wiederholungen, Objekt)

In dieser Funktion «schneide (Anzahl Wiederholungen, Objekt)» könnte man die folgenden Befehle bündeln:

Wiederhole das Folgende (Anzahl Wiederholungen) mal:
Nimm das (Objekt) und wiederhole die folgenden Schritte, bis du beim Herunterdrücken das Objekt nicht mehr berührst:
Drücke das Messer nach unten und bewege es abwechselnd nach vorne und nach hinten.
Hebe das Messer nach oben. 
Bewege das Messer einen Zentimeter nach links.

Jetzt könnte diese Funktion aufgerufen werden, indem man hinzufügt, was wie oft geschnitten werden soll: «schneide(3, Karotte)». In dem Fall würde der Roboter drei Karotten zerschneiden.

«Anzahl_Wiederholungen» und «Objekt» nennt man Parameter. Ein Parameter ist eine Art Platzhalter, den man einer Funktion übermitteln kann. Sobald man die Funktion aufruft, kann man per Parameter festlegen was die Funktion tun soll. Zum Beispiel genau drei Karotten zerschneiden. Das praktische an Funktionen ist, dass man diese nun mit anderen Parametern ausführen kann. Andere Aufrufe der gleichen Funktion könnten beispielsweise sein:

schneide(2, Zucchetti)
schneide(4, Tomaten)
schneide(3, Peperoni)
schneide(1, Aubergine)

Und fertig geschnibbelt ist das Ratatouille!

Praktische Aufgabe

Auf der Webseite der PH Zürich findest du eine Einleitung zum Programmieren mit Scratch. Nutze Scratch, um die oben genannten Programmkonstrukte auszuprobieren.