AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es keine generischen Proceduren?

Ein Thema von himitsu · begonnen am 16. Jun 2010 · letzter Beitrag vom 14. Jan 2025
Antwort Antwort
freimatz

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Gibt es keine generischen Proceduren?

  Alt 10. Jan 2025, 15:51
Wenn sowas geht, gibt es wirklich keinen sinnvollen Grund globale generische Procedure und Funktionen zu verbieten:
Zu verbieten nicht, aber auch keinen guten den Aufwand zu treiben.
Meiner Meinung nach sollte man generell globale generische Procedure und Funktionen vermeiden.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#2

AW: Gibt es keine generischen Proceduren?

  Alt 10. Jan 2025, 23:50
Wenn man oft genug überladene Funktionen wie IfThen() für alle möglichen Typen implementiert, sieht man das vieleicht anders.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#3

AW: Gibt es keine generischen Proceduren?

  Alt 11. Jan 2025, 07:10
Dafür ist es aber nicht nötig, lose umherschwirrende Funktionen zu implementieren. Man kann dafür auch Sammelklassen mit genetischen Klassenmethoden erstellen. Die kann man auch überall nutzen, aber man sieht, wo die herkommen. Dafür könnte man auch den Unitnamen vorstellen, aber das wäre dann optional, was für ein Team nicht optimal wäre.

So habe ich dann TStringTools, TMathTools, usw. in entsprechenden Units Lib.Tools.MathTools.pas usw. im Ordner lib\tools, so dass man sich intuitiv zurechtfindet.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#4

AW: Gibt es keine generischen Proceduren?

  Alt 11. Jan 2025, 11:05
Ich habe mich schon oft gefragt, ob es möglich ist, eine generische Funktion zu schreiben, ob ein bestimmtes Element in einer Aufzählung vorhanden ist.

EDIT: Das war jetzt etwas schlampig ins Handy geschrieben. Ich mache selten Enumerationen, ohne auch ein Set dafür zu deklarieren. Ich meinte also natürlich eine generische Funktion, um das Vorhandensein in einem Set zu prüfen.

Geändert von Benmik (11. Jan 2025 um 14:56 Uhr)
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
296 Beiträge
 
Delphi 12 Athens
 
#5

AW: Gibt es keine generischen Proceduren?

  Alt 11. Jan 2025, 17:48
Ich habe mich schon oft gefragt, ob es möglich ist, eine generische Funktion zu schreiben, ob ein bestimmtes Element in einer Aufzählung vorhanden ist.

EDIT: Das war jetzt etwas schlampig ins Handy geschrieben. Ich mache selten Enumerationen, ohne auch ein Set dafür zu deklarieren. Ich meinte also natürlich eine generische Funktion, um das Vorhandensein in einem Set zu prüfen.
Wozu so eine Funktion?
Geht doch auch so mit einem kurzen Einzeiler.
Wüsste nicht was man da für eine Funktion bauen könnte die das vereinfacht oder Mehrwert bietet.
Delphi-Quellcode:
lEnum := Enum1;
lSet := [Enum1,Enum2];
if lEnum in lSet then

Oder

if Enum1 in [Enum1,Enum2] then

oder auch

if Enum1 in [Low(TMyEnum)..High(TMyEnum)] then
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#6

AW: Gibt es keine generischen Proceduren?

  Alt 11. Jan 2025, 22:27
Natürlich geht das. Aber es gibt auch so etwas

If (lSet1 * [Enum1, Enum2] = []) and (lSet2 * [Enum1, Enum3] = []) then begin

und Ähnliches und das hätte ich gern kürzer/übersichtlicher/eleganter/sprechender.
Aber offensichtlich geht das nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#7

AW: Gibt es keine generischen Proceduren?

  Alt 11. Jan 2025, 22:57
Generisch mit Set geht erstmal nicht, da es keinen generischen Constraint dafür gibt. Folglich kann man auch die Operatoren nicht anwenden.
(Vielleicht könnte man mit RTTI und ein paar bösen Hacks und dem Glauben an die Unfehlbarkeit des Entwicklers was hinkriegen, aber das gehört hier nicht hin)

Du kannst aber zu einem Set einen Helper schreiben - muss halt wegen obiger Einschränkung für jedes Set separat gemacht werden:
Delphi-Quellcode:
type
  TMyEnum = (Enum1, Enum2, Enum3, Enum4);
  TMyEnums = set of TMyEnum;
  TMyEnumsHelper = record helper for TMyEnums
    function DoesNotContain(const Value: TMyEnums): Boolean;
  end;

function TMyEnumsHelper.DoesNotContain(const Value: TMyEnums): Boolean;
begin
  Result := (Self * Value) = [];
end;
Dein Beispiel würde dann so geschrieben:
Delphi-Quellcode:
If lSet1.DoesNotContain([Enum1, Enum2]) and lSet2.DoesNotContain([Enum1, Enum3]) then begin
 
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
schobihh

Registriert seit: 10. Sep 2024
1 Beiträge
 
#8

AW: Gibt es keine generischen Proceduren?

  Alt 12. Jan 2025, 09:37
Natürlich geht das. Aber es gibt auch so etwas

If (lSet1 * [Enum1, Enum2] = []) and (lSet2 * [Enum1, Enum3] = []) then begin

und Ähnliches und das hätte ich gern kürzer/übersichtlicher/eleganter/sprechender.
Aber offensichtlich geht das nicht.
wenn das die Probleme sind, die Delphi hat, dann hat Embarcadero alles richtig gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#9

AW: Gibt es keine generischen Proceduren?

  Alt 14. Jan 2025, 08:22
Es wurden mehrmals Lösungen vorgeschlagen, aber Emba hat abgelehnt.

z.B.
Ja, selbst wenn Generics nur mit Klassen/Records gehen, dann gibt es dennoch keinen Grund eine einzelne Methode nicht "intern" in eine Dummy-Klasse zu verpacken. (compilermagic und so)

ODER,
würde Emba sich nicht weigern wenigstens eine minimalste Unterstützung für Makros bereitzustellen, dann könnten wir das auch selbst machen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 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