|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
C64-Fan
Anmeldungsdatum: 26.10.2012 Beiträge: 79
|
Verfasst am: 05.06.2014, 10:12 Titel: Fragen zu mehreren Befehlen |
|
|
Hallo
wollte mir mal als kleiner Amateur, alle für mich brauchbaren Befehle zusammenschreiben. Bei einigen hab ich einige Fragen an euch:
• Was ist besser Gosub-Return oder Sub-SubEnd und warum?
• Welchen Variablen-Typ benutzt man am sinnvollsten, alle oder beschrängt man sich nur auf 3 wegen dem Überblick. normal reichen doch Integer und String, oder?
• Ist bei FB sowas möglich "If A <> 4 then" (ist A ungleich 4) wie bei BasicV2.0 ? oder muss man das so machen "If Not A=4 then" oder muss man dann UNTIL statt WHILE nehmen ?
• Erfahrungswerte von euch, wieviel Variablen Shared ihr so (%) oder nutzt ihr mehr lokale Variablen ?
• hab gelesen das FB kein Sound/Musik (im Hintergrund) spielen kann. ist das richtig, bzw nur mit lib ?,
• und was ist eigentlich der Unterschied von LTRIM und RTRIM ? so wie ich gelesen habe steht in der FB-Hilfe die gleiche Funktion?
• Welche typ von Variablen macht VAR bei Ganzzahlen? Integer oder LongInteger ? in der FB-Hilfe steht Integer, aber als Beispiel dazu steht LongInteger
Danke für die Antworten _________________ Mitglied-Nr. 2000 |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 05.06.2014, 11:59 Titel: Re: Fragen zu mehreren Befehlen |
|
|
C64-Fan hat Folgendes geschrieben: | Was ist besser Gosub-Return oder Sub-SubEnd und warum? |
SUB, da Code schön in einem Block gekapselt - GOSUB hingegen erlaubt Sprung zu einer beliebigen Sprungmarke (-> schlechte Strukturierung)
C64-Fan hat Folgendes geschrieben: | Welchen Variablen-Typ benutzt man am sinnvollsten, alle oder beschränkt man sich nur auf 3 wegen dem Überblick. normal reichen doch Integer und String, oder? |
Nein, so würde ich das keinesfalls sagen. Welchen Datentyp man verwendet hängt immer vom Anwendungsfall ab. Wenn z.B. sehr große Zahlen gespeichert werden sollen wirst du Long brauchen; bei Gleitkommaberechnungen Single oder Double, etc. Oft spielen auch Performanz-Überlegungen eine Rolle.
C64-Fan hat Folgendes geschrieben: | Ist bei FB sowas möglich "If A <> 4 then" (ist A ungleich 4) wie bei BasicV2.0 ? oder muss man das so machen "If Not A=4 then" oder muss man dann UNTIL statt WHILE nehmen ? |
FreeBasic orientiert sich syntaktisch an Q(uick)Basic und nicht an C64 Basic. In QBasic sind sowohl der "<>" Operator als auch die Schlüsselwörter UNTIL und WHILE verfügbar - daher ebenso in FreeBasic.
C64-Fan hat Folgendes geschrieben: | Erfahrungswerte von euch, wieviel Variablen Shared ihr so (%) oder nutzt ihr mehr lokale Variablen ? | 0% bzw. so wenige wie möglich, wenn das Programm damit nicht unverhältnismäßig komplexer wird. Globale Variablen machen dein Programm durch deren globale Verfügbarkeit fehleranfälliger und schwerer zu verstehen.
C64-Fan hat Folgendes geschrieben: | hab gelesen das FB kein Sound/Musik (im Hintergrund) spielen kann. ist das richtig, bzw nur mit lib ? | Zumindest ist keine solche Funktionalität in die rtlib integriert (da sind die Standardfunktionen von FB drin), das heißt du musst das selber implementieren. Wie du den Code in dein Programm integrierst ist deine Entscheidung bzw. richtet sich nach dem Code, den du verwenden willst - sei das als externe Bibliothek oder als Include File.
C64-Fan hat Folgendes geschrieben: | und was ist eigentlich der Unterschied von LTRIM und RTRIM ? so wie ich gelesen habe steht in der FB-Hilfe die gleiche Funktion? | Nein, tut es nicht; schau noch mal genauer: http://www.freebasic-portal.de/befehlsreferenz/ltrim-353.html hat Folgendes geschrieben: | LTRIM (Left TRIM) entfernt bestimmte führende Zeichen aus einem String. |
http://www.freebasic-portal.de/befehlsreferenz/rtrim-432.html hat Folgendes geschrieben: | RTRIM (=right trim) entfernt bestimmte angehängte Zeichen aus einem String. |
Sprich: LTRIM entfernt Zeichen auf der linken Seite; RTRIM entsprechend auf der rechten.
C64-Fan hat Folgendes geschrieben: | Welche typ von Variablen macht VAR bei Ganzzahlen, Integer oder LongInteger ? in der FB-Hilfe steht Integer, aber als Beispiel dazu steht LongInteger | Bitte ließ dir die Doku noch einmal. VAR deklariert implizit typisierte Variablen, d.h. der Typ wird aus der Instanz abgeleitet und kann daher sowohl Integer als auch LongInteger oder ein beliebiger anderer Typ sein.
//edit: fallst du meintest welchen Typ eine Ganzzahl als literal hat: Solang sich die Zahl als Integer abbilden lässt, standardmäßig integer, wenn sie diese Größe überschreitet, LongInt
Ein Beispiel: Code: | Var a = 1
#Print TypeOf(a)
Var b = 2ll
#Print TypeOf(b)
Var c = 123456789012345
#Print TypeOf(c) | Wenn du den code compilierst, gibt der Compiler die abgeleiteten Typen aus. Also nochmal zur Sicherheit: das "#print" gibt meldungen beim compilieren aus, nicht zur Laufzeit (wie "print") - wenn das obige Programm ausgeführt wird passiert gar nichts (sichtbares).
a wird Integer, weil standardmäßig jede Ganzzahl Integer wird, sofern sie nicht zu groß ist.
b wird LongInt, weil dies explizit bei der Zahl angeben ist, dass diese vom Typ LongInt ist (Suffix "ll"). Beachte dass das die Zahl 2 ist mit zwei kleinen "L" hinten dran, nicht etwa 211.
c wird LongInt, weil die Zahl zu groß ist für den Integer Datentyp. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 05.06.2014, 15:27 Titel: Re: Fragen zu mehreren Befehlen |
|
|
St_W hat das Wesentliche ja schon gesagt, von mir nur ein paar Ergänzungen:
C64-Fan hat Folgendes geschrieben: | • Was ist besser Gosub-Return oder Sub-SubEnd und warum? |
In FreeBASIC heißt der Block SUB ... END SUB. Einer der vielen Vorteile von SUB ist die Übergabe von Parametern, die man bei GOSUB relativ umständlich und mit viel Aufmerksamkeit verwalten muss. Umgekehrt bietet GOSUB keinen mir bekannten Vorteil, den man mit SUB nicht ebenfalls erreichen kann (sieht man mal von einem Unter-Unterprogramm ab, das nur vom aufrufenden Unterprogramm aus sichtbar sein soll). Ich würde es so formulieren: GOSUB ist ein Vorläufer von SUB und so lange eine gute Erfindung, solange es noch kein SUB gibt.
C64-Fan hat Folgendes geschrieben: | • Welchen Variablen-Typ benutzt man am sinnvollsten, alle oder beschrängt man sich nur auf 3 wegen dem Überblick. normal reichen doch Integer und String, oder? |
Wenn ich "mal eben schnell" eine Variable brauche, verwende ich INTEGER (schnellster Ganzzahlen-Datentyp), SINGLE (oder ggf. DOUBLE) und STRING. Im Detail kann es dann aber durchaus Sinn machen, sich genauer anzusehen, ob ein anderer Ganzzahlen-Datentyp sinnvoller ist. Wenn ich kleine Ganzzahlen in rauen Mengen auf die Festplatte zu speichern habe, nehme ich dann doch lieber kleinere Datentypen, TB-Festplatten hin oder her.
St_W hat Folgendes geschrieben: | Wenn z.B. sehr große Zahlen gespeichert werden sollen wirst du Long brauchen |
Gemeint war sicherlich LONGINT (ggf. sogar ULONGINT, wenn es nicht negativ werden kann und du doppelt so große positive Zahlen zur Verfügung haben willst).
C64-Fan hat Folgendes geschrieben: | • Ist bei FB sowas möglich "If A <> 4 then" (ist A ungleich 4) wie bei BasicV2.0 ? oder muss man das so machen "If Not A=4 then" oder muss man dann UNTIL statt WHILE nehmen ? |
Zu letzter Frage: Ob du
oder
schreibst, ist hauptsächlich Geschmackssache.
C64-Fan hat Folgendes geschrieben: | • Erfahrungswerte von euch, wieviel Variablen Shared ihr so (%) oder nutzt ihr mehr lokale Variablen ? |
Ich gehöre vermutlich zu denen hier im Forum, die relativ viel SHARED einsetzen.
Das liegt an meinem Programmierstil, da ich SUB sehr gerne verwende, um das Programm zu strukturieren, andererseits dadurch eine ganze Reihe an Variablen habe (Spielfeld-Daten usw.), die ich in fast jeder SUB brauche. Nun könnte ich entweder immer eine große Liste an Parametern übergeben oder (mache ich auch manchmal) alle allgemeinen Daten in ein großes UDT packen und dieses übergeben, was dann letztlich aber kein großer Unterschied mehr zu globalen Variablen darstellt ...
Nichtsdestotrotz: Selbst wenn ich recht viel SHARED einsetze, nutze ich es (für meinen Programmierstil) so wenig wie möglich und ausschließlich für Variablen, die ich wirklich in den allermeisten Prozeduren brauche.
C64-Fan hat Folgendes geschrieben: | • Welche typ von Variablen macht VAR bei Ganzzahlen? |
Ich halte VAR persönlich für keinen erstrebenswerten Befehl - bei DIM AS Datentyp weiß man sofort, was Sache ist und muss nicht noch Nachforschungen anstellen was bei
für ein Datentyp gemeint ist. VAR scheint mir was für faule Leute zu sein, die keine Kontrolle über ihre Datentypen haben.
(Vielleicht macht es im Zusammenhang mit Vererbung Sinn?) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.06.2014, 16:50 Titel: |
|
|
FreeBasic bietet mittlerweilen sogar Objektorientierung, also Konzepte aus der professionellen Software-Entwicklerwelt.
Für einen Anfänger sinnvoll: Schritt um Schritt, idealerweise Erfahrung sammeln: Nachdem Du im ersten Programm mit GOSUB den ersten "Stolper" aufgrund eines Side-Effekts gemacht hast, wirst Du SUB und FUNCTION mit lokalen Variablen schätzen wissen.
Und sobald eines Tages ein Programmierprojekt derart komplett wird, dass eine grosse Sammlung loser SUBs und FUNCTIONs nicht mehr handhabbbar wird, wirst Du TYPE mit sog. Methoden (=auch SUBs und FUNCTIONs, die aber unmittelbar mit einer Variable Deines TYPEs "verheiratet" sind) und damit die Objektorientierung schätzen lernen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 06.06.2014, 01:48 Titel: Re: Fragen zu mehreren Befehlen |
|
|
nemored hat Folgendes geschrieben: | St_W hat Folgendes geschrieben: | Wenn z.B. sehr große Zahlen gespeichert werden sollen wirst du Long brauchen |
Gemeint war sicherlich LONGINT (ggf. sogar ULONGINT, wenn es nicht negativ werden kann und du doppelt so große positive Zahlen zur Verfügung haben willst). | Ja; Danke für die Richtigstellung
in FreeBasic hab ich VAR auch noch nicht benutzt, aber in C# benutzte ich das gern für komplexe Datentypen. Also nicht etwa für Integers o.ä. sondern für komplexere Strukturen. Ich verwende es hautpsächlich (in C#) um Strukturen (Objekte) als Rückgabewert eines Funktionsaufrufs zwischenzuspeichern - also quasi für temporäre Variablen, die nur in einem begrenzten Bereich benötigt werden/gültig sind.
Man erspart sich im Grunde nur etwas Schreibaufwand und der Code wird etwas kürzer - manche argumentieren der Code würde dadurch besser lesbar; andere genau das Gegenteil. Ich weiß nicht genau wie es in FB ist, aber ich denke dass ebenso wie in C# weder ein Vorteil noch ein Nachteil hinsichtlich Performance entsteht. Darum ist es rein geschmackssache, ob man VAR verwendet oder nicht. Zu viel sollte man es jedoch trotzdem keinesfalls verwenden; das verwirrt dann eher und macht ein Programm sicherlich unleserlicher (wenn man z.b. für primitive Datentypen wie Integer oder String VARs verwendet).
In C# gibts übrigens einen Anwendungsfall, wo VAR benötigt wird, und zwar für anonyme Typen. Ich wüsste jedoch nicht, dass es sowas in FB gibt, wo es ja leider nichtmal anonyme Funktionen gibt _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
C64-Fan
Anmeldungsdatum: 26.10.2012 Beiträge: 79
|
Verfasst am: 06.06.2014, 11:21 Titel: |
|
|
man, danke erstmal für die raschen und guten Antworten von euch
- das mit VAR werd ich vermeiden.
- mit dem Sound muss ich mich reinarbeiten, kann weder mit include files noch mit bibl. umgehn.
(wär nen Anreiz an die Weiterentwickler von FB die Sound und Play-Funktion miteinzubaun
mach mir so ne kleine 4-6 Seiten-Anleitung wo alles notwendige, einfach geschrieben drinsteht und ich mal schnell nachschaun kann. die leg ich mir dann neben den PC und los gehts.
Die Idee für "Amtsvogt 3" steht schon _________________ Mitglied-Nr. 2000 |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 06.06.2014, 14:05 Titel: |
|
|
Zitat: | - mit dem Sound muss ich mich reinarbeiten, kann weder mit include files noch mit bibl. umgehn. |
Das funktioniert insgesamt nicht anders als mit den FreeBASIC-eigenen Befehlen. Du brauchst einmal ein #INCLUDE, um die Bibliothek einzubinden, und dann eine Übersicht der neuen Befehle, die dir zur Verfügung stehen.
Vieleicht hilft dir Kapitel 9.2 im Spieleprogrammier-Buch weiter. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
C64-Fan
Anmeldungsdatum: 26.10.2012 Beiträge: 79
|
Verfasst am: 07.06.2014, 21:23 Titel: |
|
|
danke nemored
und:
sch.... hab grad gemerkt das das in "Allgemeine Fragen zu QBasic " steht. mein Beitrag sollte in "Allgemeine Fragen zu FreeBasic" stehn.
hatte die befehle ja aus fb rausgeschrieben und will mit fb arbeiten
sorry,
wenn einer der Mods so lieb wäre das dahin zu verschieben. _________________ Mitglied-Nr. 2000 |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|