Seite 1 von 5

Grundfunktionen in PureBasic

Verfasst: 29.10.2005 16:02
von ullmann
Hallo,

in dieser Laberecke möchte ich einmal labern (meinem Ärger Freiraum geben) und evtl. eine Diskussion anstoßen.

PureBasic hat unheimlich viele und teils mächtige Befehle. Das ist gut so, es soll keine Einschränkungen geben. PureBasic wird beworben, fast alle bekannten Basic-Schlüsselwörter zu unterstützen.

Ich habe jedoch zig Stunden zugebracht, um einfachste Dinge zu lösen und wäre ohne dieses Forum schon stecken geblieben. Wie ich in dem Forum lese, geht es anderen auch so (ich meine nicht schwierige Probleme, sondern einfachste Sachen).

Beispiel: Ich kannte Print, PrintAt, PrintTab, PrintSpace, Locate etc. und habe lange probiert, um im OpenWindow() mit Drawtext eine Textausgabe mit darunter liegendem OK-Button hinzubekommen. Erst dieses Forum half mir mit TextGadget. Funktioniert übrigens prima.

Jetzt soll im gleichen OpenWindow() das Fenster gelöscht werden um neue Ausgaben anzuzeigen. Ich suchte seit Stunden einen Befehl wie CLS, CLSWindow o.ä. Nichts. Kam denn der PureBasic-Programmierer in den ganzen Versionen nicht einmal auf die Idee für einen solchen Befehl? Hat denn noch niemand einen solchen Befehl gebraucht und ihm das mitgeteilt? Wenn es einen solchen Befehl geben sollte, warum steht er nicht in der Window-Library? Übrigens ClearScreen funktioniert nicht, nachfolgende ButtonGadget-Abfragen werden übergangen und das Fenster wird geschlossen. Außerdem sollte ClearScreen in der - bei mir grauen - Standardfarbe des Fensters löschen, verlangt aber RGB-Farben, wo ich nun wieder zig Stunden recherchieren müßte, wie diese entsprechend der Standardfarbe des Fensters ermittelt werden können.
Ich fand jetzt FreeGadget. Ich habe es noch nicht probiert. Muss ich zum Fenster löschen jetzt erst alle Gadgets dieses Fensters freigeben? Geht das in einer einfachen Schleife? Oder kann ich über das Fenster ein OpenWindowedScreen() legen und das Fenster dann mit ClearScreen löschen?

Ich wollte ein Unterprogramm als Prozedur schreiben, Vorteil: lokale Variablen. Jedoch verlangt Procedure() mindestens eine Variable übergeben und der Aufruf geht auch nur als Funktion x=name(). So brauche ich es nicht. Schade. Bin nun wieder beim rudimentären Gosub.

Wünschenswert - habe ich allerdings in noch keinem Basic-Dialekt gesehen - wären Prozeduren, die gleichzeitig mehrere Ergebnisse zurückgeben können, ohne dass man diese Ergebnisvariablen gleich als Global freigeben muss.

Ich finde, dass PureBasic wenig Datentypen hat und die Math-Library sieht dürftig aus. Wie genau rechnet PureBasic? Ich hatte früher mal Fraktalbilder programmiert und brauchte für immer feinere Grenzen hohe Genauigkeiten. Könnte das PureBasic?

Ich finde keine Befehle wie Max(mehrere Werte), Min (mehrere Werte) oder überhaupt Statistik-Funktionen.

Andere haben Probleme, dass If Int(3.5)=3.5 wahr ergibt. Sicher, es ist alles erklärbar, alles anders lösbar. Aber warum definiert PureBasic bewährte Sachverhalte neu?

Auch scheint es nicht so einfach, eine Enterabfrage auf ein ButtonGadget zu legen, wird doch aber oft benötigt, oder?

Wo ist das gute alte Inkey$? Jetzt InitKeyboard(), Examine(Keyboard), If KeyboardPushed().

Auch die Hilfe: Goto steht nicht unter Goto, sondern unter Andere (ich nehme kein Goto, dennoch sollte es wie die anderen Befehle gelistet sein), Random, RandomSeed hätte ich zuerst in Math gesucht und nicht in Misc, unter Operatoren steht nicht der Zeichenkettenverknüpfungsoperator usw.
Bei WaitWindowEvent() steht: Wartet auf Fensterereignis und ist WindowEvent() vorzuziehen. Wenn WaitWindowEvent() wartet, warum funktioniert es dann nur in einer Schleife?

Ich finde, hier vertut sich PureBasic Chancen. Ich bin ein Anfänger, habe aber schon auf progr. Taschenrechnern, auf Heimcomputern auch in Assembler und in Lotus 1-2-3 Tabellenkalk. programmiert. Ich kenne Leute, die Basic noch einfacher, idiotensicherer (verzeiht diesen Ausdruck) brauchen.

Ich sehe großes Potenzial in PureBasic, aber momentan kommt es mir unausgereift vor. Für die nächsten Entwicklungsschritte sollten Wünsche der Anfänger analysiert werden (und nicht jeder will ein Spiel programmieren), in den Foren auftretende Standard-Probleme analysiert werden, ein Blick auf andere Basic-, Makro- und Programmiersprachen geworfen werden und die zum Lieferumfang gehörenden Libraries dementsprechend ergänzt werden. Sonst muss jeder viele Fahrräder neu erfinden.
Auch von den Tabellenkalkulationen könnte man sich viele leistungsstarke Finanz-, Statistik- und Diagrammfunktionen abschauen und standardmäßig in PureBasic implementieren. Das sind doch die Dinge, die Privatleute und Kleinstfirmen häufig brauchen.
Was macht denn der Hobby-Programmierer? Seine Finanzen, sein Haushaltsbuch, KFZ-Übersicht, ausgeliehene Dinge, Video-, CD-, DVD-verwaltung, evtl. Lagerbestandsführung, Hobbyverwaltung (z.B. Briefmarken), evtl. MP3/WMA-Playlisten verwalten, Kreuzworträtselhilfen,
einfache Spiele, einfache Simulationen. Wäre es nicht gut, wenn es für die Felder und Listen fertige Eingabestrukturen und für die Ergebnisse mächtige Befehle zur tabellierten und/oder Diagramm-Anzeige gäbe?

Genug gelabert und viel gefordert. Leider kann ich aus Zeitgründen mich hier nicht umfassend und aktiv an Verbesserungen beteiligen. Aber sicher gibt es einige Leute, die das gut können und wollen.

Viel Erfolg.

Rainer Ullmann

Verfasst: 29.10.2005 16:47
von Eclipse
Jedoch verlangt Procedure() mindestens eine Variable übergeben und der Aufruf geht auch nur als Funktion x=name()
schlicht und einfach: nein

PS: Ich bin zu faul um auf das andere zeug zu antworten

Verfasst: 29.10.2005 16:56
von ts-soft
PureBasic ist nunmal Ereignis-Orientiert, was bei Windowsprogrammierung ja unumgänglich ist. Du beschreibst hier ja viele Befehle, die aus DOS-Basic-Dialekten stammen, diese findest Du natürlich auch nur in ähnlichen Libs, in diesem Fall also die Console Lib. Das PureBasic bis auf die Schleifen etc. nur Funktionen unterstützt, ist für mich einer der größten Vorteile. Die alten Befehle, wo man anschließend evtl. noch eine Error-Variable abfragt, finde ich unpraktisch.

Zur Procedure: Die kannste als Funktion oder Sub verwenden. Weder Parameter noch Funktionsergebnisse sind erforderlich.

Verfasst: 29.10.2005 17:35
von PMV
Also, zu deinem Text haben ja schon 2 geantwortet ... und wenn ich lese, mache brauchen eine Sprach die "Idiotensicher" ist ... kann ich nur schmunzeln.

Wer wirklich nicht in der lage ist mit aktuellen Programmiersprachen um zu gehen sollte sich einfach überlegen, ob er wirklich programmieren sollte. Nicht jeder kann programmieren, dafür brauch man nun mal gewisse Eigenschafte, logisches Denken, mathematisches Geschick usw.
Dazu ist es unumgänglich in der Lage zu sein, sich selber das nötige Wissen an zu eigenen. Schulen, Studium und anders sind zwar ein gutes Sprungbrett, aber das Wasser muss sich jeder selber holen, in das er reinspringen möchte :wink: . Aber das zählt natürlich nicht für Hobby-Programmierer, aber auch hier sollte man schon ein gewisses Potenzial mitbringen :D .

MFG PMV

Verfasst: 29.10.2005 17:55
von MVXA
Du schreibst, dass PB dort Chancen verhaut. Ich sehe das nicht so.
Purebasic ist kein Compiler für kleine Kinder, die schnell mit unsauberen
Code irgend ein kleines Spiel zusammen frikeln wollen. Dafür kannst du
auch DarkBasic oder so was nehmen.

Außerdem: man lernt _keine_ professionelle Sprache in 5 Minuten. Dafür
braucht es halt einfach bis man sich mit den Befehlen auskennt und weiß
was man wo einsetzen kann.

Verfasst: 29.10.2005 18:27
von Kaeru Gaman
ich kann mich meinen vorrednern nur anschließen.

wenn man console und window verwechselt, sucht man natürlich vergeblich nach clear-befehlen.

und wieso fehlt dir inkey$? schon mal KeyboardInkey() probiert?


daß man sich für eine oberfläche (window, console, DX-screen) entscheiden muß,
ist nunmal so auf nem PC, in jeder programmiersprache.

mir wäre es manchmal auch lieber, wenn der PC so einfach strukturiert wäre wie ein C64, aber das ist er nunmal nicht.
Beispiel: Ich kannte Print, PrintAt, PrintTab, PrintSpace, Locate etc. und habe lange probiert, um im OpenWindow() mit Drawtext eine Textausgabe mit darunter liegendem OK-Button hinzubekommen. Erst dieses Forum half mir mit TextGadget. Funktioniert übrigens prima.
dein beispiel zeigt mir, daß du dir nicht im geringsten über die unterschiedlichen herangehensweisen im klaren bist.

wenn du print willst, nimm ne console.
wenn du einen fensterhintergrund printen willst, bastel es dir mit drawtext.
ein textgadget ist etwas völlig anderes, das ist sozusagen ein fenster-im-fenster.
und wie gesagt, daß es so ist, hängt einfach mit der natur des rechners und seinem betriebssystem zusammen.

Verfasst: 29.10.2005 18:37
von Zaphod
bitte nehm es nicht übel, aber das problem ist
a) du kannst nicht programmieren; sowas wie Max und Min ist kaum eine fünf minuten übungsaufgabe für den informatikunterricht der 7ten klasse einer geamtschule und ist als bibliotheksfunktion überflüssig
b) du hast dir nicht genug die ausführlich dokumentation angesehen
c) du denkst nicht genug über auftretene probleme nach, zumindest legen das viele deiner rückschlüsse nahe

schau dir am besten mal die beispiele im examples ordner genauer an, einige dinge wurden mir auch erst durch studium dieser klar. auch wenn ich schon kleinere mängel an der hilfe festgestellt hab, so ist sie doch weit besser als viele andere die mir bisher begegnet sind.

Verfasst: 29.10.2005 18:39
von DarkDragon
Kaeru Gaman hat geschrieben:und wieso fehlt dir inkey$? schon mal KeyboardInkey() probiert?
Oder ganz einfach nur Inkey(), falls er es in ner Konsole will.

Verfasst: 29.10.2005 18:49
von Danilo
Leute, bevor ihr jetzt alle auf Rainer rumhackt, solltet ihr
erstmal in Ruhe darüber nachdenken was er damit sagen
möchte!

Im Prinzip hat er in vielen Punkten Recht, nur ist er da bei
PureBasic leider an der falschen Stelle gelandet!
Versetzt Euch mal in seine Lage, dann könnt ihr das vielleicht
auch verstehen.
MVXA hat geschrieben:Außerdem: man lernt _keine_ professionelle Sprache in 5 Minuten.
Richtig! Wir reden hier aber über PureBasic und nicht über
eine professionelle Programmiersprache!
ts-soft hat geschrieben:Die alten Befehle, wo man anschließend evtl. noch eine Error-Variable abfragt, finde ich unpraktisch.
Du findest die Möglichkeit Fehler ordentlich zu behandeln
"unpraktisch"? Bist Du eine Programmierschlampe? :D

PB-Befehle geben meist 0 oder True zurück. Oder garnichts.
Manchmal muß man auch raten was es zurückgeben könnte.

Es sollte aber für viele Funktionen auch eine Möglichkeit geben
zu erfahren *welcher* Fehler aufgetreten ist. Wenn eine Datei
nicht erstellt werden konnte gibt die Funktion 0 zurück. Ist nun
der Datenträger voll, war der Datenträger schreibgeschützt,
oder war etwas ganz anderes die Ursache?

Was ist mit Runtime-Fehlern wie bei anderen Compilersystemen
oder Sprachen?
Division durch 0 zur Laufzeit? Out-of-Memory Error? Schreiben
oder lesen von/in einen falschen Speicherbereich, 0-Pointer?

Was passiert wenn im Programm steht 'A$ = B$ + C$' und
auf dem Rechner meines Kunden ist gerade kein Speicher
mehr vorhanden?
Welchen Fehler gibt 'Dim array.l(10000000)' zur Laufzeit aus
wenn der Speicher nicht reserviert werden kann und ich darauf
zugreife?

Nun mal ehrlich ts-soft: Fehlerbehandlungen sind bei jedem
anderen BASIC besser. Runtime-Errors und auch Fehlercodes
die Funktionen setzen/zurückgeben.
In PureBasic wurde das schlicht und einfach vergessen! Damit
ist PB bei manchen Funktionen etwas schneller (weil interne
Fehlerabfragen entfallen), aber absolut unsicher und somit
zur professionellen Programmierung nicht ordentlich zu
gebrauchen.

Wir schlampen hier kleine, einfache Tools hin. Für professionelle
Programme braucht man ein ordentliches Fehlersystem. Wenn
Dein Programm bei einem Kunden einfach ohne Fehlermeldung
crasht, hast Du ein Problem. Und mit "Konnte Datei nicht
anlegen" kann man professionelle Kunden auch nicht gerade
befriedigen. Bei einem Fehler möchte man auch sagen warum
ein Fehler auftrat.


PureBasic hat sehr viele gravierende Mängel, und es funktioniert
auch ganz anders als man das von anderen BASICs gewohnt ist.
Ich kann mich in die Lage von Rainer hineinversetzen. Er gibt
sich Mühe, findet aber einfach nicht den Befehl um das Fenster
wieder zu löschen - weil der Befehl einfach fehlt. Ausgabefunktionen
fürs Fenster sind da, nur eben nicht komplett durchdacht bzw.
beschissen umgesetzt.

Ihr habt Euch alle schon so an die ganzen fehlenden Features
gewöhnt, das ihr meint dies wäre normal. Oder ihr kennt
keine anderen Sprachensysteme oder andere BASICs,
bzw. nur uralte Versionen.
PB fehlt noch viel was andere Systeme schon vor 10 Jahren
hatten. Ja, alles wird bald besser mit v4.0 - das hört man ja
seit vielen Jahren schon.

Um es mal deutlich zu sagen:
Wer mit PureBasic ohne ordentliche Fehlerbehandlung und
viele, viele, viele fehlende Features nicht zurecht kommt, der
ist in Euren Augen einfach zu dumm.
In meinen Augen sieht das ein bissl anders aus, Freunde.

Anstatt jetzt auf Rainer loszugehen, empfehle ich mal über
seine Worte und über PureBasic ernsthaft nachzudenken.
Wenn ihr gescheit seid, solltet ihr sehen das mit PB vieles
nicht stimmt. Dann seid auch so fair und sprecht mal ehrlich
über die Probleme, anstatt sie zu verdrängen und dem User
alle Schuld zu geben!
Nur wenn man es mal anspricht kann es verbessert werden!

Verfasst: 29.10.2005 18:54
von DarkDragon
Danilo hat geschrieben:
MVXA hat geschrieben:Außerdem: man lernt _keine_ professionelle Sprache in 5 Minuten.
Richtig! Wir reden hier aber über PureBasic und nicht über
eine professionelle Programmiersprache!
Wollt ich auch schon sagen, aber PureBasic ist eine professionelle Hobbysprache, d.h. eine professionelle Sprache für Einzelanwender wärend ihrer Freizeit. :wink: Er meint damit also keine Industriesprache.

[EDIT]
Danilo wäre also auch für nen Garbage Collector in PB :freak: .