AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Gibts es Funktionen mit zwei Ergebnistypen!?
Thema durchsuchen
Ansicht
Themen-Optionen

Gibts es Funktionen mit zwei Ergebnistypen!?

Ein Thema von Propeller · begonnen am 2. Feb 2007 · letzter Beitrag vom 3. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Propeller

Registriert seit: 18. Nov 2005
Ort: Berlin
9 Beiträge
 
#1

Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:28
Hallo!

Habe mal eine Frage bzgl. der Eigenschaften von Funktionen!
Gibts es Funktionen, die ein Result eines bestimmten Typs liefern, in Ausnahmefällen jedoch Resulttyp ein anderer sein kann.

Beispiel:

Delphi-Quellcode:
function division(x,y: extended): extended; //result := x/y
begin
  try
    if y=0 then showmessage('Bitte nicht durch Null teilen')
    else
    result := x/y
  except Fehlerbehandlung('Division'); result := 0 End;
end;
Nehmen wir einmal als Beispiel die Funktion f(x)=1/x.
Nun soll er die Funktionswerte von -5 bis 5 berechnen und in ein Memofold eintragen. Bei dem
(un)möglichen Fall 1/0, soll er jedoch nicht eine Zahl als Result liefern, sondern analog zu meinem Taschenrechner in das dazugehörige Feld für den Wert x=0 beispielsweise das Wort 'Error' hinschreiben. 'Error' wäre aber vom typ string und nicht vom geforderten Typ "extended". Gibt es da eine elegante Möglichkeit, einer Funktion in dem Ausnahmefall zu sagen, dass nun das Result vom Typ "string" sein soll?

Mit freundlichen Grüßen,

Propeller
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:29
Nein. Das ist nicht möglich.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:30
Nur wenn du ihn als Variant deklarierst.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:34
Oder vielleicht noch irgendwie als varianten Record... Guter Stil ist das aber nicht.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:37
Doch, geht doch:
Delphi-Quellcode:
function test(a,b:integer):variant;
begin
  if b=0 then result:='error'
         else result:=a/b;
end;

procedure TForm1.Button1Click(Sender: TObject);
var e:variant;
begin
  e:=test(4,3);
  if TVarData(e).VType=varstring then label2.Caption:=e
                                 else label2.Caption:=floattostr(e);
end;
Schau in der Hilfe unter "TVarData"!

PS: Unter den Fleißkommatypen gibts auch den Zustand infinity, der ja (in der Komplexen Ebene) x/0 ist.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:41
Da man Verarbeitung und Ausgabe sowieso voneinander trennen soll, wäre das auch nicht sinnvoll.

Schmeiss doch eine Exception und fange sie in der Ausgabeunit ab, den vorgegebenen Text aus der Berechnung kannst du dann ausgeben, musst es aber nicht.

Delphi-Quellcode:
function division(x,y: extended): extended;
begin
  if y = 0 then
    Exception.Create('Bitte nicht durch Null teilen')
  else
    result := x/y;
end;
Aufruf:
Delphi-Quellcode:
begin
  try
    Erg:=division(1, 0);
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;
@sirius: Bitte keinen Variant benutzen, wenn es nicht nötig ist.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:44
Ein Variant ist aber auch nur EIN Typ und nicht mehrere.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:46
Zitat von 3_of_8:
Ein Variant ist aber auch nur EIN Typ und nicht mehrere.
Klar er kann so aber verschiedene Typen zurückgeben.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:49
@omata
Aber wenn er, wie im beschriebenen Beispiel, numal keine Exception will. Er würde deinen code mit einer for-Schleife durchlaufen. Das ist auch nicht so der Hit.

1. Mit Variant sollte man sparsam umgehen (deswegen ja auch der Tipp mit infinity)
2. Wenn es aber nicht anders geht, Borland hat es ja auch aus irgend einem Grund gleich mit implementiert
3. Bläht sich der Code deswegen nicht unnötig auf
4. Kenne ich mindestens ein sher gutes MatheProgramm (Matlab) dass nur mit einer Art Varianten Datentyps arbeitet.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Gibts es Funktionen mit zwei Ergebnistypen!?

  Alt 2. Feb 2007, 18:52
Moin Zusammen,

da die Parameter aber vom Typ Extended sind, und bei Variant schon bei Double Schluss ist, wird das auch nicht gehen.
Bleibt wohl nur die Exception, oder, eigentlich besser, die Prüfung vor dem Aufruf, was aber bei einer Gleitkommazahl ja auch schiefgehen kann.
Selber erzeugen muss man die Exception ja auch nicht, da Delphi von sich aus eine EDivisionByZero meldet.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16: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