Seite 3 von 3

Verfasst: 10.11.2007 18:26
von Bisonte

Code: Alles auswählen

Structure rueckgabewerte

Wert1.l
Wert2.l

EndStructure

Global Wert.rueckgabewerte

Procedure Blablubb(x)

Wert\wert1=100*x

Wert\wert2=100+x
;usw
EndProcedure
na so...
völlig Anfängermässig gedacht.

Verfasst: 10.11.2007 18:27
von mk-soft
Mit Pointern arbeiten ist eine gängige Methode worauf man nicht verzichten sollte.

Bei Parametertypen mit Struktur wird immer nur der Pointer in die Procedure übergeben.

P.S. So ist besser weil man dann mit der gleichen Funktion mehrere Datensätze bearbeiten kann

Code: Alles auswählen

Structure rueckgabewerte

Wert1.l
Wert2.l

EndStructure

Global Wert.rueckgabewerte

Procedure Blablubb(x, *daten.rueckgabewerte)

  With *daten
    \wert1=100*x
    \wert2=100+x
  EndWith

EndProcedure 

Verfasst: 10.11.2007 18:32
von Bisonte
Naja nun... aber wenn man am Anfang steht ist man mit Sicherheit noch nicht so der Freund von Pointern...

mich hat das am Anfang immer verwirrt mit den Pointern und solange es ohne geht, warum nicht...?

Verfasst: 10.11.2007 18:38
von mk-soft
Gute beschreibung von freak unter Help -> Pointer Tutorial
http://freak.purearea.net/


Beispiel

Code: Alles auswählen

Structure rueckgabewerte

Wert1.l
Wert2.l

EndStructure

Global Dim Wert.rueckgabewerte(10)

Procedure Blablubb(x, *daten.rueckgabewerte)

  With *daten
    \wert1=100*x
    \wert2=100+x
  EndWith

EndProcedure 

For i = 0 To 9
  Blablubb(10+i, Wert(i))
Next

For i = 0 To 9
  With Wert(i)
    Debug \wert1
  EndWith
Next

Verfasst: 10.11.2007 18:43
von STARGÅTE
Pointer sin n gute Sache, ich benutze sie auch zunehmen mehr, aber hat nur da wo es sinnvoll ist.

Gosub werde ich weiter hin vielfach benutze.
Für mich stellt Gosub:Return kein ersatz von einer Procedure dar sonder mehr eine Art Include, bedeutet, wenn ich ein Programmteil einfach nur "verschieben" will und auch nur speziell ein mal benutzen will, dann ist Gosub super.

Verfasst: 11.11.2007 01:11
von hjbremer
STARGATE ich stimme Dir zu. Gosub ist eine feine Sache solange man es nicht übertreibt.
Und EUCH die ihr GOSUB verteufelt, laßt euch gesagt sein, es gibt nichts schnelleres als ein GOSUB zur rechten Zeit.
Wers nicht glaubt möge das kleine Beispiel ausprobieren, da helfen auch keine Pointer oder Strukturen !

Code: Alles auswählen

xx=1000000

a=1234
b=5678
c=0

Global rueck.LONG

Structure rueckgabewerte 

Wert1.l 
Wert2.l
Rueck.l 

EndStructure 

Global Wert.rueckgabewerte 


Procedure rechnen(var1,var2)

 ProcedureReturn var1*var2

EndProcedure

Procedure rechnen2(var1,var2)

 rueck\l=var1*var2

EndProcedure

Procedure rechnen3()

 wert\rueck=wert\wert1*wert\wert2

EndProcedure


z1=GetTickCount_()
For j=1 To xx
  Gosub rechne
  ;mach irgendwas mit der Variable c
Next
z2=GetTickCount_()-z1


z1=GetTickCount_()
For j=1 To xx
  c=rechnen(a,b)
  ;mach irgendwas mit der Variable c
Next
z3=GetTickCount_()-z1


z1=GetTickCount_()
For j=1 To xx
  rechnen2(a,b)
  ;mach irgendwas mit der Variable c
Next
z4=GetTickCount_()-z1


z1=GetTickCount_()
wert\wert1=a
wert\wert2=b
For j=1 To xx
  rechnen3()
  ;mach irgendwas mit der Variable wert\rueck
Next
z5=GetTickCount_()-z1


MessageRequester("",Str(z2)+#LF$+Str(z3)+#LF$+Str(z4)+#LF$+Str(z5))

End

Rechne:

c=a*b

Return

Verfasst: 11.11.2007 01:25
von Kiffi
hjbremer hat geschrieben:Und EUCH die ihr GOSUB verteufelt, laßt euch gesagt sein [...]
sorry, aber Dein 'Performance'-Beispiel reißt mich jetzt nicht so vom Hocker.
Da bleib ich doch lieber beim Gosub-Verteufeln ;-)

Grüße ... Kiffi