Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Aus "Result" lesen (https://www.delphipraxis.net/53574-aus-result-lesen.html)

SebE 19. Sep 2005 12:26


Aus "Result" lesen
 
Hallo,
heute hat mein Lehrer gemeint, dass man das:

Delphi-Quellcode:
function X: Typ;
begin
Result := 7;

...

if Result = 7 //Darf man hier aus Result lesen?
then ...
end;
nich machen sollte.

Warum nicht?

Und wenn es verboten wäre, wieso meldet es der Compiler nicht?

Danke für Informationen.

marabu 19. Sep 2005 12:31

Re: Aus "Result" lesen
 
Hi Sebastian,

sei einfach etwas aufmüpfig und mache es doch. Natürlich nur, wenn dein Lehrer wegschaut...

Grüße vom marabu

SebE 19. Sep 2005 12:32

Re: Aus "Result" lesen
 
ja, so wird's wahrscheinlich ausgehen.
Aber ich würde gern wissen, ob es dafür einen Grund gibt.

Kroko1999 19. Sep 2005 12:34

Re: Aus "Result" lesen
 
Ich sehe keine Grund auf Result zuzugreifen, frage ihn doch mal warum :?:

marabu 19. Sep 2005 12:35

Re: Aus "Result" lesen
 
@Sebastian: Nicht wirklich. Da das Knausern mit Hauptspeicher heutzutage eine veraltete Tugend ist, wird der Lehrer vielleicht aus didaktischen Gründen Wert darauf legen, dass du grundsätzlich sprechende Namen für deine Variablen verwenden sollst.

marabu

leddl 19. Sep 2005 12:35

Re: Aus "Result" lesen
 
Ich denke, das Problem ergibt sich bei Betrachtung anderer Programmiersprachen. Schlagt mich, wenn ich falsch liege, aber soweit ich mich erinnere, erfolgt bei zB PHP bei Aufruf von
Code:
return a;
(was ja in gewisser Hinsicht dem Delphi-Return entspricht) ein verlassen der Funktion.

In Delphi kannst du aber guten Gewissens bereits am Anfang der Funktion dem Result etwas zuweisen. Das wird sogar sehr häufig verwendet. Nicht zuletzt, um nicht extra eine neue Variabel deklarieren und zuweisen zu müssen.

shmia 19. Sep 2005 13:01

Re: Aus "Result" lesen
 
Es ist nicht verboten.
Man sollte nur versuchen, das Result so spät als möglich zuzuweisen.
Grund: bei frühzeitiger Zuweisung an Result wird ein wertvolles Prozessorregister für andere Aufgaben blockiert.
Delphi-Quellcode:
// Beispiel
Result := False;
a := ...
b := ...
if a > b then
  Result := True;

// besser
a := ...
b := ...
if a > b then
  Result := True
else
  Result := False;

DerDan 19. Sep 2005 13:22

Re: Aus "Result" lesen
 
Tatsächlich hat Borland die "automatische " Variable Result auch dazu eingefügt damit man darauf zugreifen kann. Also sollt mans auch machen.

In anderen Sprachen gibts sowas leider nicht. das könnte der einzige Grund für eine Lehrkraft (-h+e) sein um so eine Aussage zu fällen. Aber dann soll er den Grund auch nennen.


DerDan

leddl 19. Sep 2005 13:31

Re: Aus "Result" lesen
 
Also ich finde das mit Result in vielen Fällen sehr praktisch.
Delphi-Quellcode:
function IndexOf(a : Array of String; str : String) : Integer;
Begin
  Result := high(a);
  While (Result >= low(a)) and (a[Result] <> str) Do
    dec(Result);
End;
Wozu sollte ich hier jetzt noch extra eine Zählvariable einführen? Geht doch so viel schneller, einfacher und meiner Meinung nach auch eindeutiger.

//Edit:
Am besten du fragst deinen Lehrer mal nach dem Grund für seine Aussage. Ich gehe mal wirklich davon aus, daß es mit anderen Programmiersprachen zu tun hat. Und dann sag ihm, daß es in Delphi sehr wohl geht und auch seine praktische Anwendung haben kann.

Robert_G 19. Sep 2005 13:36

Re: Aus "Result" lesen
 
Kann es sein, dass ihr mit Absicht Shmias Beitrag ignoriert oder kapiert ihr ihn nur nicht? :gruebel:

TeronG 19. Sep 2005 13:50

Re: Aus "Result" lesen
 
Zitat:

Zitat von shmia
Es ist nicht verboten.
Man sollte nur versuchen, das Result so spät als möglich zuzuweisen.
Grund: bei frühzeitiger Zuweisung an Result wird ein wertvolles Prozessorregister für andere Aufgaben blockiert.

AHA :shock:
Nice 2 know ... wenn das so ist Stricke ich wohl mal n paar (alte) Functionen bissl um ^^
@Robert_G: Thanks ... ohne dich hätt ich den Post doch glatt übersprungen/übersehen ^^

leddl 19. Sep 2005 13:52

Re: Aus "Result" lesen
 
Inwiefern ignoriere ich shmias Beitrag? Ich habe nur nichts dazu gesagt... Natürlich hat er da recht. Nur benutze ich eben Result als Variable auch nur, wenn ich sie brauche, wie eben in meinem Beispiel. Später kann ich dort Result nicht mehr zuweisen, ohne eine andere Variable zu benutzen.
Und generell weise ich Werte auch erst dann zu, wenn sie gebraucht werden, und selten am Anfang einer Methode.
Aber inwiefern widersprechen DerDans und mein Post shmia? :gruebel: Oder willst du nur wieder rumtrollen? :lol:

smudo 19. Sep 2005 13:58

Re: Aus "Result" lesen
 
Zitat:

Zitat von shmia
bei frühzeitiger Zuweisung an Result wird ein wertvolles Prozessorregister für andere Aufgaben blockiert.

Welche Nachteile bringt das mit sich?
Ich meine, muss ich meine ganzen Funktionen jetzt umstellen?
Ich benutze sehr häufig die Result-Variable in der Funktion. :pale:

René

freak4fun 19. Sep 2005 14:04

Re: Aus "Result" lesen
 
Zitat:

Zitat von shmia
Delphi-Quellcode:
// Beispiel
Result := False;
a := ...
b := ...
if a > b then
  Result := True;

// besser
a := ...
b := ...
if a > b then
  Result := True
else
  Result := False;

Delphi-Quellcode:
// Beispiel
Result := False;
a := ...
b := ...
if a > b then
  Result := True;

// besser
a := ...
b := ...
Result := (a > b);
Entschuldigung, konnte nicht widerstehen. :angel:

MfG
freak

Kedariodakon 19. Sep 2005 14:07

Re: Aus "Result" lesen
 
Zitat:

Zitat von shmia
Es ist nicht verboten.
Man sollte nur versuchen, das Result so spät als möglich zuzuweisen.
Grund: bei frühzeitiger Zuweisung an Result wird ein wertvolles Prozessorregister für andere Aufgaben blockiert.
Delphi-Quellcode:
// Beispiel
Result := False;
a := ...
b := ...
if a > b then
  Result := True;

// besser
a := ...
b := ...
if a > b then
  Result := True
else
  Result := False;

öhm Warum nicht:
Delphi-Quellcode:
Result := a > b;
:gruebel:
Aber Egal...

Nun würd mich aber interessieren, in wie weit sich das auf die Performance auswirkt, sprich Result benutzen im Gegensatz, das Result nur am Ende Zuzuweisen...

Meine Meinung nach nimmt sich dass nichts, lass mich aber gern eines besseren beleren...

Bye

Edit: da war wohl freak4fun schneller...

Robert_G 19. Sep 2005 14:12

Re: Aus "Result" lesen
 
Zitat:

Zitat von leddl
Inwiefern ignoriere ich shmias Beitrag? Ich habe nur nichts dazu gesagt...

Deshlab fragte ich ja...
Zitat:

Oder willst du nur wieder rumtrollen? :lol:
Schelcht geschlafen? SB-Spam-Sammelpunkte alle?
Ne iss klar... Ganz vergessen: Wenn man mit dieser, hier oft praktizierten, Quick'nDirty-BlossNichtNachdenken-"Einfachheit" nicht einverstanden ist, ist man gleich ein Troll.
Wie konnte ich das nur vergessen? :wall:

leddl 19. Sep 2005 14:28

Re: Aus "Result" lesen
 
Zitat:

Zitat von Robert_G
Zitat:

Zitat von leddl
Inwiefern ignoriere ich shmias Beitrag? Ich habe nur nichts dazu gesagt...

Deshlab fragte ich ja...
Zitat:

Oder willst du nur wieder rumtrollen? :lol:
Schelcht geschlafen? SB-Spam-Sammelpunkte alle?
Ne iss klar... Ganz vergessen: Wenn man mit dieser, hier oft praktizierten, Quick'nDirty-BlossNichtNachdenken-"Einfachheit" nicht einverstanden ist, ist man gleich ein Troll.
Wie konnte ich das nur vergessen? :wall:

Ach Robert, flipp doch nicht gleich aus :roll:
Du wirfst halt ständig mit Kommentaren um dich, die man eigentlich nur als provozierend auffassen kann. Und ich zähle meinen Post nicht zu "Quick'nDirty-BlossNichtNachdenken-"Einfachheit"" :evil:
Ich habe shmia nicht widersprochen, aber was für einen Effekt hätte es gehabt, extra noch zuzustimmen? :gruebel:
Ich habe SebE nur ein Beispiel gegeben, wo man Result in der von seinem Lehrer abgelehnten Weise einsetzen kann, und wie ich es auch tue. Denn ich finde es so praktisch und habe noch nie bemerken können, daß dadurch die Leistung meines PCs auch nur minimalst geschmälert wurde. :roll:

Also wenn du was zu sagen hast, dann tu das bitte sachlich und auf eine Weise, die einem nicht gleich zeigt, daß du alle außer dir für komplett unfähig hältst. Und wenn du schon so posten willst, dann vertrag auch bitte eine etwas ironische Antwort :roll: Wer austeilen will, muß auch einstecken können...

Grishnak 19. Sep 2005 14:33

Re: Aus "Result" lesen
 
Immer mit der Ruhe :angel: ! Soll doch jeder so programmieren wie er will - Hauptsache es funktioniert :zwinker: !
Auch ich nutzte "Result" oft schon innerhalb der Funktion und nicht erst am Ende. Ich bin auch nicht der Meinung, dass der dadurch entsehende Zeitverlust für mich signifikant ist! Wer es so nicht mag, soll es eben lassen. Interessant war der Hinweis allerdings schon :!: !

Niko 19. Sep 2005 14:35

Re: Aus "Result" lesen
 
Zitat:

Zitat von shmia
Grund: bei frühzeitiger Zuweisung an Result wird ein wertvolles Prozessorregister für andere Aufgaben blockiert.

Hm, das stimmt zumindest unter Delphi 2005 nicht (Hab's gerade mal ausprobiert :wink: ). Bei einfachen Funktionen wird für Result ein Register verwendet. Wenn die Funktion aber kompliziert genug ist, legt der Compiler für Result eine lokale Variable auf dem Stack an und weist deren Wert erst am Ende der Funktion an eax zu.

Somit sehe ich eigentlich keinen Grund, warum man result nicht wie eine normale Variable einsetzen sollte.

SebE 19. Sep 2005 14:50

Re: Aus "Result" lesen
 
Zitat:

Zitat von shmia
Es ist nicht verboten.
Man sollte nur versuchen, das Result so spät als möglich zuzuweisen.
Grund: bei frühzeitiger Zuweisung an Result wird ein wertvolles Prozessorregister für andere Aufgaben blockiert.

Nimmt Result, wenn kein Wert zugewießen wurde, keinen Speicher in Gebrauch??

alzaimar 19. Sep 2005 15:24

Re: Aus "Result" lesen
 
Zitat:

Zitat von Kedariodakon
öhm Warum nicht:
Delphi-Quellcode:
Result := a > b;
:gruebel:

Weils hässlich ist :mrgreen: . Du programierst ja in Delphi, damit der Code nicht so verkryptifiziert wird wie !@C++==++I--, oder?
Ehrlich gesagt, mach ich das auch ab und zu, aber wenn ich brillieren muss (weil ein pingeliger Kollege mir über die Schultern schaut), dann mach ich es auf die 'unständliche' Art.

leddl 19. Sep 2005 15:30

Re: Aus "Result" lesen
 
Häßlich? Ich find das so viel schöner, als mit diesen ekelhaften "if then else"-Gehabe ;)

freak4fun 19. Sep 2005 15:31

Re: Aus "Result" lesen
 
Ist ja auch Jacke wie Hose. Es wird eh optimiert. :gruebel:

MfG
freak

Sharky 19. Sep 2005 15:33

Re: Aus "Result" lesen
 
Und gehört, so oder so, nicht zum Thema des Threads.

Kedariodakon 19. Sep 2005 15:37

Re: Aus "Result" lesen
 
Zitat:

Zitat von alzaimar
Weils hässlich ist :mrgreen: . Du programierst ja in Delphi, damit der Code nicht so verkryptifiziert wird wie !@C++==++I--, oder?
Ehrlich gesagt, mach ich das auch ab und zu, aber wenn ich brillieren muss (weil ein pingeliger Kollege mir über die Schultern schaut), dann mach ich es auf die 'unständliche' Art.

verkryptifiziert ?!?
öhm Ich finde die kurze Form lesbarer als die lange mit If-Abfrage...

Delphi-Quellcode:
If a > b Then Result := True
Else         Result := False;
// oder
Result := a > b;
Und sie ist kürzer...

Im Grunde ist es eh egal, da das eh zur kurzform optimiert wird :zwinker:

Bye

mirage228 19. Sep 2005 15:43

Re: Aus "Result" lesen
 
Zitat:

Zitat von Kedariodakon
Im Grunde ist es eh egal, da das eh zur kurzform optimiert wird :zwinker:

Also bei mir erzeugen beiden Varianten unterschiedlichen Assemblercode.

Mit IF
Code:
  cmp edx, eax
  jnl +$03
  mov al, $01
  ret
Ohne IFs
Code:
  cmp edx, eax
  setl al
  ret
Ich kenne mich zwar net mit Assembler aus, aber ohne IF ists kürzer und ggf. auch schneller.

mfG
mirage228

Kedariodakon 19. Sep 2005 15:53

Re: Aus "Result" lesen
 
Hmm wird doch net wegoptimiert :gruebel:

Dementsprechent logischerweise ohne If schneller :angel2:

Delphi-Quellcode:
cmp edx, eax  // Der Vergleich a > b
  jnl +$03     // "Sprung wenn größer" zu der Zeile "ret"
  mov al, $01  // Wenn nicht setze al um...
  ret
Delphi-Quellcode:
cmp edx, eax  // Der Vergleich a > b
  setl al     // Das weiß ich net...
  ret
soweit denk ich mir das mit meinen beschränkten ASM-Kenntnissen

Bye

Sharky 19. Sep 2005 16:06

Re: Aus "Result" lesen
 
Könnt ihr jetzt bitte zum Thema des Threds zurück kommen :warn:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 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