🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[geklärt] Gültigkeit von Modul Variablen in Basic: dim, private, public, global …

Alles zur Programmierung im LibreOffice.
Antworten
nitja
Beiträge: 190
Registriert: Di 20. Okt 2020, 15:55

[geklärt] Gültigkeit von Modul Variablen in Basic: dim, private, public, global …

Beitrag von nitja » Di 16. Apr 2024, 08:13

Ich bin darüber gestolpert, dass ich vergessen hatte, dass Variablen, die mit "dim" im Kopf eines Moduls deklariert sind, als "public" (d.h. für alle Module des "Dokuments" gültig) behandelt werden.
Die Änderung der Deklaration auf "private" scheint aber wirkungslos zu sein:
die Verwendung einer im "Modul 1" als "private" deklarierten Variablen in "Modul 2" ohne Deklaration führt nicht zum erwarteten Fehler - obwohl "option explicit" gesetzt ist.
Zuletzt geändert von nitja am Do 18. Apr 2024, 00:07, insgesamt 1-mal geändert.
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

nitja
Beiträge: 190
Registriert: Di 20. Okt 2020, 15:55

Re: Gültigkeit von Modul Variablen in Basic: dim, private, public, global …

Beitrag von nitja » Di 16. Apr 2024, 19:38

Ist wohl komplizierter als ich heute Morgen noch dachte.
Was immer ich mir dazu angelesen hatte und was immer davon in meiner lückenhaften Erinnerung funktionierte war(?) - ist jedenfalls - von der "compatibility" mit VBA abhängig. Und nicht immer steht das bei den Erklärungen zu den je nach Modus unterschiedlich wirksamen Begriffen dabei.
Da ich seit ~20 Jahren kein Interesse mehr an Microsoft und deren Office habe, dachte ich, mir so etwas wie Option Compatible oder CompatibilityMode sparen zu können.
Dass manche (einige, etliche, …?) Konstrukte, die ich als Teil von StarBasic wahrgenommen hatte, aber ohne "compatibility" reine Dekoration ohne Effekt bleiben, schwant mir erst jetzt.
Herauszufinden, wie sich das Laufzeitverhalten mit "compatibility" im Einzelnen ändert, wird wohl noch etliche Stunden Testerei verschlingen. Und dass es anscheinend keine Möglichkeit gibt, unterwegs abzufragen in welchem Modus sich das Programm gerade befindet, macht die Sache nicht wirklich attraktiver.

Was meine zwischenzeitliche Testerei zu den Beobachtungen betrifft, auf die die Themeneröffung (ohne "compatibility") abhebt:
Variablen (und Prozeduren), die in einem anderen Modul definiert sind, sind immer zugänglich ("sichtbar"), egal ob sie mit dim, private, oder public deklariert wurden. Das ist anders als im GUI des "Dokuments", wo z.B. bei der Zuweisung eines Makros zu einem Ereignis auch immer das Modul angegeben werden muss, in dem es steht.
Was ich nicht wirklich klären konnte: Wenn eine Variable (oder Prozedur) in Modul1 und Modul2 mit gleichem Namen definiert ist, welche Definition ist dann gültig? … insbesondere, wenn sie aus Modul3 aufgerufen wird, wo nichts unter dem Namen definiert ist.
Jedenfalls raubt das Verhalten die vermeintliche Sicherheit vor Tippfehlern, auf die ich mich wegen "option explicit" verlassen hatte.
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

nitja
Beiträge: 190
Registriert: Di 20. Okt 2020, 15:55

Re: Gültigkeit von Modul Variablen in Basic: dim, private, public, global …

Beitrag von nitja » Do 18. Apr 2024, 00:06

1) Im Sinne der Eröffnung ist das Thema [geklärt]: mindestens private und public sind in "reinem"(?) StarBasic ohne VBA-Kompatibilität reine Dekoration ohne Effekt. Konstanten, Variable und Prozeduren sind immer public für die gesamte Bibliothek, in der sie definiert sind. Erst mit "option compatible" und "compatibilityMode(true)" würden sie wirksam.

Was Definitionen gleicher Namen in verschiedenen Modulen betrifft:
nitja hat geschrieben:
Di 16. Apr 2024, 19:38
… Was ich nicht wirklich klären konnte: Wenn eine Variable (oder Prozedur) in Modul1 und Modul2 mit gleichem Namen definiert ist, welche Definition ist dann gültig? ²⁾
… insbesondere, wenn sie aus Modul3 aufgerufen wird, wo nichts unter dem Namen definiert ist. …³⁾
Vermutlich (aber das ist eher Spekulation) ist StarBasic insoweit "pragmatisch", dass jeweils die Definition, die es "zuerst findet", gilt. Klar, wenn sie im Modul selbst steht, aus dem sie angefordert wird.
Und auch im Fall ²) ist die Erkennung einfach. Das Verhalten in Fall ³) zu beurteilen würde allerdings erfordern, sich über die Reihenfolge, in der die Module intern durchsucht werden, sicherer zu sein, als ich es bin.

Und was das Vorgehen in meinem aktuellen Projekt betrifft …
… scheue ich die Verwendung der VBA-Kompatibilität, weil ich die weiteren Konsequenzen und unerwünschte Nebenwirkungen noch zu schlecht abschätzen kann.
Insbesondere die Gültigkeit von "compatibilityMode(true)" (Ort und Dauer) und das Fehlen einer einfachen Möglichkeit, das Laufzeitverhalten ggf. vor Ort abzufragen, macht mir die Verwendung zu unsicher.
2) Insofern hat sich das Thema auch für mein aktuelles Projekt [erledigt].
Ich vergebe nun die Namen bei den Definitionen während des ohnehin zu erledigenden Aufräumens mit besonderer Berücksichtigung ihrer Sichtbarkeit/Gültigkeit für die gesamte Bibliothek.
(Nach dessen Abschluss werde ich mich bei Gelegenheit intensiver mit der VBA-Kompatibilität befassen.)

p.s.: Die befürchteten Probleme mit der VBA-Kompatibilität scheinen in meiner aktuellen LO-Version (24.2.) überwunden, die Ergänzungen für StarBasic aber wertvoller als gedacht zu sein. Das werde ich also ab sofort intensiver weiter verfolgen.
LO 24.2.0.3 (X86_64) auf Linux 6.6.26-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

Benutzeravatar
Basilisk
Beiträge: 77
Registriert: Do 26. Jun 2014, 14:06

Re: Gültigkeit von Modul Variablen in Basic: dim, private, public, global …

Beitrag von Basilisk » Mi 3. Jul 2024, 13:56

nitja hat geschrieben:
Do 18. Apr 2024, 00:06
Ich vergebe nun die Namen bei den Definitionen während des ohnehin zu erledigenden Aufräumens mit besonderer Berücksichtigung ihrer Sichtbarkeit/Gültigkeit für die gesamte Bibliothek.
Vielleicht ist die mitgelieferte ScriptForge-Bibliothek interessant für dich.

Edit: Verzeihung, ich habe soeben erst in einer anderen Diskussion gelesen, dass Du schon damit arbeitest.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten