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