Thomas E.
07.10.2012, 15:04
Hallo!
Nach langer Zeit habe ich mich gestern das erste Mal über Subroutinen und Funktionen getraut. Bisher schrieb ich teilweise sehr umfangreiche Programme lediglich mit jede Menge Routinen, die per Gosub angesprochen wurden. Es funktionierte zwar, war aber manchmal zu langsam und zu unübersichtlich.
Nach genauem Studium der Literatur (Internet, Bücher und Bascom-Hilfe) über Prozeduren und Funktionen hat mich teilweise über deren Wirkungsweise aufgeklärt, aber dennoch tauchen einige unbeantwortete Fragen auf. Auch möchte ich wissen, ob ich es denn richtig verstanden habe.
Mein Wissensstand:
Eine Prozedur (Declare Sub) kann mit übergebenen Variablen arbeiten
Eine Funktion (Declare Function) kann mit übergebenen Variablen arbeiten und liefert einen Wert zurück
Innerhalb einer Prozedur oder Funktion kann ich mittels LOCAL Prozedur-/Funktionseigene Variablen definieren, die außerhalb der Prozedur nicht sichtbar sind
Übergebe ich eine Variable mit Byref wird lediglich die Adresse der zu übergebenen Variable weitergegeben
Übergebe ich eine Variable mit Byval wird die Variable kopiert
Ein Beispielcode:
'GLOBAL
Dim a as Byte
Dim b as Byte
Dim c as Byte
Declare Function myfunction (a as Byte, b as Byte) as Byte
Do
c = myfunction(a,b)
Loop
Function myfunction (a as Byte, b as Byte)
myfunction = a + b
End Function
End
Ich habe jetzt drei globale Variablen definiert (a, b und c). Anschließend deklariere ich die Funktion myfunction mit zwei Übergabevariablen, die pfiffigerweise ebenfalls wie die globalen Variablen a und b heißen. Diese werden allerdings nicht kopiert, sondern nur die Adresse wird an die Funktion weitergegeben.
In der Hauptschleife rufe ich die Funktion auf, in dem ich ein Ergebnis für die globale Variable c verlange. Dabei werden die globalen Variablen a und b an die Übergabevariablen a und b (ich find das extrem gemein) übergeben. Anschließend wird in der Funktion das Zeug zusammengerechnet und das Ergebnis wieder in die Hauptschleife in die globale Variable c kopiert. Fertig!
Laut Simulator läuft die Sache so.
So, nun zu den Fragen, die mich interessieren:
Ist es wirklich kein Problem, globale Variablen gleich zu bennen wie Übergabevariablen (außer Verwirrung)?
Welche Nachteile ergeben sich durch die Verwendung von byref, beziehungsweise wann kann die Variable fälschlicherweise geändert werden?
Hat jemand Beispiele von richtig eingebundenen Funktionen/Prozeduren aus der Praxis oder in einem bestehendem Projekt?
Warscheinlich sind die Antworten eh ganz einfach und logisch aber ich scheine gerade voll auf dem Schlauch zu stehen. ;)
Danke für eure Hilfe.
Nach langer Zeit habe ich mich gestern das erste Mal über Subroutinen und Funktionen getraut. Bisher schrieb ich teilweise sehr umfangreiche Programme lediglich mit jede Menge Routinen, die per Gosub angesprochen wurden. Es funktionierte zwar, war aber manchmal zu langsam und zu unübersichtlich.
Nach genauem Studium der Literatur (Internet, Bücher und Bascom-Hilfe) über Prozeduren und Funktionen hat mich teilweise über deren Wirkungsweise aufgeklärt, aber dennoch tauchen einige unbeantwortete Fragen auf. Auch möchte ich wissen, ob ich es denn richtig verstanden habe.
Mein Wissensstand:
Eine Prozedur (Declare Sub) kann mit übergebenen Variablen arbeiten
Eine Funktion (Declare Function) kann mit übergebenen Variablen arbeiten und liefert einen Wert zurück
Innerhalb einer Prozedur oder Funktion kann ich mittels LOCAL Prozedur-/Funktionseigene Variablen definieren, die außerhalb der Prozedur nicht sichtbar sind
Übergebe ich eine Variable mit Byref wird lediglich die Adresse der zu übergebenen Variable weitergegeben
Übergebe ich eine Variable mit Byval wird die Variable kopiert
Ein Beispielcode:
'GLOBAL
Dim a as Byte
Dim b as Byte
Dim c as Byte
Declare Function myfunction (a as Byte, b as Byte) as Byte
Do
c = myfunction(a,b)
Loop
Function myfunction (a as Byte, b as Byte)
myfunction = a + b
End Function
End
Ich habe jetzt drei globale Variablen definiert (a, b und c). Anschließend deklariere ich die Funktion myfunction mit zwei Übergabevariablen, die pfiffigerweise ebenfalls wie die globalen Variablen a und b heißen. Diese werden allerdings nicht kopiert, sondern nur die Adresse wird an die Funktion weitergegeben.
In der Hauptschleife rufe ich die Funktion auf, in dem ich ein Ergebnis für die globale Variable c verlange. Dabei werden die globalen Variablen a und b an die Übergabevariablen a und b (ich find das extrem gemein) übergeben. Anschließend wird in der Funktion das Zeug zusammengerechnet und das Ergebnis wieder in die Hauptschleife in die globale Variable c kopiert. Fertig!
Laut Simulator läuft die Sache so.
So, nun zu den Fragen, die mich interessieren:
Ist es wirklich kein Problem, globale Variablen gleich zu bennen wie Übergabevariablen (außer Verwirrung)?
Welche Nachteile ergeben sich durch die Verwendung von byref, beziehungsweise wann kann die Variable fälschlicherweise geändert werden?
Hat jemand Beispiele von richtig eingebundenen Funktionen/Prozeduren aus der Praxis oder in einem bestehendem Projekt?
Warscheinlich sind die Antworten eh ganz einfach und logisch aber ich scheine gerade voll auf dem Schlauch zu stehen. ;)
Danke für eure Hilfe.