- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Sub /Funktion u.s.w ?????

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576

    Sub /Funktion u.s.w ?????

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710

    Re: Sub /Funktion u.s.w ?????

    Zitat Zitat von Roberto
    *Was bringt mir eine Sub gegenüber einem Gosub?
    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 inzwischen ) 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.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576
    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 ?

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Die Variante seppel = func(arg1, arg2) geht nur mit function.

    Du kannst aber auch folgendes machen:
    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
    das funzt dann wie eine function, vom generierten Code her isses dasselbe.

    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.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576
    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 ?

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    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

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    57
    Beiträge
    576
    Hallo

    Habe jetzt mal probiert (Ein Beispiel von c.Kühnel)

    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
    Wollte nur Locale Variablen, geht aber nicht so.
    Wenn ich die Variablen: Taste_x, Zeile, Spalte mit Dim deklariere, schreit er nicht

    Es ist zum Mäuse melken

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    "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.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen