Ich denke, meine "Codezeile" dürfte fast jeder kennen. Falls nicht, hier ein Link zum Thema von damals (schon fast sechs Jahre alt ). Damit ist es möglich, in Kontaktpunkten nicht nur einen Lua-Funktionsnamen einzutragen, sondern dieser Funktion auch Parameter mitzugeben.
Diese Codezeile hat nur einen Schönheitsfehler: Der Zugname wird als globale Variable gesetzt, und steht damit im gesamten Skript zur Verfügung, auch ohne ihn als Funktionsparameter explizit mitgegeben zu haben. So eine globale Variable mag zwar auf den ersten Blick praktisch erscheinen, kann dafür aber die Fehlersuche erheblich erschweren. Deshalb mag ich keine globalen Variablen.
Da im Forum immer wieder Beispiele mit der "falschen" Verwendung des Zugnamens auftauchten, probierte ich letztes Jahr etwas herum, wie ich die globale Variable loswerden könnte - und war erfolgreich. Anstatt einer weiteren Variante der Codezeile entschied ich mich diesmal für ein vollwertiges Lua-Modul, das per Modellinstaller installiert und anschließend mit require eingebunden wird.
Die Vorteile von so einem Modul sind unter anderem eine Zentralisierung der Funktionalität (sodass eventuell notwendige Änderungen nur an einer Stelle erfolgen müssen statt verstreut über viele Dateien bzw. alle Anlagen) und vor allem mehr Platz. So konnte ich noch einige nützliche Dinge einbauen wie Konfigurationsmöglichkeiten (dadurch lassen sich alle bisherigen Varianten durch das neue Modul ersetzen) und Hilfen zur Fehlersuche und -vermeidung. Im Endeffekt ist das Modul jetzt 122 Zeilen bzw. 4366 Zeichen lang geworden. Zum Vergleich: Meine Codezeile bestand (je nach Variante) aus nur 142 bis 206 Zeichen.
"Codezeile", "Codeschnipsel", "KP-Parameter", "Funktionsargumente in Kontaktpunkten" - die bisherige Lösung hatte viele Namen und keiner davon passte so richtig. Ein einheitlicher und eindeutiger Name ist aber wichtig, wenn man über etwas reden oder danach suchen will. Und speziell zum Einbinden mittels require braucht ein Modul natürlich auch einen eindeutigen Namen. Nach einigem Brainstorming entschied ich mich für "BetterContacts" - weil dadurch die Kontakte "besser" werden.
Der eigentliche Code war recht schnell geschrieben, aber ohne Doku ist so ein Modul recht nutzlos. Deshalb schlummerte BetterContacts für über ein Jahr auf meiner Festplatte (und auf GitHub), bis ich in den vergangenen Tagen endlich mal Zeit gefunden habe zum Dokuschreiben. So kann ich jetzt endlich verkünden:
BetterContacts funktioniert fast genauso wie meine Codezeile, ist aber noch ein Stückchen besser.
Der Umstieg sollte keine Probleme bereiten.
Den Download sowie die ausführliche Dokumentation (inklusive Schnellstart- und Umstiegsanleitung) findet ihr unter obigem Link auf meiner Homepage.
Falls es Probleme (ich hoffe nicht) oder sonstige Fragen gibt, dürft ihr euch natürlich wie immer gerne melden.
Viele Grüße
Benny
PS: Noch eine Bitte an alle fleißigen Helferlein und Tipp-Geber hier im Forum: Ich erwarte natürlich nicht, dass ihr jetzt alle euren alten Beispiele anpasst. Ich würde mich aber freuen, wenn eure zukünftigen Hilfestellungen nicht mehr die nun veraltete Codezeile nutzen, sondern BetterContacts. Dankeschön