4D v16

Generisches Programmieren (ohne Zeiger)

Home

 
4D v16
Generisches Programmieren (ohne Zeiger)

Generisches Programmieren (ohne Zeiger)    


 

 

Hier sehen Sie, wie Sie Methoden aufrufen und Parameter verwenden. Mehr zu Parametern vom Typ Zeiger im nächsten Kapitel.

Ziel der generischen Programmierung ist, die Entwicklung zu optimieren und Wartung und Übertragbarkeit zu vereinfachen.

In der Datenbankmethode On Startup haben wir bereits Aufrufen einer Methode verwendet. Wir haben die Methode Navigator aufgerufen.

In den ersten Programmierschritten haben wir Schaltflächen konfiguriert, um eine bestimmte Seite im Formular aufzurufen.

Das wollen wir jetzt optimieren, so dass es nur eine Methode für alle Steuerungsschaltflächen gibt (All, Query, Order by, usw.).

  • Öffnen Sie den Explorer
  • Legen Sie eine neue Methode an
  • Eine Projektmethode mit Namen Navigator Functions

Sie empfängt 2 Parameter:

  •  Der erste bezieht sich auf die Aktion, die als Text ausgeführt werden soll (Suchen, Sortieren, etc.)
  •  Der zweite entspricht der Seite, wo die Klicks passieren (1, 2, 3 usw.)

Wir rufen diese Methode wie folgt auf:

In einer Schaltfläche rufen wir Navigator Functions auf und übergeben

  • Den Text zur Aktion, die wir ausführen wollen
  • Und hier als 2. Parameter die betreffende Seite

Navigator Functions("All";FORM Get current page)
Wir wollen die Funktionen zur Steuerung für "All" verwenden und die Seite als 2. Parameter übergeben.

Es gibt zwei Wege, um die Parameter der Methode Navigator Functions zu typisieren:

  • Der 1. Parameter ist ein Text: C_TEXT($1)
  • Der 2. eine Lange Ganzzahl: C_LONGINT($2)

Sie sehen, dass wir die Syntax $1, $2, ... $n verwenden, um jeden Parameter zu finden.

Um Ihre Methode leicht lesbar zu machen, empfehlen wir für Variablen explizite Namen, denen Sie den Wert der empfangenen Parameter zuweisen. Schreiben Sie also:

 C_TEXT($1;$Action)

da wir in einer Compiler Direktive C_TEXT mehrere Variablen deklarieren können.

Hier die 2. Variable für die Seitennummer:

 C_LONGINT($2;$PageNum)

für den Wert von $1 in $Action und den Wert von $2 in $PageNumber schreiben Sie:

 $Action:=$1
 $PageNumber:=$2

Die restliche Methode ist eine Anpassung an das, was wir schon früher als Code angelegt haben; wir müssen nur die Aktion an die Anfrage anpassen und sie gemäß der Seite, also der gewählten Tabelle konfigurieren:

Wir verwenden:

  • Ein Case of

:($Action="All")

  • Hier finden wir den Code der Schaltfläche "All" wieder
  • Schneiden Sie ihn aus
  • Und passen ihn in der Methode an

Was passiert mit der Information, die ersetzt werden soll?

  • Die Funktion FORM Get current page wird nicht mehr benötigt, da sie von der aufrufenden Methode gesendet wird. Wir ersetzen sie durch $PageNumber
  • Im Moment müssen wir den Rest nicht verändern.

Wenn wir zu den Zeigern kommen, ersetzen wir das hier mit einer generischen Methode.

Wir können dasselbe mit der Schaltfläche Query ausführen.

  • Zum Kopieren ziehen wir den Code mit gedrückter ALT-Taste
  • Dann haben wir eine Aktion "Alle" und eine Aktion "Query"
  • Wir kopieren den Code von der Schaltfläche "All"
  • Setzen ihn in die Schaltfläche "Query"
  • Ersetzen die Aktion hier
  • Kopieren den Code von der Schaltfläche "Query"
  • Und gehen zur Methode Navigator Functions zurück

und, wie zuvor, ersetzen wir FORM Get current page durch die empfangene Variable.

Wir setzen einen Unterbrechungspunkt in der Methode der All-Schaltfläche und prüfen, ob wir beim Ausführen des Formulars zu der neu erstellten Methode gehen.

Klicken wir auf "All", sehen wir die Methode in der Ausführung, uns interessiert aber speziell das Ablaufen der Methoden. In der Aufrufabfolge des Debuggers ist:

  • Die zuletzt aufgerufene Methode ganz oben
  • Die vorige unten

Bei Doppelklick auf eine Methode erscheint deren Code. Bei Klick auf das kleine Dreieck sehen wir, dass die Methode Navigator_Functions aufgerufen wurde (mit den Parametern "All", FORM Get current page).

Die Methode wurde empfangen. Sie hat die Parameter: $1 = "All", $2 = Seitennummer -- hier wird Seite 1 empfangen.

Als nächstes kommt $Action is "All", wir gelangen also zu diesem Teil
Dann $PageNumber ist 1, also verwenden wir ALL RECORDS in der Tabelle Interventions, um die Anzahl der betroffenen Datensätze zu setzen.

Wir entfernen dann den Unterbrechungspunkt und führen die Methode aus:

Klicken Sie auf Technician und suchen z.B. nach Namen, die "bon" enthalten, erscheint BONAPARTE. Klicken Sie auf All, sehen Sie, dass die Methode korrekt arbeitet.

Diese Übungen zeigen einen möglichen Weg, Operationen auszuführen.

Je nach Ihren eigenen Gewohnheiten bzw. den Entwicklungsstandards in Ihrem Unternehmen können Sie andere Wege wählen zum Organisieren von Abläufen, für die Namensgebung bei Feldern und Variablen, die Reihenfolge beim Setzen von Parametern, etc.
Wenn Sie einen anderen Weg passender finden, probieren Sie diesen und vergleichen dann die Vor- und Nachteile. So können Sie eigene Erfahrungen sammeln.

Eine Methode kann bis zu 32 Parameter empfangen (von $1 bis $32). In der Regel verwenden Sie jedoch nicht mehr als 7 oder 8 Parameter.

Machen Sie großzügig Gebrauch von generischer Programmierung.

Durch generische Programmierung können Sie den Umfang Ihres Code verringern, da Sie komplette Funktionsabläufe in derselben Methode bündeln, wo Sie mehrere Parameter übergeben.
Zum Erstellen generischer Programmierung hier noch ein paar Hinweise:

  • Sobald Sie mehrere Zeilen Code schreiben, die ganz ähnlich wie bereits geschriebene sind, gibt es dafür gewiss eine generische Lösung.
  • (Später) Wenn Sie unschlüssig sind, eine generische Methode zu schreiben: Tun Sie es und aller Wahrscheinlichkeit nach werden Sie es nicht bereuen!
  • Nicht alles kann generisch sein. Manchmal kann der Versuch, etwas zu generisch zu machen, die Produktivität herabsetzen, wie z.B. nicht leicht lesbarer Code, schwierige Wartung, mehr Speicherbedarf, längere Prozesszeit, etc.

 
 

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Generisches Programmieren (ohne Zeiger)

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

Self-Training ( 4D v16)