Autor Thema: Funktionen kompakt programmieren?  (Gelesen 4596 mal)

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Funktionen kompakt programmieren?
« 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

« Letzte Änderung: 30.08.16 - 16:41:05 von Bruce Willis »
nobody is perfect but i'm pretty close 

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Funktionen kompakt programmieren?
« Antwort #1 am: 30.08.16 - 17:40:17 »
Wie wäre es mit Klassen und OOP?
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Funktionen kompakt programmieren?
« Antwort #2 am: 30.08.16 - 18:00:52 »
Warum geht das nicht?
Ich kann keinen Widerspruch erkennen ???
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Funktionen kompakt programmieren?
« Antwort #3 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....
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Funktionen kompakt programmieren?
« Antwort #4 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
   ...

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Funktionen kompakt programmieren?
« Antwort #5 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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Funktionen kompakt programmieren?
« Antwort #6 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.
« Letzte Änderung: 31.08.16 - 09:34:30 von Andrew Harder »
Andy

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Funktionen kompakt programmieren?
« Antwort #7 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

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Funktionen kompakt programmieren?
« Antwort #8 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.
nobody is perfect but i'm pretty close 

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Funktionen kompakt programmieren?
« Antwort #9 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!
nobody is perfect but i'm pretty close 

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Funktionen kompakt programmieren?
« Antwort #10 am: 01.09.16 - 16:53:35 »
Vielen Dank auch an Peter, Andy und Flaite !
 :knuddel:
nobody is perfect but i'm pretty close 

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz