Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Bruce Willis am 30.08.16 - 16:38:25

Titel: Funktionen kompakt programmieren?
Beitrag von: Bruce Willis am 30.08.16 - 16:38:25
Hallo,

ich habe eine lange FunktionA, die etwa in der Mitte eine Ansicht1 verwendet und danach noch eine zusätzliche Funktion1 aufruft:
call Funktion1(x,y,z)

Dann habe ich eine andere lange FunktionB, die mit der Funktion1 fast identisch ist und sich von der Funktion1 nur durch die Ansicht2 und Funktion2 unterscheidet:
call Funktion2(x,y,z)

Die Parameter x,y,z sind identisch.

Könnte man irgendwie eine gemeinsame Funktion3 erstellen und sie dann etwa so aufrufen?

call Funktion3(Ansicht1,Funktion1,x,y,z)
bzw.
call Funktion3(Ansicht2,Funktion2,x,y,z)

Out of the box geht es nicht, aber vielleicht irgendwie mit Tricks?...

Gruß
Leo

Titel: Re: Funktionen kompakt programmieren?
Beitrag von: eknori am 30.08.16 - 17:40:17
Wie wäre es mit Klassen und OOP?
Titel: Re: Funktionen kompakt programmieren?
Beitrag von: jBubbleBoy am 30.08.16 - 18:00:52
Warum geht das nicht?
Ich kann keinen Widerspruch erkennen ???
Titel: Funktionen kompakt programmieren?
Beitrag von: Tode am 30.08.16 - 18:41:17
Du kannst den zu callenden Funktionsnamen nicht wirklich dynamisch übergeben, aber Du könntest sowas machen: Call Funktion3(Ansichtx,Funktionsname,x,y,z) und in der Funktion3: if Funktionsname = "Funktion1" then Call Funktion1(x,y,z) else call Funktion2(x,y,z)

Aber grundsätzlich bin ich Ulrichs Meinung: ich würde auch mit Klassen und Vererbung arbeiten... Aber ich fürchte, das würde den Rahmen sprengen, das hier zu erklären....
Titel: Re: Funktionen kompakt programmieren?
Beitrag von: Peter Klett am 31.08.16 - 08:25:12
Bei Übergabe des Funktionsnamens könnte man den innerhalb der Function mittels Execute aufrufen, da musst Du aber etwas probieren, da die verwendeten Variablen global deklariert sein müssen. Hier mal ein Gerüst

Code
Dim script As String
executefehler = ""
script = |Sub Initialize
   On Error GoTo Fehler
   ergebnis = | & funktionsname & | (x, y, z)
   Exit Sub
Fehler:
   executefehler = Erl & "-" & Err & " " & Error
   Exit Sub
End Sub|

On Error GoTo Fehler 'für Syntaxfehler des Scriptes
Execute (script)
If executefehler <> "" Then
   'Ein Fehler ist im Execute aufgetreten
Else

End If

Fehler:
   'Fehlerhandling
   ...
Titel: Re: Funktionen kompakt programmieren?
Beitrag von: Tode am 31.08.16 - 09:07:09
Das wird aber problematisch werden, weil Du nur skalare Werte übergeben kannst oder auch die Übergabeparameter global deklarieren musst... Würde ich persönlich nicht machen...
Titel: Re: Funktionen kompakt programmieren?
Beitrag von: Andrew Harder am 31.08.16 - 09:31:26
Andere Idee...
wenn Du die lange Funktion in kleinere Teile zerlegst, so das in FunktionA und FunktionB nur noch
die Unterschiede drinnen sind und die Aufrufe der neuen Funktionen, dann hättest Du einen Kompromiss.
Der doppelte Code wäre weniger es wären dann nur noch die Aufrufe der neuen Funktionen doppelt.

Im nächsten Schritt würde ich dann aber auch eine Klasse draus machen wollen, vor allem wenn der Code
irgendwann irgendwo wieder mal gebraucht werden kann.
Den Namen der Ansicht könnte man dann in einer privaten get Funktion setzen, oder in einer Property.
Das lässt sich dann wunderbar überschreiben.
Oder halt eine public set Methode um die Ansicht zu setzen, halte ich aber nur in seltenen Fällen für sinnvoll.
Titel: Re: Funktionen kompakt programmieren?
Beitrag von: flaite am 31.08.16 - 10:23:01
In OO würdest Du Command oder auch Strategy bis sogar Template Method GOF Pattern verwenden.
Inzwischen haben die Gelehrten aber festgestellt, dass es eigentlich ein bischen dappisch ist, Funktionen in eine Objekt-Struktur zu wrappern, nur damit man sie an eine andere Funktion/Methode übergeben kann.
Die neuen funktionalen Möglichkeiten von Java8 vereinfachen da vieles.
https://www.voxxed.com/blog/2016/04/gang-four-patterns-functional-light-part-1/ (tolle Artikel-Serie, wer sich drauf einläßt).

Vermutlich wäre es besser gewesen, wenn man Ende der 90er funktionale statt OO-Fähigkeiten in LotusScript eingebaut hätte, aber der Zeitgeist war halt nicht so.

JavaScript ist funktionale Sprache genug, dass es direkt unterstützt wird. Seit Ende der 90er. 
Hier ein Beispiel: http://stackoverflow.com/a/5752600

Titel: Re: Funktionen kompakt programmieren?
Beitrag von: Bruce Willis am 01.09.16 - 16:44:26
Wie wäre es mit Klassen und OOP?
Sie sind für mich etwas zu hoch... Muss mich bei Gelegenheit einarbeiten...
Danke, Ulrich.
Titel: Re: Funktionen kompakt programmieren?
Beitrag von: Bruce Willis am 01.09.16 - 16:46:25
Du könntest sowas machen: Call Funktion3(Ansichtx,Funktionsname,x,y,z) und in der Funktion3: if Funktionsname = "Funktion1" then Call Funktion1(x,y,z) else call Funktion2(x,y,z)
Cool!!!
Genau das brauche ich und werde gleich einbauen.
Danke, Torsten!
Titel: Re: Funktionen kompakt programmieren?
Beitrag von: Bruce Willis am 01.09.16 - 16:53:35
Vielen Dank auch an Peter, Andy und Flaite !
 :knuddel: