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+unsubscr...@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

Antwort per Email an