Grundfunktionen in PureBasic

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
ullmann
Beiträge: 205
Registriert: 28.10.2005 07:21

Grundfunktionen in PureBasic

Beitrag 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
Eclipse
Beiträge: 99
Registriert: 04.06.2005 18:09

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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!
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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: .
Zuletzt geändert von DarkDragon am 29.10.2005 18:57, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten