AGB  ·  Datenschutz  ·  Impressum  







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

Wer macht den Free?

Ein Thema von Mavarik · begonnen am 11. Feb 2017 · letzter Beitrag vom 17. Feb 2017
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#11

AW: Wer macht den Free?

  Alt 12. Feb 2017, 19:11
Wegen genau dieser Problematik meide ich Funktionen, die Klasseninstanzen zurückgeben, welche erst innerhalb der Funktion erzeugt werden, wie der Teufel das Weihwasser. Etwas anders ist es bei Interfaces, da ist es dann eben ein TInterfacedObject, aber das muss den Aufrufer ja nicht interessieren. Außerdem schließt man somit die unnötige Verschwendung von Bits und Bytes () wie hier aus:
Delphi-Quellcode:
function TMyClass.GetNames: TStrings;
var
  List: TStringlist;
begin
  List := TStringlist.Create;
  //Liste beispielhaft befüllen
  List.Add('Heinz');
  List.Add('Hans');
  List.Add('August');
  Result := List;
end;

procedure TMyClass.VerarbeiteNames;
var
  i: integer;
begin
  for i := 0 to GetNames.Count - 1 do
    Stringverarbeitung(GetNames[i]);
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#12

AW: Wer macht den Free?

  Alt 13. Feb 2017, 10:41
Wegen genau dieser Problematik meide ich Funktionen, die Klasseninstanzen zurückgeben, welche erst innerhalb der Funktion erzeugt werden, wie der Teufel das Weihwasser.
Die Problematik ist ja nicht das Instanzieren innerhalb einer Funktion, sondern das Freigeben.

Gegen das Instanzieren innerhalb einer Funktion spricht überhaupt nichts, wenn es im Funktionsnamen ersichtlich ist. Ich verwende öfters Funktionen, die eine Instanz erzeugen. Kleines Beispiel: Eine Stringlist ist bei mir in den meisten Fällen sortiert und lässt keine Duplikate zu. Ist normalerweise ein Dreizeiler.

Delphi-Quellcode:
sl:=TStringlist.create;
sl.sorted := True;
sl.duplicates := dupignore;
Dafür gibt es bei mir folgende Funktion (so ähnlich)

Delphi-Quellcode:
Function TStringlistSortedDupIgnore_Create;
begin
  result := TStringlist.create;
  result.sorted := True;
  result.duplicates := dupignore;
end;
Aufrufen muss ich dann nur noch

sl := TStringlistSortedDupIgnore_Create;
Aus drei Zeilen mach eine. Finde ich sehr praktisch.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wer macht den Free?

  Alt 13. Feb 2017, 12:53
Aus drei Zeilen mach eine. Finde ich sehr praktisch.
SL := TStringlist.Create; SL.Sorted := True; SL.Duplicates := dupIgnore;

Delphi-Quellcode:
type
  TStringListHelper = class helper for TStringList
    //constructor CreateDup;
    class function CreateDup: TStringList; static;
  end;

class function TStringListHelper.CreateDup: TStringList;
begin
  Result := TStringlist.create;
  Result.Sorted := True;
  Result.Duplicates := dupIgnore;
end;
Und dann auch nur noch SL := TStringList.CreateDup; , was Dank CodeInsight auch leichter zu finden ist.

Wäre nur toll, wenn Embarcadero es nach 11 Jahren endlich mal hinbekommt, dass man mehrere Helper an eine Klasse binden kann, ohne dort krankhaft mit Vererbung arbeiten zu müssen, was oftmal garnicht möglich ist.



Ja, statt Listen geben ich auch gern dynamische Arrays zurück, was aber nur gut nutzbar ist, wenn die Liste in der Funktion gefüllt und außerhalb nicht verändert wird.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#14

AW: Wer macht den Free?

  Alt 13. Feb 2017, 14:06
SL := TStringlist.Create; SL.Sorted := True; SL.Duplicates := dupIgnore;
Und der Codeformatter macht daraus wieder 3 Zeilen. (OK. Ich habe deinen Smiley gesehen)

Und dann auch nur noch SL := TStringList.CreateDup; , was Dank CodeInsight auch leichter zu finden ist.

Wäre nur toll, wenn Embarcadero es nach 11 Jahren endlich mal hinbekommt, dass man mehrere Helper an eine Klasse binden kann, ohne dort krankhaft mit Vererbung arbeiten zu müssen, was oftmal garnicht möglich ist.
Helper setzte ich aus dem o.g. Grund nicht ein. Wenn man mehrere Helper pro Klasse verwenden kann, dann werde ich es mir überlegen.

Die Codevervollständigung geht auch so prima. Einfach TStringlist ohne Punkt tippen und dir werden nach Ctrl-Leer alle Funktionen angezeigt.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Wer macht den Free?

  Alt 13. Feb 2017, 14:37
Oder du arbeitest mit Delphi Berlin und hast

Delphi-Quellcode:
    /// <summary>
    /// This constructor creates new string list with specified Duplicates,
    /// Sorted and CaseSensitive property values.
    /// </summary>
    constructor Create(Duplicates: TDuplicates; Sorted: Boolean; CaseSensitive: Boolean); overload;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#16

AW: Wer macht den Free?

  Alt 13. Feb 2017, 17:06
Oder du arbeitest mit Delphi Berlin und hast

Delphi-Quellcode:
    /// <summary>
    /// This constructor creates new string list with specified Duplicates,
    /// Sorted and CaseSensitive property values.
    /// </summary>
    constructor Create(Duplicates: TDuplicates; Sorted: Boolean; CaseSensitive: Boolean); overload;
In welcher Klasse steht der Constuctor? Wenn dann in der "Ableitung" von TStringlist. Oder?
Dazu müsste aber der Constructor von TStringlist auch als Overload deklariert sein. Oder?
Kurz in die RTL (Berlin) geschaut.... Tatsächlich, das Create der TStringlist ist mit overload deklariert. Insgesamt gibt es Für die Stringlist fünf verschiedene Constructoren.

Man, man. Wenn man mal 2 Tage nicht in die RTL schaut

Seit wann ist das?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Wer macht den Free?

  Alt 13. Feb 2017, 17:40
Seit wann ist das?
Seit Delphi Berlin - ob erst mit dem letzten Update kann ich nicht sagen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#18

AW: Wer macht den Free?

  Alt 17. Feb 2017, 16:23
Das mit dem überladenen Construktor vom Create hätte ich ohne Euch nie gemerkt!

Genau so das TMemo.LoadFromFile(filename,Encoding) ...

Warum zeigt die Codevervollständigung nicht an dass es überladene Versionen des Create oder LoadFromFile gibt???

Mein Berlin 10.1 Update 2 tut dies jedenfalls nicht ;-(

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Wer macht den Free?

  Alt 17. Feb 2017, 16:33
Warum zeigt die Codevervollständigung nicht an dass es überladene Versionen des Create oder LoadFromFile gibt???

Mein Berlin 10.1 Update 2 tut dies jedenfalls nicht ;-(
Doch! Du musst nur erst die Methode auswählen. Wenn du dann die Klammer öffnest, bekommst du alle Überladungen angezeigt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz