dedlfix: einmalige Funktions Parameterübergabe

Beitrag lesen

Tach!

ich will ne funktion erstellen die nur einmal ausgeführt wird. es geht mir um performance.

Mach es andersrum. Erstell das Objekt oder das Ergebnis oder was auch immer und reich das an diejenigen Teile durch, die es haben wollen, anstatt dass alle an eine definierte Stelle schauen müssen und du dort einen Zirkus machen musst, damit das ja nicht mehrfach ausgeführt wird. Sowas nennt sich Dependency Injection und don't look for things.

Alternativ braucht man einen Mechanismus, der beim Programmstart oder erstmaligem Zugriff einen statischen Konstruktor ausführt, der dafür sorgt, dass die Instanz angelegt und in einer Variable abgelegt wird. Danach ist sie ohne weitere Prüfung abrufbar, solange sie niemand wegräumt. Static Constructors gibt es in C# und für Typescript hat das mal jemand als Feature angefragt. "ahejlsberg" (ja, der A. Hejlsberg, Erfinder diverser Programmiersprachen) hat darauf geantwortet und zumindest sein zweiter Vorschlag lässt sich auch mit einfachem Javascript recht einfach implementieren.

Ist das eine art Singleton Pattern von GoF Paradigmen?

Ein echtes Singleton ist, wenn es nur eine einzige Stelle gibt, an der man das gewünschte Ding bekommt. Bei unechten Singletons kann man theoretisch auch auf anderem Wege zugreifen, aber man diszipliniert sich soweit, das nur auf dem vorgesehenen Weg zu tun.

Anders ist das beim ersten beispiel. da mussder Interprete nur auf false prüfen und dann den wert intern abgreifen. Macht das nur marginal unterschied?

Hat man keine statische Initialisierung, muss beim Singleton üblicherweise bei jedem Zugriff geprüft werden, ob die Instanz schon existiert oder erst noch erstellt werden muss. Bei Dependency Injection übergibt man einfach und greift darauf zu. Du musst dann allerdings selbst dafür sorgen, dass die Instanz existiert, wenn du keinen Dependency Injection Framework verwendest, das sich darum kümmert. Das wird aber auf ähnliche Weise bei jedem Bedarf prüfen, ob das Ding existiert, bevor es es übergeben kann, bringt also keinen Performance-Gewinn. Vermutlich ist die Frage nach der Performance aber eh vernachlässigbar, wenn du nicht gerade unzählig viele Zugriffe auf das Ding programmiert hast.

dedlfix.