![]() |
Offenes Array oder Set als Parameter
Hallo,
mein Programm scannt Seiten ein und filtert die leeren Seiten aus. Das erledige ich über das Zählen der Pixel <> weiß und es funktioniert ziemlich gut. Leider gibt es (zumeist) Behörden, die ärgern mich damit, dass sie auch leere Seite mit Strich- oder Barcodes versehen. Diese sind aber glücklicher Weise immer an denselben Stellen. Mein Plan ist nun, vor dem Zählen der farbigen Pixel einfach ein bzw. mehrere weiße Vierecke über diese Codes zu legen. Dazu muss ich aber meiner Funktion sagen, an welcher bzw. welchen Stellen das geschehen soll. Und da ist mein Knoten in der Rübe. Wie übergebe ich der Funktion 1, 2 oder mehr Records aus 4 Integer? Und - falls Set das beste wäre - wie prüft man das durch (beim Array ist mir das klar
Delphi-Quellcode:
)?
For I:= Low(Arr) To High(Arr)
Ich bin natürlich bereit, mich einzulesen, wenn mir jemand eine Fundstelle für einen Einstieg zur Suche liefern kann. Gruß, Alex |
AW: Offenes Array oder Set als Parameter
Ich verstehe nicht wo hier auf einmal ein "Set" ins Spiel kommt. Ein Set ist eine Menge von mehreren Enumerationstypen von denen jedes Vorkommen ein- oder keinmal enthalten sein darf.
Beispiel:
Delphi-Quellcode:
Du sprichst selber von "1, 2 oder mehr Records". Das ist ganz klar ein Array (oder eine Liste oder ein anderer Mengentyp).
type
TGeschmack = (sauer, süß, bitter, salzig); TGeschmäcker = set of TGeschmack; var chipsGeschmack: TGeschmäcker; tofuGeschmack: TGeschmäcker; zitronenGeschmack: TGeschmäcker; begin chipsGeschmack := [salzig]; tofuGeschmack := []; zitronenGeschmack := [süß, bitter]; end;
Delphi-Quellcode:
procedure bearbeiteKram(bildDaten: TPicture; außerDiesenBereichen: array of TRect);
begin // end; Oder ich habe wieder mal etwas völlig falsch verstanden... |
AW: Offenes Array oder Set als Parameter
Übergebe die zusätzlichen Argumente in einer Klasse:
Delphi-Quellcode:
Das macht mehr Sinn im Hinblick auf zukünftige Erweiterungen. Der Methodenaufruf bleibt immer gleich und trotzdem kannst du intern alles ändern.
TProcessArgs = class
... end; procedure Process( aFoo: TFoo; aProcessArgs: TProcessArgs ); begin // end; |
AW: Offenes Array oder Set als Parameter
Danke erstmal für die Antworten und Ideen!
Zitat:
Ich stelle mir das in etwa so vor (=Brainstorming, kein Code) und komme deshalb auf Set:
Delphi-Quellcode:
Ein Array wäre für mich denkbar (sonst stünde es nicht in der Überschrift), aber vermutlich eher die Notlösung. Denn ich müsste die Länge festlegen, es mit Daten bestücken etc. Ich fände das als Konstante besser lesbar. Mir geht es aber eben auch hauptsächlich darum, es von vorn herein erweiterbar zu gestalten.
Const
DRV : TRect = ( Left:0; Top:0; Right:20; Bottom:20); Knappschaft : TRect = ( Left:20; Top:20; Right:40; Bottom:40); // usw. die Positionen bleiben immer gleich Type TBlankPos = (DRV, Knappschaft, ...); TBlank = Set Of TBlankPos; Function IsEmpty(Image: TBitmap; BarCodes: TBlank): Boolean; // Kopf sehr verkürzt Begin // mache etwas ... End; Procedure TForm1.Bildkommtan(Image: TBitmap); Begin If IsEmpty(Image, [DRV]) Then ShowMessage('Leeres Bild') Else ShowMessage('Bild mit Inhalt'); End; |
AW: Offenes Array oder Set als Parameter
Erweiterbar ist genau das was Rufo vorgeschlagen hat (wobei ich einen Record als typisches POD und keine Klasse genommen hätte)*. Packe die Daten die deine Methode zum Arbeiten braucht in eine Struktur und übergib sie ihr. Braucht die Methode eines Tages mehr Daten, passt du nur diese Klasse/Record an und nicht alle hundert Aufrufe im Programm.
Das mit dem Set habe ich jetzt war verstanden, finde es trotzdem nicht gut. Jedes mal wenn etwas neues hinzu kommt musst du deinen TBlankPos-Typ anfassen. Packst du diese Absolutwerte für ein TRect wirklich direkt in den Quellcode? Ich finde, dadurch gewinnt man nicht viel. Wenn du es zur Laufzeit machst kann dein Benutzer das z.B. auch aus einer selbst anpassbaren Datei laden und muss dich nicht jedes mal nerven wenn er es ändern will. * Irgendeine Berühmtheit hat mal gesagt zwei Methodenparameter gehen grade noch, drei seien zu viel (Ich glaube es war Martin Fowler). |
AW: Offenes Array oder Set als Parameter
Zitat:
Zitat:
|
AW: Offenes Array oder Set als Parameter
Ich bekomme immer wieder bei Refactoring das Grausen, wenn ich functions/procedures mit 15-20 Parametern sehe und diese in den Sourcen eines Projektes auch hunderte Male aufgerufen werden. Das ist eine Orgie, wenn mal ein Parameter geändert/zugefügt/gelöscht wird ...
Ich bevorzuge auch records als Parameter, wenn es mehr als drei Parameter werden sollen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz