Date: prev next · Thread: first prev next last
2017 Archives by date, by thread · List index


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.