www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "BASIC" - Function oder Sub
Function oder Sub < BASIC < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "BASIC"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Function oder Sub: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:41 So 30.03.2014
Autor: Mathics

Hallo,

ich habe in meinen Unterlagen ein ganz simples Programm entdeckt, bei dem ich mich frage, wieso Function und nicht Sub benutzt wurde.

´Dies Modul enthält betriebsspezifische Funktionen
´Autor: Fritz Findig, 01
´Stand: 01.10.2012
´liefert das Jahr der Betriebsgründung
Function Betriebsgruendung() As Integer
Betriebsgruendung = 1887
End Function

Hier wird wohl lediglich angegeben, dass die Betriebsgründung im Jahr 1887 war.

Als Unterschied zwischen Function und Sub habe ich gelernt, dass Function einen Wert zurückgibt.
Sub haben wir bisher immer bei Arrays angewendet. Und bei Arrays werden doch auch bestimmten Feldern einfach Werte zugeordnet. Wieso hat man oben Funktion verwendet und wieso nicht Sub? Ist das weil man bei Excel quasi nichts großartig visuell darstellt/verändert, sondern einfach einen Wert erhält? Ich mein bei Arrays hat man ja nicht für eine Variable einen bestimmten Wert, sondern man hat eine Reihe von Werten. Wie erkennt man am besten wann man Sub und wann man Function verwenden soll?

LG
Mathics


        
Bezug
Function oder Sub: Antwort
Status: (Antwort) fertig Status 
Datum: 13:01 So 30.03.2014
Autor: Diophant

Hallo,

> ich habe in meinen Unterlagen ein ganz simples Programm
> entdeckt, bei dem ich mich frage, wieso Function und nicht
> Sub benutzt wurde.

>

> ´Dies Modul enthält betriebsspezifische Funktionen
> ´Autor: Fritz Findig, 01
> ´Stand: 01.10.2012
> ´liefert das Jahr der Betriebsgründung
> Function Betriebsgruendung() As Integer
> Betriebsgruendung = 1887
> End Function

>

> Hier wird wohl lediglich angegeben, dass die
> Betriebsgründung im Jahr 1887 war.

>

> Als Unterschied zwischen Function und Sub habe ich gelernt,
> dass Function einen Wert zurückgibt.
> Sub haben wir bisher immer bei Arrays angewendet. Und bei
> Arrays werden doch auch bestimmten Feldern einfach Werte
> zugeordnet. Wieso hat man oben Funktion verwendet und wieso
> nicht Sub? Ist das weil man bei Excel quasi nichts
> großartig visuell darstellt/verändert, sondern einfach
> einen Wert erhält? Ich mein bei Arrays hat man ja nicht
> für eine Variable einen bestimmten Wert, sondern man hat
> eine Reihe von Werten. Wie erkennt man am besten wann man
> Sub und wann man Function verwenden soll?

Wenn du bspw. eine Quadratwurzel ausrechnen lassen möchtest, dann erwartest du doch auch, dass die Zeile

b=sqrt(a)

der Variablen b die Quadratwurzel von a zuweist, indem die Funktion sqrt selbigen Wert zurückliefert.

Und das würde eben für den Fall, dass du die Funktion sqrt selbst programmieren würdest, nur klappen, wenn die Routine eine Funktion ist. Eine Prozedur (in BASIC: SUB) kann man überhaupt nicht in so eine Zuweisungsgleichung einbauen, sondern man kann sie nur direkt aufrufen, damit sie das tut, wozu sie eben da ist.

Wenn man bspw.

SUB Tatue
  Beep 300,500
  Beep 400,500
END SUB

schreibt, dann wird (vorausgesetzt, die Bibliotheksfunktion Beep wurde vorher ordnungsgemäß deklariert) bei dem Aufruf

Tatue

ein akkustisches Signal ausgegeben, ohne das dich dabei irgendein Rückgabewert interessiert.

In manchen Sprachen, allen voran C und C++, kennt man diese Unterscheidung überhaupt nicht, dort gibt es nur Funktionen, und eine Funktion, die nichts zurückliefert, hat dort den Typ 'void'. In Pascal und Basic hat man seinerzeit dafür eigene Strukturen eingeführt (PROCEDURE in Pascal, SUB...END SUB in Basic), und das hat sich halt bis heute gehalten, weil diese Sprachen ja auch alle genormt sind.

SUB..END SUB verwendet man also für alle Routinen, bei denen nicht unmittelbar ein Wert zurückgeliefert werden soll, sondern irgendetwas anderes getan wird wie bspw. eine Ausgabe auf dem Bildschirm, in eine Datei oder an einen Drucker.

Dein Beispiel mit den Arrays lässt sich so erklären, dass die Werte in diesen Arrays nach Aufruf der Prozedur entsprechend geändert sind, aber da wird kein Wert zurückgeliefert, sondern man kann die Werte des Arrays dann mit anderen Befehlen nach Belieben auslesen.

Gruß, Diophant

Bezug
                
Bezug
Function oder Sub: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:35 So 30.03.2014
Autor: Mathics

Könnte ich also nicht

Sub x ()
Dim Betriebsgruendung As Integer
Betriebsgruendung=1887
End Sub

schreiben?

Wäre das nicht so ähnlich wie ein Array, bei dem ich z.B. schreibe

Sub algD (i As Integer)
Dim myAr (2,2) As Integer
myAr(0,0) = 1
...

Ich hätte hier ja keinen Wert für x zurückgeliefert. Oder habe ich hier noch ein Verständnisproblem/Denkfehler?


LG
Mathics

Bezug
                        
Bezug
Function oder Sub: Antwort
Status: (Antwort) fertig Status 
Datum: 15:23 So 30.03.2014
Autor: Diophant

Hallo,

wenn du das als Sub schreibst, dann kommst du niemals an den Wert 1887. Welchen Sinn sollte das haben?

Gruß, Diophant

Bezug
                                
Bezug
Function oder Sub: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:44 So 30.03.2014
Autor: Mathics

Hallo,

dann habe ich immer noch ein Problem mit der Unterscheidung.

Ich habe jetzt so gedacht:

Function Betriebsgruendung() As Integer
Betriebsgruendung = 1887
End Function

Hier erhalte ich für Betriebsgründung also für meinen Programmnamen einen Wert geliefert. Deshalb ist das Function.

Sub x ()
Dim Betriebsgruendung As Integer
Betriebsgruendung=1887
End Sub

Hier erhalte ich für x  keinen Wert raus, deshalb nehme ich Sub.

Aber ich liege damit höchstwahrscheinlich falsch. Ich kann mir das als absoluter Laie immer sehr schwer vorstellen, was für Abläufe da gerade passieren und deswegen denke ich, habe ich noch Schwierigkeiten den Unterschied zu verstehen.

LG
Mathics


Bezug
                                        
Bezug
Function oder Sub: Antwort
Status: (Antwort) fertig Status 
Datum: 17:10 So 30.03.2014
Autor: leduart

Hallo
i.A. hat man in sub nur lokale Variable, es sei denn du erklärst Betriebsführung als global.
Wenn du spater etwa das Jahr 17 nach Betriebsprüfung haben willst, kannst du einfach Jahr= Betriebsprüfung+17 irgendwo verwenden. wenn du es in der sub hast nur wenn du es als global definiert hast (soweit es  in deiner Sprache globale und lokale Variable gibt.
allerdings könnte man diese Minifunktion natürlich auch einfach durch Betriebsgründung=1887 im  Hauptprogramm  deklarieren.
Gruß leduart

Bezug
                                                
Bezug
Function oder Sub: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:50 So 30.03.2014
Autor: Mathics

Hallo,

die Unterscheidung lokal/global kenne ich in diesem Zusammenhang leider nicht. War mein Gedankengang, den ich im letzten Post geschildert habe denn falsch?

LG
Mathics

Bezug
                                                        
Bezug
Function oder Sub: Antwort
Status: (Antwort) fertig Status 
Datum: 20:02 So 30.03.2014
Autor: Diophant

Hallo Mathics,

ich versuche nochmal, ein paar Dinge klarzustellen, vielleicht verstehst du dann etwas mehr.

Lang bevor sich die heute übliche objekt-orientierte Programmierung etabliert hatte, wurden die sog. strukturierten Programmiersprachen entwickelt, um bei komplexeren Projekten überhaupt noch die Lauffähigkeit eines Programms gewährleisten zu können, indem man Strukturen geschaffen hat, welche die einzelnen Aufgaben einer Software streng voneinander trennen. Diese Strukturen heißen in Basic SUB und FUNCTION. Damit diese Trennung funktionierte, war es generell so, dass Variablen, die innerhalb einer solchen Struktur deklariert werden, außerhalb der Struktur nicht existieren. Solche Variablen nennt man lokal, und das sollte heute noch Standardeinstellungen von Compilern sein, dass Variablen lokal sind, wenn sie nicht anders deklariert werden. Allerdings kann man das bei modernen Programmiersystemen wie VBA auch ändern.

Wenn nun die Variablen innerhalb einer Sub-Struktur lokal sind, dann sind sie wie gesagt von außerhalb der Struktur nicht existent und deswegen kann eine solche Prozedur keinen Wert zurückliefern.

Wenn natürlich mit globalen Variablen gearbeitet wird, dann könnte man in der Tat den fraglichen Wert nach Aufruf der Prozedur auslesen, und dein Einwand wäre dann gerechtfertigt. Allerdings ist dies ein sehr unsauberer Programmierstil, daher hatte ich diese Möglichkeit überhaupt nicht in Betracht gezogen.

Gruß, Diophant

Bezug
                                                                
Bezug
Function oder Sub: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 21:06 So 30.03.2014
Autor: Mathics

Hallo,

das würde also bedeuten:

Sub x ()
Dim Betriebsgruendung As Integer
Betriebsgruendung=1887
End Sub

Betriebsgründung ist hier eine lokale Variable (vgl. Deklaration mit Dim) und deshalb würde ich wenn ich außerhalb dieser Funktion den Wert für die Betriebsgründung ermitteln möchte keinen Wert erhalten.

Function Betriebsgruendung() As Integer
Betriebsgruendung = 1887
End Function

Hier wäre Betriebsgründung jedoch eine globale Variable und damit erhalte ich bei dieser Funktion einen Wert, den ich auch außerhalb jederzeit verwenden kann.

Ist das bis dahin erstmal richtig verstanden?

LG
Mathics


Bezug
                                                                        
Bezug
Function oder Sub: Antwort
Status: (Antwort) fertig Status 
Datum: 21:09 So 30.03.2014
Autor: leduart

Ja

Bezug
                                                                                
Bezug
Function oder Sub: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 21:18 So 30.03.2014
Autor: Mathics

Okey, dann stelle ich mir eigentlich noch diese Fragen:

Sub x ()
Dim Betriebsgruendung As Integer
Betriebsgruendung=1887
End Sub

Wäre das x eine globale Variable? Aber für x würde ich bei Sub ja auch keinen Wert bekommen. Wären bei Sub() und Function() die Werte in der Klammer globale Werte?

LG
Mathics


Bezug
                                                                                        
Bezug
Function oder Sub: Antwort
Status: (Antwort) fertig Status 
Datum: 08:42 Mo 31.03.2014
Autor: Diophant

Hallo Mathics,

du musst schon die gegebenen Antworten besser durchlesen, aber irgendein Standardwerk zum Einstieg in Visual Basic wäre auch nicht schlecht. So was bekommt man in so gut wie jeder Leihbibliothek.

> Okey, dann stelle ich mir eigentlich noch diese Fragen:

>

> Sub x ()
> Dim Betriebsgruendung As Integer
> Betriebsgruendung=1887
> End Sub

>

> Wäre das x eine globale Variable?

x ist keine Variable sondern der Name deiner Sub-Struktur (Prozedur)

> Aber für x würde ich
> bei Sub ja auch keinen Wert bekommen. Wären bei Sub() und
> Function() die Werte in der Klammer globale Werte?

Das kann man so nicht sagen. Wie schon geschrieben wurde: eigentlich geht man davon aus, dass Variablen nur dann global sind, wenn sie als solche (am besten) zu Programmbeginn deklariert wurden. Dies geschieht in Visual Basic mit dem Schlüsselwort PUBLIC. Wenn du also folgendes machen würdest

PUBLIC Betriebsgruendung AS INTEGER

SUB x()
  Betriebsgruendung=1887
END SUB

MsgBox Betriebsgruendung

Jetzt wird ein Fenster mit der Zahl 1887 angezeigt.

Mit SUB x()
  DIM Betriebsgruendung AS INTEGER
  Betriebsgruendung=1887
END SUB

MsgBox Betriebsgruendung

würde die letzte Zeile einen Fehler auslösen, weil die Variable Betriebsgruendung jetzt an dieser Stelle unbekannt ist.

Gruß, Diophant

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "BASIC"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]