Ich habe vor kurzem begonnen, an der Entwicklung von in C geschriebenen APIs zu arbeiten. Ich sehe einige Unterprogramme, die 8(Acht) Parameter erwarten, und für mich sieht es hässlich und umständlich aus, 8 Parameter zu übergeben, während ich dieses bestimmte Unterprogramm aufrufe. Ich habe mich gefragt, ob es nicht eine akzeptablere und sauberere Methode geben könnte.
Antworten
Zu viele Anzeigen?Wenn sich mehrere Argumente logisch zusammenfassen lassen, können Sie eine Struktur erstellen, die sie enthält, und diese Struktur einfach als Argument übergeben. Zum Beispiel anstatt zwei Koordinatenwerte zu übergeben x et y könnten Sie eine POINT
stattdessen eine Struktur.
Aber wenn eine solche Gruppierung nicht anwendbar ist, dann sollte jede Anzahl von Argumenten in Ordnung sein, wenn Sie sie wirklich brauchen, obwohl es ein Zeichen dafür sein könnte, dass Ihre Funktion ein wenig zu viel tut und dass Sie die Arbeit auf mehrere, aber kleinere Funktionen verteilen könnten.
Eine große Anzahl von Argumenten in einem Funktionsaufruf zeigt in der Regel ein Designproblem auf. Es gibt Möglichkeiten, die Anzahl der Parameter zu reduzieren, z.B. durch die Erstellung von Strukturen, die anstelle von einzelnen Variablen übergeben werden, oder durch globale Variablen. Ich würde empfehlen, beides NICHT zu tun und sich um das Design zu kümmern. Es gibt keine schnelle oder einfache Lösung, aber die Leute, die den Code warten müssen, werden Ihnen dafür danken.
Ja, 8 ist mit Sicherheit zu viel.
Hier ein paar Begriffe aus der Softwaretechnik der alten Schule für Sie. Kohäsion und Kopplung. Kohäsion ist, wie gut ein Unterprogramm allein zusammenhält, und Kupplung ist, wie sauber die Schnittstellen zwischen Ihren Routinen sind (oder wie autark Ihre Routinen sind).
Bei Kupplungen gilt im Allgemeinen: je lockerer, desto besser. Eine Kopplung nur über Parameter ("Datenkopplung") ist eine gute niedrige Kopplung, während die Verwendung globaler Variablen ("allgemeine Kopplung") eine sehr hohe Kopplung bedeutet. Bei einer hohen Anzahl von Parametern hat man in der Regel versucht, die gemeinsame Kopplung mit einem dünnen Furnier aus Datenkopplung zu verbergen. Das ist schlechtes Design mit einem Anstrich.
Bei der Kohäsion gilt: je höher (kohäsiver), desto besser. Jede Routine, die acht verschiedene Dinge modifiziert, leidet mit ziemlicher Sicherheit unter geringer Kohäsion. Ich müsste den Code sehen, um sicher zu sein, aber ich würde darauf wetten, dass es sehr schwierig wäre, in einem kurzen Satz klar zu erklären, was diese Routine tut. Aus dem Stegreif würde ich vermuten, dass sie zeitlich kohäsiv ist (nur eine Reihe von Dingen, die ungefähr zur gleichen Zeit erledigt werden müssen).
8 könnte eine richtige Zahl sein. oder es könnte sein, dass viele dieser 8 sollten alle gehören zu einer richtigen Klasse als Mitglieder, dann könnten Sie eine einzelne Instanz der Klasse übergeben... schwer zu sagen, nur durch diese Art von High-Level-Diskussion.
edit: in c - Klassen wären in diesem Fall ähnlich zu Strukturen.
- See previous answers
- Weitere Antworten anzeigen