SUb & function lassen argumente zu, gosub nicht
call sub ( Arg1, Arg2)
funtion kann auch einen Werte zurückgeben
seppel = function( Arg1, Arg2)
Ein bißchen was gibt's da
https://www.roboternetz.de/wissen/in.../Bascom_Inside
Hallo
Probiere gerade Code mit Sub, Funktion u.s.w..
Leider blicke ich da nicht ganz durch
Im Forum finde ich leider auch nicht viel..
Vielleicht könnt Ihr mir ein paar Fagen beantworten
*Was bringt mir eine Sub gegenüber einem Gosub?
* Kann ich mit Sub, mir auch einen Wert zurückgeben lassen, oder brauche ich dazu die "Funktion" ?
*Vertehe das nicht mit den Byval und Byvar ...
* Gib es zu Sub und Funktion.. wo eine verständliche Erklärung/en?
Könnte mir jemand bitte helfen ?
l.G. Roberto
SUb & function lassen argumente zu, gosub nicht
call sub ( Arg1, Arg2)
funtion kann auch einen Werte zurückgeben
seppel = function( Arg1, Arg2)
Ein bißchen was gibt's da
https://www.roboternetz.de/wissen/in.../Bascom_Inside
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Das habe ich mich am Anfang auch gefragt, jetzt weiß ichs....Es bringt den Vorteil, das du die Subs und Functionen wie Befehle aufrufen kannst, was eine saubere sache ist. Gerade, wenn du in Bausteinen programmierst (wie ich inzwischenZitat von Roberto
) und diese mit Include zusammensetzt, kannst du die ganzen Unterroutinen wie ein Befehl abrufen. Das macht das Programmieren übersichtlicher und strukturierter. VB wir übrigends fast nur mit Subs und Funcs programmiert.
Hallo Rage_Empire
Habe schon ein paar Beiträge von dir zu diesem Thema gelesen
Wo hast Du dich zu den Thema schlau gemacht ?
Bekomme ich mit Sub auch einen Wert zurück ? oder nur mit Funktion ?
(Die Hilfe gibt leider nicht viel her)
Wird der Code durch Sub auch kleiner oder blaibt es gleich ?
Die Variante seppel = func(arg1, arg2) geht nur mit function.
Du kannst aber auch folgendes machen:
das funzt dann wie eine function, vom generierten Code her isses dasselbe.Code:declare sub subb (byref ergebnis as word, byval arg1 as byte, byval arg2 as byte) ' beachte byref call subb(seppel, 3, 6) ' aufruf print str(seppel) end sub subb (byref ergebnis as word, byval arg1 as byte, byval arg2 as byte) ergebnis = arg1 * arg2 end sub
Sowas macht man vor allem dann, wenn eine sub mehrere ergebnisse liefern soll.
PS Nochwas: bei sub und function kannst du auch "LOCAL" definieren, bei gosubs nicht
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo Robert
Für was ist byval und byref ?
(die Beschreibung der Hilfe kapiere ich nicht)
Als erster will ich mal eine Tastenmatrix abfragen.
Kann ich da jetzt Sub nehmen oder eher Funktion ?
Funktionen benutze ich meistens bei Rechnerischen operationen oder bei Eingaben (z.B. ADC). Subs hingegen nehme ich Hauptsächlich um Unterprogramme etwas ausführen zu lassen. Schlau bin ich erst draus geworden, als ich damit rumexperementiert hab, da mir irgendwann das ganze gosub...return und goto..hin...goto...her zu unübersichtlich wurde. Sieht Anfangs komplizierter aus, als es ist. Naja, die Bascomhilfe hat mir dabei am wenigsten geholfen.
Noch was: Byref bezieht die Variabeln als Referenz, wird also direkt auf die Speicherzelle der Variable verwiesen. Bei Byval wird die Variable aus dem Speicher kopiert.
PicNick, korrigier' mich wenn ich hier was falsches erzähl![]()
SUB oder FUNCTION ist viel Geschmackssache dabei.
Nachteil von function ist der, daß du den Rückgabewert beim Aufruf auch immer angeben mußt, auch wenn er dich an der Stelle garnicht interessiert. (Laß mich das jetzt nicht erklären)
@Rage, stimmt eh so.
Byref (=> by reference => "durch die Adresse" ) ist eben die Adresse einer Variable,
byval ist aber die Addresse einer (temporären) Kopie der Variablen. Das ist zusätzlich Arbeit & Code. Die brauchst du aber aus zwei Gründen: entweder weil du nicht willst, daß die Sub/function die Variable unabsichtlich verändert, oder, wenn du KONSTANTEN übergeben willst, die es ja physisch garnicht gibt.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo
Habe jetzt mal probiert (Ein Beispiel von c.Kühnel)
Wollte nur Locale Variablen, geht aber nicht so.Code:. . . Declare Function Taste() As Byte . . . Do Lcd Taste() Loop end '------------------Function: Tasten von einer 4*3 Matrix auslesen---------------- ' 3 Spalten auf Portd.5-7 ' 4 Zeilen auf Portc.0-3 Config Portd = Output Config Portc = Input Portc = &B00001111 Function Taste() As Byte Local Spalte As Byte Local Zeile As Byte Local Taste_x As Byte Taste_x = 0 For Spalte = 1 To 3 Portd = &B11100000 ' Portd.5-7 auf High If Spalte = 1 Then Reset Portd.5 If Spalte = 2 Then Reset Portd.6 If Spalte = 3 Then Reset Portd.7 For Zeile = 1 To 4 Select Case Zeile Case 1 : Debounce Pinc.0 , 0 , Taste_auswerten , Sub Case 2 : Debounce Pinc.1 , 0 , Taste_auswerten , Sub Case 3 : Debounce Pinc.2 , 0 , Taste_auswerten , Sub Case 4 : Debounce Pinc.3 , 0 , Taste_auswerten , Sub End Select Next Zeile Next Spalte Taste = Taste_x End Function Taste_auswerten: Select Case Zeile Case 1 : Taste_x = Spalte + 1 Case 2 : Taste_x = Spalte + 4 Case 3 : Taste_x = Spalte + 7 Case 4 : Taste_x = Spalte + 10 End Select Return
Wenn ich die Variablen: Taste_x, Zeile, Spalte mit Dim deklariere, schreit er nicht
Es ist zum Mäuse melken![]()
"end function" erst NACH den subs. Die gehören ja dazu
...
Next Spalte
Taste = Taste_x
exit function ' function verlassen
Taste_auswerten:
Select Case Zeile
Case 1 : Taste_x = Spalte + 1
Case 2 : Taste_x = Spalte + 4
Case 3 : Taste_x = Spalte + 7
Case 4 : Taste_x = Spalte + 10
End Select
Return
End Function ' jetzt is aus
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen