Tutorium 3 – Programmieren mit Konstanten und Funktionen
Nach der Bearbeitung dieses Arbeitsblattes haben Sie gelernt
- Konstanten zu definieren
- Magic Literals zu vermeiden
- Funktionen zu definieren
- bestimmte Arten der Wiederholung zu vermeiden
Die folgende Checkliste soll Ihnen beim Programmieren von Funktionen und Konstanten helfen. Anfangs kann es sich lohnen, diese für jede Funktion bzw. Konstante durchzugehen und sicherzustellen, dass alle Vorraussetzungen erfüllt sind:
- Konstantendefinitionen haben die Form:
(define CONSTANTNAME CONSTANTExpression)
Der Konstantenname besteht dabei nur aus Großbuchstaben, Bindestrichen und Zahlen. Zum Beispiel
MY-CONSTANT-42
.- Funktionsdefinitionen haben die Form:
(define (FunctionName InputName1 InputName2 ...) BodyExpression)
Funktionsnamen bestehen dabei in der Regel nur aus Kleinbuchstaben, Bindestrichen und Zahlen. Zum Beispiel
create-rocket-scene-v5
.- Die Funktionsparameter werden in der Implementierung der Funktion verwendet.
- Die Zeilen sind nicht zu lang.
- Die Einrückung reflektiert die Struktur Ihres Programms.
- Ein Aufruf der Funktion mit geeigneten Argumenten im Interaktionsbereich ergibt das gewünschte Ergebnis.
Bearbeiten Sie die Aufgaben in kleinen Gruppen (2 - 3 Personen). Sie müssen nicht alle Aufgaben bearbeiten, aber:
Achten Sie selbständig darauf, die Lernziele zu erreichen!
Helfen Sie sich bei Bedarf gegenseitig oder fragen Sie Ihre Tutorin oder Ihren Tutor.
Technische Vorraussetzung für die Bearbeitung der Aufgaben ist, dass Sie Racket 6.2.1 installiert haben, als Sprache BSL (Anfänger) ausgewählt ist und die Teachpacks
2hdtp/image
und2htdp/universe
, am Anfang der Datei über(require 2htdp/image) (require 2htdp/universe)
importiert werden.
Bitte beachten Sie auch die Vorlesungshomepage
Viel Erfolg!
Das folgende Programm dient als Ausgangsbasis für einige Verbesserungen, welche wir in dieser Übung durchführen werden. Sie können es auch im Forum herunterladen.
(above/align "left"
(beside
(text "a. " 10 "black")
(rectangle (* 1.5 121) 15 "solid" "blue")
(text "121" 10 "black"))
(square 5 "solid" "transparent")
(beside
(text "b. " 10 "black")
(rectangle (* 1.5 32) 15 "solid" "blue")
(text "32" 10 "black"))
(square 5 "solid" "transparent")
(beside
(text "c. " 10 "black")
(rectangle (* 1.5 60) 15 "solid" "blue")
(text "60" 10 "black"))
(square 5 "solid" "transparent")
(beside
(text "d. " 10 "black")
(rectangle (* 1.5 43) 15 "solid" "blue")
(text "43" 10 "black")))
Refactoring – Magic Literals durch Konstanten ersetzen
- Markieren Sie alle magic literals.
- Was bedeuten die magic literals?
- Ersetzen Sie die magic literals durch geeignet definierte Konstanten.
Ein Beispiel: Die Zahl 10 taucht acht mal im Programm auf. An jeder dieser Stellen gibt sie die Schriftgröße des dargestellten Textes an. Um dies deutlich zu machen definieren wir
(define FONT-SIZE 10)
und ersetzen alle Vorkommen von 10
durch FONT-SIZE
.
Tipp: Denken Sie daran, dass es auch neben magic numbers noch magic strings, magic images etc. geben kann.
Refactoring – Funktionsdefinitionen
Das obige Programm enthält Wiederholungen. Manche Unterausdrücke wiederholen sich wörtlich, andere jeweils nur mit kleinen Variationen. In dieser Aufgabe üben Sie diese Wiederholungen zu vermeiden.
- Markieren Sie die Wiederholungen. Nutzen Sie dabei z.B. verschiedene Farben für die verschiedenen Wiederholungen, die Sie erkannt haben.
- Markieren Sie die Variationspunkte (die Unterschiede zwischen den verschiedenen Variationen einer Wiederholung).
- Pro Wiederholung: Programmieren Sie in DrRacket eine Funktion, welche für die markierten Unterausdrücke aus Teilaufgabe a. steht. Tipp: Die Funktion sollte einen Parameter für jeden Variationspunkt aus Teilaufgabe b. enthalten. Achten Sie auf geeignete Namen für die Funktion, sowie die Parameter. Zur Erinnerung: Wenn sich Ausdrücke gar nicht unterscheiden, müssen Sie als Konstante definiert werden.
- Ersetzen Sie alle Wiederholungen nun durch Funktionsaufrufe bzw. Konstanten.
Für Fortgeschrittene: Wie gehen Sie damit um, dass "121" und 121 verschiedene Literale sind?
Animationen
In dieser Aufgabe üben Sie die Verwendung von animate
, indem Sie das Balkendiagram animieren. Dabei sollen die Balken gleichmäßig wachsen – solange bis die gewünschte Balkenlänge erreicht ist (so ähnlich wie bei Wahlumfragen im Fernsehen).
Programmieren Sie eine Funktion create-chart-scene
, welche die aktuelle Zeit für die Balkenwerte verwendet – solange bis der eigentliche Balkenwert erreicht ist.
Tipp: Versuchen Sie die Funktionen aus der Aufgabe 2 zu verwenden.
Tipp: Da das Bild mit der Zeit seine Höhe ändert ist es sinnvoll es links unten ausgerichtet auf einer leeren Szene in geeigneter Größe zu platzieren.