AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Funktion, die beliebigen Typ zuweist und als Bool auswertet
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion, die beliebigen Typ zuweist und als Bool auswertet

Ein Thema von WladiD · begonnen am 2. Mär 2011 · letzter Beitrag vom 2. Mär 2011
 
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#1

Funktion, die beliebigen Typ zuweist und als Bool auswertet

  Alt 2. Mär 2011, 09:21
Delphi-Version: XE
Hallo @all,

ich liebe Delphi, doch es nervt mich schon seit Ewigkeiten, dass es keine Möglichkeit gibt eine Variable zu setzen und gleichzeitig zu einem Bool auszuwerten. Um besser zu verstehen, was ich meine hier ein Code-Fetzen, der z.B. in PHP/JavaScript funktioniert:

Code:
function Foo($Value)
{
  if ($LocalValue = $Value * 10) && ($LocalValue > 100)
    return $LocalValue - 1;
  else
    return $LocalValue + 1;
}
Man beachte, dass $LocalValue in jedem Fall gesetzt wird, aber die nächste Bedingung nur ausgewertet wird, wenn es zu Boolean(True) gewandelt werden kann, was bei numerischen Typen alles <> 0 ist.

Das ist nur ein stupides Beispiel, aber wenn ich es zu Delphi übersetze:

Delphi-Quellcode:
function Foo(Value:Integer):Integer;
begin
  Result:=Value * 10; // Das ist das was mich nervt: zusätzliche Zeile
  if Result > 100 then
    Result:=Result - 1
  else
    Result:=Result + 1;
end;
Naja dachte ich mir, dann ist es doch kein Problem eine überladene Funktion zuschreiben, wie z.B.:

Delphi-Quellcode:
function SetCheck(var Target:Integer; const Value:Integer):Boolean; overload; inline;
function SetCheck(var Target:Int64; const Value:Int64):Boolean; overload; inline;
function SetCheck(var Target:String; const Value:String):Boolean; overload; inline;

...

function SetCheck(var Target:Integer; const Value:Integer):Boolean;
begin
   Target:=Value;
   Result:=Value <> 0;
end;

...
Hat auch wunderbar funktioniert (für einfache Typen), bis ich zum TObject bzw. IInterface kam:

Delphi-Quellcode:
function SetCheck(var Target:TObject; const Value:TObject):Boolean;
begin
   Target:=Value;
   Result:=Assigned(Value);
end;
Sieht logisch aus, aber leider lässt es sich nur mit TObject und sonst mit keinem anderen Nachkommen verwenden, da Delphi ja die Einschränkung hat, dass var-Parameter dem deklarierten Typ exakt entsprechen müssen.

Habt ihr hierfür eine Lösung? Vielleicht über Assembler?

Die Anforderung ist ja ganz simpel: Die Funktion soll in jedem Fall einen Wert an eine Variable zuweisen und diesen als Boolean auswerten.
Waldemar Derr
  Mit Zitat antworten Zitat
 


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 17:29 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