Seite 1 von 2

Verständnisproblem Declare "Procedure(List)" [gelöst]

Verfasst: 17.08.2014 14:14
von MenschMarkus
Hallo zusammen,

versuche gerade aus einer Prozedur mit einer Linked List an eine weitere Prozedur diese Linked List zu übergeben. Leider muss die zweite aufrufende Prozedur vor der aufgerufenen liegen.
Das Problem ist, dass ich nicht weiss welchen Parameter ich bei der Deklaration angeben muss.

Code: Alles auswählen

Declare Prozedur2(List) ;funktioniert nicht
Declare Prozedur2(List LinkedList()) ;funktioniert auch nicht
Declare Prozedur2(LinkedList());was soll ich sagen, auch nicht...usw.
Declare Prozedur2(value.l) ;funktioniert ebenfalls nicht
Hat jemand eine Idee?

LG
menschmarkus

Re: kleines Verständnisproblem Declare "Procedure(List)"

Verfasst: 17.08.2014 14:18
von NicTheQuick
Also ich sehe hier kein Problem:

Code: Alles auswählen

Declare proc2(List liste.i())

Procedure proc1()
	Protected NewList liste.i()
	
	proc2(liste())
EndProcedure

Procedure proc2(List liste.i())
EndProcedure


proc1()

Re: kleines Verständnisproblem Declare "Procedure(List)"

Verfasst: 18.08.2014 15:05
von Nino
MenschMarkus hat geschrieben:Das Problem ist, dass ich nicht weiss welchen Parameter ich bei der Deklaration angeben muss.
Alle.

Verfasst: 18.08.2014 15:10
von CodeCommander
Besser wäre es "eigentlich" wenn man nur den Prozedurennamen bei der Deklaration angibt
sonst gibt es Redundanz und man muss die Parameter zwei mal anpassen wenn man zb. einen neuen Parameter hinzufügt.
Hat das jemand schon mal im englischen Forum vorgeschlagen? Ich mag redundanten Code nicht. ;)

Re: kleines Verständnisproblem Declare "Procedure(List)"

Verfasst: 18.08.2014 15:18
von Nino
CodeCommander hat geschrieben:Besser wäre es "eigentlich" wenn man nur den Prozedurennamen bei der Deklaration angibt
Dann würden aber entscheidende Informationen fehlen.

Re: kleines Verständnisproblem Declare "Procedure(List)"

Verfasst: 18.08.2014 15:19
von Tommy
Hi CodeCommander :)
Du kannst es mit Macros lösen. Ist zwar nicht sauber bzw. nicht übersichtlich aber immerhin :

Code: Alles auswählen

Macro Proc_Params
Param1, Param2, Param3
EndMacro
Declare Proc (Proc_Params)
Proc (1, 2, 3)
Procedure Proc (Proc_Params)
ProcedureReturn
EndProcedure

Re: kleines Verständnisproblem Declare "Procedure(List)"

Verfasst: 18.08.2014 15:38
von X0r
Besser wäre es "eigentlich" wenn man nur den Prozedurennamen bei der Deklaration angibt
Nein, gerade Parameternamen sind redundant. Für eine Funktionssignatur ist es eigentlich unerheblich, welche Namen sich der Programmierer zusammendenkt. Wichtig sind die Anzahl der Parameter sowie die jeweiligen Datentypen.

Re: kleines Verständnisproblem Declare "Procedure(List)"

Verfasst: 19.08.2014 21:07
von MenschMarkus
NicTheQuick hat geschrieben:Also ich sehe hier kein Problem:

Code: Alles auswählen

Declare proc2(List liste.i())

Procedure proc1()
	Protected NewList liste.i()
	
	proc2(liste())
EndProcedure

Procedure proc2(List liste.i())
EndProcedure


proc1()
Hallo Nic,
schön wär's wenns auch funktionieren würde. Ich erhalte die Fehlermeldung:

LinkedList stimmt nicht mit dem Prozedur-Parameter überein.

Hier mal der komplette Testcode:

Code: Alles auswählen

Structure   TestListe
    Wert1.s
    Wert2.s
    Wert3.s
EndStructure

Declare ListInProcedure(List Liste.l())


Procedure   MakeList()
    NewList  Liste.Testliste()
    AddElement(Liste())
    Liste()\Wert1 = "Wert1"
    Liste()\Wert2 = "Wert2"
    Liste()\Wert3 = "Wert3"

    FirstElement(Liste())
    Debug   "Prozedur 1:"
    Debug   Liste()\Wert1
    Debug   Liste()\Wert2
    Debug   Liste()\Wert3
    Debug   "Listenende"
    Debug   " "
    ListInProcedure(Liste())
    Debug   "Zurück in Prozedur 1!"
;    FirstElement(Liste())
    ForEach Liste()
        Debug   Liste()\Wert1
        Debug   Liste()\Wert2
        Debug   Liste()\Wert3
    Next            
    Debug   "Listenende"
    Debug   " "    
EndProcedure

Procedure   ListInProcedure(List GotListe())
    AddElement(GotListe())
    GotListe()\Wert1 = "Wert4"
    GotListe()\Wert2 = "Wert5"
    GotListe()\Wert3 = "Wert6"
    FirstElement(GotListe())
    Debug   "Innerhalb der Prozedur 2:"  ;Hier kann man natürlich ForEach einsetzen ;-)
    Debug   GotListe()\Wert1
    Debug   GotListe()\Wert2
    Debug   GotListe()\Wert3
    NextElement(GotListe())
    Debug   GotListe()\Wert1
    Debug   GotListe()\Wert2
    Debug   GotListe()\Wert3
    Debug   "Listenende"       
EndProcedure   
    
MakeList()

Re: kleines Verständnisproblem Declare "Procedure(List)"

Verfasst: 19.08.2014 21:14
von mk-soft
Der Type der Liste muss mit angegeben werden...

Code: Alles auswählen

Structure   TestListe
    Wert1.s
    Wert2.s
    Wert3.s
EndStructure

Declare ListInProcedure(List GotListe.TestListe())


Procedure   MakeList()
    NewList  Liste.Testliste()
    AddElement(Liste())
    Liste()\Wert1 = "Wert1"
    Liste()\Wert2 = "Wert2"
    Liste()\Wert3 = "Wert3"

    FirstElement(Liste())
    Debug   "Prozedur 1:"
    Debug   Liste()\Wert1
    Debug   Liste()\Wert2
    Debug   Liste()\Wert3
    Debug   "Listenende"
    Debug   " "
    ListInProcedure(Liste())
    Debug   "Zurück in Prozedur 1!"
;    FirstElement(Liste())
    ForEach Liste()
        Debug   Liste()\Wert1
        Debug   Liste()\Wert2
        Debug   Liste()\Wert3
    Next            
    Debug   "Listenende"
    Debug   " "    
EndProcedure

Procedure   ListInProcedure(List GotListe.TestListe())
    AddElement(GotListe())
    GotListe()\Wert1 = "Wert4"
    GotListe()\Wert2 = "Wert5"
    GotListe()\Wert3 = "Wert6"
    FirstElement(GotListe())
    Debug   "Innerhalb der Prozedur 2:"  ;Hier kann man natürlich ForEach einsetzen ;-)
    Debug   GotListe()\Wert1
    Debug   GotListe()\Wert2
    Debug   GotListe()\Wert3
    NextElement(GotListe())
    Debug   GotListe()\Wert1
    Debug   GotListe()\Wert2
    Debug   GotListe()\Wert3
    Debug   "Listenende"       
EndProcedure   
    
MakeList()

Verständnisproblem Declare "Procedure(List)" [gelöst!]

Verfasst: 19.08.2014 21:23
von MenschMarkus
HA,

kaum macht man es richtig, funktioniert's :mrgreen:

Danke mk-soft :allright:

edit:
sollte man ggf. mit in die PB Hilfe aufnehmen !!