Hallo Werner,
siehe es pragmatischer ( und programmtechnisch logisch). Ich kürze mal
Deine ausführlichen Tests und Ideen.
Eine Funktion wird mit Parametern aufgerufen. Die Liste der Parameter
musst Du nun "parsen" - das würdest Du auch in jedem anderen Programm
ganz einfach machen: Den übergebenen Ausdruck (Also die Liste der
Parameter) nehmen, am vereinbarten Trenner teilen und dann einzeln
auswerten.
Ich versuche es in Basic auszudrücken:
meineFunktion(a,b,c) -> drei Parameter übergeben -> entsprechend
Sprache (basic) Komma-separiert.
- nun löse ich den Ausdruck (a,b,c) auf - Parameter = split("a,b,c",
",") - also ich teile am Tennner - und erhalte einen Array (oder eine
Liste) mit drei Elementen. Jedes Element wird nun einzeln ausgewertet.
So macht es auch das Programm - ganz egal, was Du übergibst. Und die
werden nun entsprechend Ihrer Reihenfolge auch genau so übergeben. An
die Funktion, die Parameter übernimmt.
Das "missing" muss sich darauf beziehen, dass ein Parameter fehlt - das
kann aus der Logik heraus nur am Ende passieren. d.h. der übergeben
Array hat weniger Elemente als die Funktion theoretisch übernehmen kann
- und damit es zu keinem Fehler kommt, wird der/die evt. fehlende/n als
"optional" gekennzeichent.
Insofern kann auch nur am Ende der Kette Parameter fehlen -> alle
anderen werden übergeben! Das ist die Programmlogik.
Es wäre ein ungültiger Ausdruck zu schreiben: sub MeineFunktion(a,
optional b, c) - egal ob mit oder ohne Deklaration. In dem Fall wäre ja
nur der mittlere Parameter optional - das aber kann die Logik nicht
abbilden. Steht auch irgendwo so in der Hilfe: "wird ein Parameter als
optional gekennzeichnet, müssen auch alle nachfolgenden als "optional"
gekennzeichnet sein".
Wenn Du eine Funktion wie in deinem Beispiel mit funktion(a,,c)
aufrufst, übergibst Du drei Parameter! auch wenn der mittlere leer ist -
der Array besitzt drei Elemente - die dann auf deine Funktion
entsprechend gemappt werden. Die Besonderheit bei Basic ist eben, dass
Variablen erst zur Laufzeit von Basic erzeugt werden entsprechend des
übergebenen Typs (der Interpreter übernimmt die Konstruktion) - es sei
denn , du deklarierst den Typ selbst - dann wird die Variable schon mal
erzeugt (mit dem standard-Vorgabewert). Die Unsauberkeit der Sprache ist
wahrscheinlich, dass das Konstrukt meineFunktion(a as integer, b, c as
integer) bei der Interpretation die Variablen a + c bereits erzeugt
entsprechend der Deklaration, b aber erst, wenn der Interpreter den Typ
kennt entsprechend der Übergabe-Werte. Wenn dann nix interpretierbar ist
(leerer Array-Wert) tut er halt nix... und dann gibt es die Variable b
eben noch nicht - und das isMissing(b) wirft true aus, weil die Variable
eben noch nicht existiert. Das sind die Unsauberkeiten der Basi-Sprache.
Korrekte Programmierung heisst aber für mich, die Programm-Logik
beizubehalten. Der zweite Parameter (b) wird bei Dir eben übergeben-
wenn auch "nicht bekannt" "0", oder "-1" - keine Ahnung... das bestimmst
Du selbst und musst den Fall abfangen.
Wenn die Hilfe von Basic hier missverständlich ist oder unvollständig...
na ja, wird ja auch nur von Menschen geschrieben;)
Viele Grüße
Thomas
Am 07.12.2017 um 08:46 schrieb OoOHWHOoO:
[.. entsorgt..]
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.