Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Move innerhalb von TBytes (https://www.delphipraxis.net/205776-move-innerhalb-von-tbytes.html)

himitsu 15. Okt 2020 20:38

AW: Move innerhalb von TBytes
 
Zitat:

Zitat von Benmik (Beitrag 1475559)
Wo wir dabei sind, was ist eigentlich der Unterschied zwischen Parse und ToInteger?

Da hat jemand bei C# abgeguckt und von da die Bezeichner übernommen.
https://docs.microsoft.com/de-de/dot...ng-to-a-number

Daher sind auch Einige der neuen Funktionen in den Record-Helper bissl delphi-untypisch/unhandlich.

Benmik 15. Okt 2020 20:57

AW: Move innerhalb von TBytes
 
Jetzt lese ich deinen Link durch und denke: "Ja, und warum haben sie dann nicht auch
Delphi-Quellcode:
TryParse
implementiert, das wäre doch mal vernünftig!" Vorsichtshalber suche ich mal und tatsächlich, das gibt es, und wo? In System.SysUtils.TIntegerHelper! Ja, klar, wenn ich einen String konvertieren möchte, dann suche ich doch bei Integer.

Hab's mal probiert:
Delphi-Quellcode:
var i:integer;
begin
  If i.TryParse('1',i)
    then ...
Welcher Logik folgt sowas?

himitsu 15. Okt 2020 20:59

AW: Move innerhalb von TBytes
 
Damit es nicht auffällt, dass auch Anderes fehlt. :lol:

Uwe Raabe 15. Okt 2020 21:40

AW: Move innerhalb von TBytes
 
Zitat:

Zitat von Benmik (Beitrag 1475584)
Ja, klar, wenn ich einen String konvertieren möchte, dann suche ich doch bei Integer.

Hab's mal probiert:
Delphi-Quellcode:
var i:integer;
begin
  If i.TryParse('1',i)
    then ...
Welcher Logik folgt sowas?

Naja, das kann man schon so machen, aber gemeint ist es anders. Da TryParse eine Klassenfunktion ist, wäre der folgende Ansatz etwas geradliniger:

Delphi-Quellcode:
var i:integer;
begin
  If Integer.TryParse('1',i)
    then ...
Deutlicher wird es ohne das Try:
Delphi-Quellcode:
var i:integer;
begin
  i := Integer.Parse('1')

Benmik 15. Okt 2020 23:10

AW: Move innerhalb von TBytes
 
Ja, verstehe. Trotzdem empfinde ich das als irgendwie unpassend. Allenfalls bei deinem zweiten Beispiel stellt sich so etwas wie eine Logik ein. Naja, egal. Man ist versucht zu sagen: CodeInsight geht nicht, aber für sowas hamse Zeit.

himitsu 15. Okt 2020 23:27

AW: Move innerhalb von TBytes
 
Diese Operatoren kannst auch selbst erweitern, wenn dir was fehlt oder etwas besseres einfällt. (es wäre nur einfacher, wenn die "vererbung" nicht so unglücklich gelöst wäre)

Rollo62 16. Okt 2020 07:37

AW: Move innerhalb von TBytes
 
Ich nehme immer noch gerne TryStrToInt oder StrToIntDef.
Weil letzendlich die Parse und TryParse Funktionen diese auch benutzen, welche aber nicht inline sind.

Am Ende der Kette wird bei Ganzzahlen wohl immer Val() benutzt, auch das könnte mal Sinn machen, benutze ich aber auch nicht direkt.

Delphi-Quellcode:
function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
  E: Integer;
begin
  Val(S, Value, E);
  Result := E = 0;
end;

himitsu 16. Okt 2020 09:23

AW: Move innerhalb von TBytes
 
Jo, Delphi-Referenz durchsuchenVal zu nutzen bringt nur was, wenn man auch das Result (E) auswertet. (zu oft schon gesehn, dass das nicht gemacht wird)

Wobei Val anstelle von TryStrToInt, hat nur dann einen Vorteil hat, wenn man wirklich mal die Fehlerposition wissen möchte ... ansonsten schleppt man nur sinnlos die ungenutzte Variable mit sich rum.
Delphi-Quellcode:
S := Edit1.Text;
Val(S, i, E);
if i > 0 then begin
  Edit1.SetFocus;
  Edit1.SelStart := E;
  Edit1.SelLength := 9999;
  raise Exception.Create('ungültige Zahl');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.
Seite 2 von 2     12   

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