Ein Sack voller Anfängerfragen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Domino
Beiträge: 22
Registriert: 21.12.2015 21:28
Computerausstattung: Centrino 2x2GHz, GeForce Graka
Linux 3.16

Ein Sack voller Anfängerfragen

Beitrag von Domino »

Hallo alle!

Bin neu hier im Forum und habe mich mit PB immer wieder sporadisch in den letzten Jahren befaßt und durchzuwursteln versucht. Normalerweise schreibe ich in C, PHP und einigen anderen Sprachen. Deshalb scheitere ich auch wiederholt an Verständnisproblemen in Verbindung mit den Modalitäten von PB. Ich hoffe, diese Sammlung an Fehlern, Mängeln und Anregungen an PB und seinen Untersystemen führt nicht zur Auffassung, ich wolle es runterschreiben. Ich liebe und schätze die schnelle Umsetzbarkeit kleinerer Hilfsprogramme, speziell mit schlichter GUI. Da ist bei meinen anderen Sprachen deutlich mehr Aufwand zu treiben. Ursprünglich nur als Daddelsprache für schnelle Helferlein gewählt, zeigt PB erhebliches Programmierpotential. Es wäre schade, auf PB nur wegen einer Anzahl von meist schnell behebbaren Fehlern und meiner begrenzten Kenntnis im Umgang mit der Sprache verzichten zu müssen. Also gleich zu Sache. Übrigens beziehe ich mich dabei auf PB 5.41 beta 1 x86 für Linux.

Editor:
<Return> für Zeilenvorschub funktioniert nicht, nur <Shift><Return>; <Tab> und <Shift><Tab> ebensowenig, nur <Ctrl><i>.
Tabulator des aktuellen Quelltextes wandert bei mehreren vorhandenen Texten in der IDE häufig (nicht immer, Bedingung nicht nachvollziehbar) mit der x-Position des Mauszeigers mit, als würde er mit der Maus gezogen werden.
Keine Blockkommentare möglich wie in C:

Code: Alles auswählen

/* bla bla */
Bei kleineren Standardschriften wie "DejaVu Sans Mono Book 10" ist die Texthöhe gekappt, es verschwinden die Unterstriche (z.B. bei PB-Konstanten, irritierend).
Manchmal werden die Dateinamen in den Tabulatoren vertauscht, speziell, wenn neue Quelltexte geladen oder neu angelegt werden. Nach dem Speichern eines Textes steht der richtige Name häufig wieder im eigenen Tabulator, aber der desjenigen Tabs, mit dem zuvor getauscht wurde, wird nicht mehr korrigiert.
Wie schaltet man den Fensterteilungsmodus ein, um zwei oder mehr Quelltext gleichzeitig betrachten zu können? Das kann jeder halbwegs moderne Editor, z.B. Kate oder KDevelop aus KDE. Ich hoffe, die PB-IDE kann das auch - sonst Fred nachrüsten lassen! ;-)

Offline-Hilfe:
Links funktionieren nicht im Fließtext. Themen sind nur umständlich über "Inhalte" oder "Suche" zu finden.
Aufrufmodalitäten sind in der Hilfe nicht oder nur in unerwarteten Themen explizit angegeben. Nichtexplizite Angaben eröffnen ein weites Feld beliebiger Interpretation nach den eigenen Programmierkenntnissen, auch anderer Sprachen. Z.B.:
  • Aufruf von Prozeduren mit Feldern "by reference" ist in PB selbstverständlich, "by value" anscheinend unmöglich. Viel Zeit mit der Suche nach der Syntax für "Procedure Name(var.l, Array @arr)" verbracht, da in "Prozeduren" die standardmäßige Übergabe "by reference" nur indirekt als Beispielquelltext dokumentiert ist (und "Structure Point" fehlt!). In vielen anderen Sprachen wird vom Compiler standardmäßig "by value" angenommen und "by reference" durch z.B. "@" ermöglicht. In 99% der Fälle wähle ich aus Gründen der Geschwindigkeit und des Speicherverbrauches "by reference" und so suchte ich nach der expliziten Schreibweise dafür.
  • Aufruf von Prozeduren mit Feldern - Feldidentifikation mit Schlüsselwort "Array" notwendig.
  • Aufruf von Prozeduren mit Feldern - Feldidentifikation mit Klammerpaar notwendig.
  • Warum sind Deklarationen für Prozeduren nötig?
  • Welche Deklarationen sind für Prozeduren mit Feldern nötig?
  • Welche Reihenfolge von "Define", "Declare" und "Dim" ist notwendig bei Verwendung von EnableExplicit und Prozeduren mit Zeichenkettenfeldern?
Grafiken für das Aussehen der Gadgets sollten auf der Gadget-Übersichtsseite dargestellt sein, damit man den richtigen Typ nicht erst in den Einzelbeschreibungen suchen muß; dort fehlen auch Abbildungen.
In "Compiler Funktionen" wird Unicode als mit 2 Bytes Speicherbedarf pro Zeichen angegeben. Unicode ist aber eine Angabe zur verwendeten Zeichentabelle, nicht die der Kodierung, aus der der Platzbedarf des Zeichens abzuleiten ist. Auch variablen Platzbedarf pro Zeichen gibt es, z.B. "UTF-8" mit 1-4 Bytes pro Zeichen.
Der Wert der in PB verwendbaren Konstanten sollte leicht auffindbar sein. Warum sollte man erst ein Miniaturprogramm schreiben müssen, das den Wert einiger weniger namentlich bekannter Konstanten per Debug ausgibt? Die eintreffenden Nachrichten der Ereignisschleife wären so sehr viel leichter nachzuvollziehen.
Die Suche erlaubt nicht, mehrere Wörter zu nutzen - weder mit AND, noch mit OR verknüpft.
Lösungen allein im Netz sind NICHT erwünscht, da auf den Inseln vielfach kein Internet verfügbar ist (Stromausfall, Mobilfunknetzausfall, extrem kleine und teure Volumentarife, keine Flatrate verfügbar).

Compiler:
Bekannte und nützliche Funktionen wie strrpos(), explode(), print_r(), sprintf(), preg_match() aus PHP oder C sind in PB unbekannt und müssen händisch nachgebildet werden.
  • strrpos, explode selbst nachgebildet, eigenwillige Nachbildung von sprintf als "Format()" von "mk-soft" und "peterb" aus dem engl. Forum raubmordkopiert (danke!).
  • preg_match mit CreateRegularExpression(), ExtractRegularExpression() und FreeRegularExpression() nachzubilden versucht (vorerst gescheitert, extra Forenthema eröffnet).
Enumeration mit mehreren Konstanten pro Zeile funktioniert nicht. So aber werden die Quelltexte mit ggf. hunderten fast leerer Zeilen aufgebläht.
Fehlermeldungen präzisieren (z.B. Routine(Var, Arr) ergibt "Bad parameter type: an array is expected." statt "Felder müssen bei Prozeduraufrufen als <Feldname>() übergeben werden."; das Klammernpaar dabei fett schreiben).
Warum muß man Prozeduren deklarieren? Kann der Compiler den Quelltext nicht überblicken?
Warum muß einer Prozedur die Dimensionsanzahl des übergebenen Feldes mitgeteilt werden? Was passiert, wenn diese Anzahl von der tatsächlich vorhandenen abweicht? Die Post erwartet doch auch keinen Aufkleber auf einem Brief mit dem Text "Achtung: Ich bin ein Brief!".
Variablen-, Konstanten-, Prozedurnamen usw. sollten ebenfalls Unicode-Zeichen beinhalten dürfen. Viele andere Sprachen akzeptieren dies; warum hält PB am steinzeitlichen ASCII fest?
Warnungen und Fehlermeldungen in Makros sollten in diesen zusammen mit der Aufrufposition des Makros im Quelltext angezeigt werden, da man sich sonst bei insgesamt 7000 Zeilen Quältext leicht einen Wolf sucht.
Mehrzeilige TextGadgets ignorieren Flags wie #PB_Text_Right.
Warum kommen oft (nicht immer!) zwei Meldungen in der Ereignisschleife rein über ein "LeftDoubleClick" eines beliebigen Gadgets?
Es sollten endlich Felder aus Prozeduren und Unterroutinen zurückgegeben werden dürfen.
Vorder-/Hintergrundfarbänderung an Einträgen von ComboGadgets funktioniert nicht: "SetGadgetItemColor(Combo, i, #PB_Gadget_BackColor, $ffffc0)"
Maskierbare Zeichen sollten erlaubt sein, also z.B.

Code: Alles auswählen

"\""+Var+"\" angeklickt."
, statt mit "Chr(34)" herumpfuschen zu müssen.
Gibt es in absehbarer Zeit eine Präzisierung des Vergleichsoperators in Variablenabfragen auf "=="? Damit könnte man endlich Variablenwertzuweisungen in derselben Zeile wie die Abfrage einbauen:

Code: Alles auswählen

If (db = OpenDatabase()) == 0
Schmerzlichst vermisse ich Variablennamenersetzungen wie in PHP. Bei etlichen ähnlich lautenden Variablennamen wie "Audio1", "Audio2", ... könnte man den Schleifendurchlauf für alle diese Variablen sehr elegant mit etwas Äquivalentem von PHPs

Code: Alles auswählen

${'Audio'.$i}
durchführen.
Kontextsensitive GUI ist wünschenswert, worin ähnlich wie im CSS-Flexbox-Modell die Elemente ihre Abmessungen ausdehnen, wie Platz vorhanden ist. Rudimentäre Umsetzung mit PB-Quelltext erprobe ich gerade per Ereignisschleife. Diese Funktion sollte aber automatisiert werden können und innerhalb PB in C oder gleich ASM vorliegen.

Debugger:
F10 öffnet und schließt nur das Fenstermenü und funktioniert nicht als "Schritt darüber".
Der Rückgabewert von einfachen Funktionen sollte beim Überfahren des Funktionsnamens mit der Maus ebenfalls numerisch dargestellt werden, z.B. "blubb = GadgetWidth(#bla)" ergibt dann "97", während "blubb" bereits wieder geändert worden ist.

Quelltextwiederherstellung:
Es läßt sich zwar ein Quelltext in einer beliebigen Version auswählen und der Inhalt manuell kopieren, aber es gibt keine Schaltfläche, um diesen Quelltext in den Editor zu übernehmen.

Beim jeweils ersten Fehler im Editor, in der Hilfe und im Debugger vermute ich, die PB-eigene Ereignisschleife arbeitet fälschlicherweise wie mit gedrückten Alt-Taste (oder einem ähnlichen Effekt). Kein anderes Programm auf meinem Entwicklungsrechner verhält sich derart unvorhersehbar.

Kann sich dabei bitte einer darum kümmern, die Verbesserungsvorschläge in die deutsche Hilfe einzuflechten und vielleicht auch Fred bescheidzugeben für erweiterte Funktionen?

Liebe Grüße
Domino
Centrino 2x2GHz, GeForce Graka, mehrere Linux Mint u.a. mit Mate, Linux 3.16
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Ein Sack voller Anfängerfragen

Beitrag von GPI »

Warum muß man Prozeduren deklarieren? Kann der Compiler den Quelltext nicht überblicken?
Weil der Compiler nur einmal über den Quelltext geht. Ist eine Designentscheidung. Ist aber bei C++ und ähnlichen nicht anders. Man gewöhnt sich dran :)
Warum muß einer Prozedur die Dimensionsanzahl des übergebenen Feldes mitgeteilt werden? Was passiert, wenn diese Anzahl von der tatsächlich vorhandenen abweicht?
Damit der Compiler richtig damit umgehen kann.Es ist halt auch eine Kontrollfunktion, ob das Array in der Procedure richtig angesprochen wird, sprich alle Dimensionen auch angegeben werden. Das kann man nur, wenn man es angibt. Was passiert, wenn sie abweicht? Simpel - ein Compilererror weil das Array nicht mit der Deklaration des Parameters übereinstimmt. Auch ein Grund,warum man die Dimensionsanzahl angeben muss. Anderfalls könnte man das nicht kontrollieren.
Variablen-, Konstanten-, Prozedurnamen usw. sollten ebenfalls Unicode-Zeichen beinhalten dürfen. Viele andere Sprachen akzeptieren dies; warum hält PB am steinzeitlichen ASCII fest?
Beste Kompatiblität? Abgesehen davon sollte man eigentlich Englische Begriffe verwenden. Besonders wenn man den Quellcode weitergeben will. Englisch ist halt international Standard. Sehs mal so, wenn ein Japaner und Chinese einen Quellcode schreiben würde und er nur ihren Zeichensatz verwenden würde, wir hätten überhaupt keine Chance mehr den Quelltext zu lesen. So können wir zwar die Bemerkungen nicht lesen, aber die Variablennamen lesen.
Mehrzeilige TextGadgets ignorieren Flags wie #PB_Text_Right.
Kein wunder, weil TextGadget *IMMER* einzeilig ist. Mehrzeilige TextGadgets gehen nur mit nicht Dokumentierten Aufrufen. Und das bedeutet, das es in der nächsten PB-Version nicht mehr laufen muss.
Es sollten endlich Felder aus Prozeduren und Unterroutinen zurückgegeben werden dürfen.
Tuts aber nicht :) - Grund vermutlich, weil man dann jeweils die Felder kopieren muss, damit sie beim Anrufer ankommen. Das kostet halt Zeit. Aber du kannst ja als ersten Parameter das Array übergeben und es in der Procedure verändert. PureBasic verhält sich da imo ähnlich wie C.
Maskierbare Zeichen sollten erlaubt sein, also z.B. "\""+Var+"\" angeklickt.", statt mit "Chr(34)" herumpfuschen zu müssen.
~"\"" + var + ~"\" angelickt."
einfach ein ~ vor das einleitende " setzen. Die C-Methode mit ' und " geht nicht, weil man mit ' ein Zeichen/Zahl bekommt. 'a' = asc("a")
Gibt es in absehbarer Zeit eine Präzisierung des Vergleichsoperators in Variablenabfragen auf "=="? Damit könnte man endlich Variablenwertzuweisungen in derselben Zeile wie die Abfrage einbauen:

Code: Alles auswählen

If (db = OpenDatabase()) == 0
PureBasic ist ein Basic-Dialekt und eine besonderheit ist, das der Vergleichsoperator und Zuweisungsoperator identisch sind. Wird also nie geben.
probier doch mal folgendes:

Code: Alles auswählen

Macro IfSet(a,b)
a=b
if a
EndMacro

IfSet (a, initwaswesich)
  debug "erfolgreich"
endif
Schmerzlichst vermisse ich Variablennamenersetzungen wie in PHP. Bei etlichen ähnlich lautenden Variablennamen wie "Audio1", "Audio2", ... könnte man den Schleifendurchlauf für alle diese Variablen sehr elegant mit etwas Äquivalentem von PHPs

Code: Alles auswählen

${'Audio'.$i}
durchführen.
Schnell erklärt, PHP ist eine Interpretersprache, da geht sowas. Bei einer Compilersprache werden alle Variablennamen durch Speicheradressen ersetzt, dann geht das einfach nicht mehr. Aber schau dir mal http://www.purebasic.com/documentation/ ... ntime.html an. Dann kann man das wieder machen - ich würde aber davon abraten. Imo ein ganz schlechter Programmierstiel. Pack doch alles in ein Array - dafür sind sie da.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Domino
Beiträge: 22
Registriert: 21.12.2015 21:28
Computerausstattung: Centrino 2x2GHz, GeForce Graka
Linux 3.16

Re: Ein Sack voller Anfängerfragen

Beitrag von Domino »

Ui, das ging schnell. Danke vorerst, GPI!

Prozedurdeklaration: Jetzt nachvollziehbar.
Felder-Dimensionsanzahl: Jetzt nachvollziehbar, da PB einen 1-Pass-Compiler hat.
Unicode in Variablen: Das Argument kenne ich bestens; es greift aber nicht. Warum kann ich in PHP denn dann "$Ärgernisgrößenüberhang" schreiben? Wir haben im Deutschen gerade einmal sieben weitere Buchstaben zum lateinischen Grundalphabet. CJK-Sprechern ist zumeist klar, wie wenig verständlich ihre Schriftzeichen für Nichtmuttersprachler sind. Ein Italiener aber kommt mit einem ä doch wohl klar, so wie wir mit einem ç klarkommen.
TextGadget: Steht so nicht in der Offline-Hilfe; sollte also ergänzt werden.
Felder aus Routinen: Unelegante Lösung, die ich natürlich schon kenne. Versuch macht kluch.
Maskierte Zeichen: Muß ich demnächst probieren und gehört ebenfalls in die Offline-Hilfe.
Vergleichsoperator: Nachvollziehbar.
Variablennamenersetzung: Nachvollziehbar. Die Implementierung per Runtime-Bibliothek macht mir den Eindruck von Frickelei. Das hätte man bestimmt auch eleganter lösen können. Also am besten verzichten. Schade.

Danke nochmal.
Gruß
Domino
Centrino 2x2GHz, GeForce Graka, mehrere Linux Mint u.a. mit Mate, Linux 3.16
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Ein Sack voller Anfängerfragen

Beitrag von Nino »

Domino hat geschrieben:Unicode in Variablen: Das Argument kenne ich bestens; es greift aber nicht.
Wenn man es zuende denkt, greift es durchaus.
Domino hat geschrieben:Wir haben im Deutschen gerade einmal sieben weitere Buchstaben zum lateinischen Grundalphabet. CJK-Sprechern ist zumeist klar, wie wenig verständlich ihre Schriftzeichen für Nichtmuttersprachler sind. Ein Italiener aber kommt mit einem ä doch wohl klar, so wie wir mit einem ç klarkommen.
Und was willst du damit sagen? Dass für Bezeichner doch nicht das ganze Unicode-Spektrum unterstützt werden soll, sondern nur ein paar Sonderzeichen aus eurpopäischen Sprachen? Oder dass doch das ganze Unicode-Spektrum unterstützt werden soll und dass "CJK-Sprecher" beim Schreiben ihres Quellcodes -- trotz vorhandener Möglichkeit -- auf ihre für uns völlig unverständlichen Zeichen verzichten werden, weil sie ja so viel Rücksicht auf die Europäer, Amerikaner etc. nehmen?
Domino hat geschrieben:TextGadget: Steht so nicht in der Offline-Hilfe; sollte also ergänzt werden.
Fühl dich frei, das im passenden Unterforum vorzuschlagen.
Domino hat geschrieben:Maskierte Zeichen: Muß ich demnächst probieren und gehört ebenfalls in die Offline-Hilfe.
Steht da ja auch.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Ein Sack voller Anfängerfragen

Beitrag von mk-soft »

Für die Übergabe von Variablen als ByRef verwendet man Pointer.

Kleines Beispiel...

Code: Alles auswählen

EnableExplicit

; Value als ByRef übergeben

Procedure func1(*value.integer) ; Ein Pointer wird mit ein "*" definiert. Danach kann der Type angegeben werden
  *value\i + 1
EndProcedure

Define value.i = 10
func1(@value) ; Die übergabe des Pointers auf eine Value wird mit ein "@" definiert.
Debug value

; Rückgabe von struktuierten Daten über ein Pointer. (Mehrere Werte zurückgeben)

Structure udtDaten
  iVal.i
  fVal.f
  dblVal.d
  text.s
EndStructure

Procedure func2(*daten.udtDaten)
  
  With *daten
    \iVal = 100
    \fVal = 9.9
    \dblVal = 0.00000000125
    \text = "Hello World"
      
  EndWith
  
  ProcedureReturn #True
  
EndProcedure

Define daten1.udtDaten

Debug func2(@daten1)
; Debug func2(daten1) ; Da Daten eine struktuierte Type ist kann man das "@" weg lassen

Debug daten1\iVal
Debug daten1\fVal
Debug daten1\dblVal
Debug daten1\text
"EnableExplicit" sollte man immer verwenden. Zwingt eine dazu alles Variablen zu deklarieren und somit eine unnötige Fehlersuche nach falsch geschriebenen Variablen...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Ein Sack voller Anfängerfragen

Beitrag von Kurzer »

Domino hat geschrieben:Warum muß man Prozeduren deklarieren? Kann der Compiler den Quelltext nicht überblicken?
Hallo Domino, das hatte mich irgendwann auch genervt. Kann man aber Abhilfe schaffen.

[schleichwerb]
http://www.purebasic.fr/german/viewtopi ... 82#p157682
[/schleichwerb]

Gruß Kurzer
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: Ein Sack voller Anfängerfragen

Beitrag von Omi »

Hallo Domino,

nur mal schnell zwischendurch. Es ist schön die 'Auffälligkeiten' eines Neulings mal gebündelt zu lesen. Ging mir auch so - leider vergisst man's mit der Einarbeitung zu schnell um es später nochmal posten zu können.

Grad mal zum Editor:
Das Problem mit [Return] und [Tab] betrifft die aktuelle Linux-5.41-Beta und sollte mit der kommenden Version bereits gefixt sein.

Das Problem mit den Editor-Tabs (die Reiter / Schaltfläche) ist bereits als Bug gemeldet, tritt aber sehr sporadisch, erst nach einiger Laufzeit oder gar nicht und rechnerabhängig auf und konnte scheinbar von Fred noch nicht brauchbar nachvollzogen werden.

Schriften in gleicher Punkthöhe können unterschiedliche Zeilenabstände haben - dass Teile wie Unterstriche fehlen ist mir allerdings noch nicht aufgefallen. Evtl. mal einige Schriften nachinstallieren und etwas stöbern - ich brauch da je Distribution auch immer etwas bis ich's abnicke. :wink:

Ein geteiltes Fenster (Mehrfachansicht eines Codes) wurde auch schon in der Wishlist gepostet und ist fast unverzichtbar wenn man's mal gewöhnt ist.

Den Rest lese ich mir später nochmal durch - sollte schon lang außer Haus sein.

Gruß, Charly
PureBasic Linux-API-Library: http://www.chabba.de
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Ein Sack voller Anfängerfragen

Beitrag von mhs »

<Return> für Zeilenvorschub funktioniert nicht, nur <Shift><Return>; <Tab> und <Shift><Tab> ebensowenig, nur <Ctrl><i>.
Natürlich funktioniert ein Return. Ist nur gerade ein Bug in der Beta, wird behoben.
Tabulator des aktuellen Quelltextes wandert bei mehreren vorhandenen Texten in der IDE häufig (nicht immer, Bedingung nicht nachvollziehbar) mit der x-Position des Mauszeigers mit, als würde er mit der Maus gezogen werden.
Ist mir noch nie untergekommen, kann ich nicht nachvollziehen.
Keine Blockkommentare möglich wie in C:

Code: Alles auswählen

/* bla bla */
Nicht mit einem eigenen Einleitungszeichen, dafür gibt es wenigstens in der IDE eine Blockkommentarfunktion, die auch sehr gut funktioniert.
Manchmal werden die Dateinamen in den Tabulatoren vertauscht, speziell, wenn neue Quelltexte geladen oder neu angelegt werden.
Ist mir auch noch nie passiert. Vielleicht eine Schwäche deines Linuxsystems?
Links funktionieren nicht im Fließtext. Themen sind nur umständlich über "Inhalte" oder "Suche" zu finden.
Du kannst für jedes Schlüsselwort direkt mit F1 suchen, wenn der Cursor darauf steht.
Viel Zeit mit der Suche nach der Syntax für "Procedure Name(var.l, Array @arr)" verbracht, da in "Prozeduren" die standardmäßige Übergabe "by reference" nur indirekt als Beispielquelltext dokumentiert ist ... In 99% der Fälle wähle ich aus Gründen der Geschwindigkeit und des Speicherverbrauches "by reference" und so suchte ich nach der expliziten Schreibweise dafür.
Es steht doch ganz klar in der Hilfe:

Code: Alles auswählen

... Es ist auch möglich, mit dem Array-Schlüsselwort ein Array als Parameter an eine Prozedur zu übergeben - es wird dabei "by reference" (was bedeutet, dass das Array nicht kopiert wird, sondern stattdessen die Funktionen in der Prozedur das originale Array manipulieren) übergeben. ...
Wenn du für die restlichen 1% tatsächlich by Value brauchst, kannst du das Array in der Prozedur mit CopyArray clonen.
  • Aufruf von Prozeduren mit Feldern - Feldidentifikation mit Schlüsselwort "Array" notwendig.
  • Aufruf von Prozeduren mit Feldern - Feldidentifikation mit Klammerpaar notwendig.
Das sind Syntaxvorgaben, die es in jeder Progammiersprache gibt und jede Sprache ist nunmal anders. In C ist es halt das Semikolon am Zeilenende.
Warum sind Deklarationen für Prozeduren nötig?
Das fragst du nicht ernsthaft, wenn du mit C arbeitest?
  • Welche Deklarationen sind für Prozeduren mit Feldern nötig?
  • Welche Reihenfolge von "Define", "Declare" und "Dim" ist notwendig bei Verwendung von EnableExplicit und Prozeduren mit Zeichenkettenfeldern?
Die Antworten dazu findest du in der Hilfe. Wenn du nicht klar kommst, können wir dir auch gerne in einem seperaten Thread mit konkreter Fragestellung weiterhelfen.
Grafiken für das Aussehen der Gadgets sollten auf der Gadget-Übersichtsseite dargestellt sein, damit man den richtigen Typ nicht erst in den Einzelbeschreibungen suchen muß; dort fehlen auch Abbildungen.
In der Gadgetübersichtsseite der Hilfe und der Einzelbeschreibung werden kleine Abbildungen der jeweiligen Gadgets angezeigt.
Der Wert der in PB verwendbaren Konstanten sollte leicht auffindbar sein. Warum sollte man erst ein Miniaturprogramm schreiben müssen, das den Wert einiger weniger namentlich bekannter Konstanten per Debug ausgibt?
Da gebe ich dir recht, das wäre eine Erleichterung.
Lösungen allein im Netz sind NICHT erwünscht, da auf den Inseln vielfach kein Internet verfügbar ist (Stromausfall, Mobilfunknetzausfall, extrem kleine und teure Volumentarife, keine Flatrate verfügbar).
Oje...
Bekannte und nützliche Funktionen wie strrpos(), explode(), print_r(), sprintf(), preg_match() aus PHP oder C sind in PB unbekannt und müssen händisch nachgebildet werden.
Nicht jede Sprache hat alle Funktionen einer anderen Sprache. Wenn dir eine Funktion abgeht, kannst du im englischen Forum einen Vorschlag dazu machen.
Enumeration mit mehreren Konstanten pro Zeile funktioniert nicht. So aber werden die Quelltexte mit ggf. hunderten fast leerer Zeilen aufgebläht.
Wenn das ein Problem sein sollte, können die Enumerationen per Include ausgelagert werden (was grundsätzlich sinnvoll ist, bis hin zum MVC Prinzip). Ansonsten gibt es dafür Folding in der IDE.
Variablen-, Konstanten-, Prozedurnamen usw. sollten ebenfalls Unicode-Zeichen beinhalten dürfen. Viele andere Sprachen akzeptieren dies; warum hält PB am steinzeitlichen ASCII fest?
In Englisch wird programmiert. Kommentare entweder auch in Englisch oder der eigenen Muttersprache.
Es sollten endlich Felder aus Prozeduren und Unterroutinen zurückgegeben werden dürfen.
Kannst du doch, als Parameter by Reference. Wo ist das Problem? Vergleich es mal mit C. Pointer auf Pointer? Was ist einfacher?
F10 öffnet und schließt nur das Fenstermenü und funktioniert nicht als "Schritt darüber".
Warum sollte das nicht funktionieren? Bei mir klappts wunderbar.
Kann sich dabei bitte einer darum kümmern, die Verbesserungsvorschläge in die deutsche Hilfe einzuflechten und vielleicht auch Fred bescheidzugeben für erweiterte Funktionen?
Vielleicht solltest du selbst eine Vorschläge im englischen Forum an Fred weiterreichen.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Ein Sack voller Anfängerfragen

Beitrag von NicTheQuick »

mhs hat geschrieben:
Tabulator des aktuellen Quelltextes wandert bei mehreren vorhandenen Texten in der IDE häufig (nicht immer, Bedingung nicht nachvollziehbar) mit der x-Position des Mauszeigers mit, als würde er mit der Maus gezogen werden.
Ist mir noch nie untergekommen, kann ich nicht nachvollziehen.
Das Problem habe ich auch manchmal. Stört mich aber nicht weiter. Ich denke aber, dass das ein Bug des TabBarGadgets von STARGATE ist. Also ob irgendein MausButtonRelease verschluckt wird.
mhs hat geschrieben:
Manchmal werden die Dateinamen in den Tabulatoren vertauscht, speziell, wenn neue Quelltexte geladen oder neu angelegt werden.
Ist mir auch noch nie passiert. Vielleicht eine Schwäche deines Linuxsystems?
Ich glaube das gab es mal letztes oder vorletztes Jahr auch bei mir, war aber irgendwann gefixt.
mhs hat geschrieben:
Links funktionieren nicht im Fließtext. Themen sind nur umständlich über "Inhalte" oder "Suche" zu finden.
Du kannst für jedes Schlüsselwort direkt mit F1 suchen, wenn der Cursor darauf steht.
Leider funktioniert das mit der Hilfe unter Linux nicht so zuverlässig wie unter Windows. Da könnte man mal noch etwas nacharbeiten.
mhs hat geschrieben:
Grafiken für das Aussehen der Gadgets sollten auf der Gadget-Übersichtsseite dargestellt sein, damit man den richtigen Typ nicht erst in den Einzelbeschreibungen suchen muß; dort fehlen auch Abbildungen.
In der Gadgetübersichtsseite der Hilfe und der Einzelbeschreibung werden kleine Abbildungen der jeweiligen Gadgets angezeigt.
Falsch. Das haben sie in der Linux-Hilfe einfach weg gelassen. Ich vermisse es aber auch. Vielleicht liegt es auch daran, dass es sowieso bei jedem Fenstermanager anders aussieht. ;)
mhs hat geschrieben:
Variablen-, Konstanten-, Prozedurnamen usw. sollten ebenfalls Unicode-Zeichen beinhalten dürfen. Viele andere Sprachen akzeptieren dies; warum hält PB am steinzeitlichen ASCII fest?
In Englisch wird programmiert. Kommentare entweder auch in Englisch oder der eigenen Muttersprache.
Das sehe ich genauso. Stell dir vor in einem OpenSource-Projekt werden Zeichen benutzt, die es auf deiner Tastatur gar nicht gibt. Wie soll man da ohne vorheriges Refactoring anständig programmieren können? Ich finde es gut, dass es nur reines ASCII gibt.
mhs hat geschrieben:
Es sollten endlich Felder aus Prozeduren und Unterroutinen zurückgegeben werden dürfen.
Kannst du doch, als Parameter by Reference. Wo ist das Problem? Vergleich es mal mit C. Pointer auf Pointer? Was ist einfacher?
Das Rückgeben ganzer Strukturen wäre auch in meinem Interesse. Immerhin hat Purebasic die Funktionalität schon, dass man strukturierte Variablen einander zuweisen kann.
Domino hat geschrieben:F10 öffnet und schließt nur das Fenstermenü und funktioniert nicht als "Schritt darüber".
Das hab ich nicht ganz verstanden. "Schritt darüber"?
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Ein Sack voller Anfängerfragen

Beitrag von Nino »

Domino hat geschrieben:Gibt es in absehbarer Zeit eine Präzisierung des Vergleichsoperators in Variablenabfragen auf "=="?

Der wohl in allen Basic-Dialekten verwendete Vergleichsoperator "=" ist nicht unpräzise.
Domino hat geschrieben:Damit könnte man endlich Variablenwertzuweisungen in derselben Zeile wie die Abfrage einbauen:

Code: Alles auswählen

If (db = OpenDatabase()) == 0
Die Syntax von PB ändern, um das Schreiben von solch schlecht lesbarem Code zu ermöglichen?
Nein danke!
mhs hat geschrieben:
Der Wert der in PB verwendbaren Konstanten sollte leicht auffindbar sein. Warum sollte man erst ein Miniaturprogramm schreiben müssen, das den Wert einiger weniger namentlich bekannter Konstanten per Debug ausgibt?
Da gebe ich dir recht, das wäre eine Erleichterung.
Die Werte der in PB verwendbaren Konstanten findet man in der IDE unter "Werkzeuge" > "Strukturverzeichnis" > "Konstanten".
Antworten