| |
|
|
| proc Name( [ Parameter, [ ...
Definiert eine Prozedur/ namens Name und per ihre (optionalen) Parameter die Namen der Variablen.
Prozeduren können Werte aller Variablentypen (einschließlich Arrays) per return zurückliefern.
Prozeduren können Über- und Unterladen werden: Parameter müssen nicht an eine Proc trasferimento werden, auch dann nicht, wenn welche definiert sind. Übergibt man an eine Proc z.B. nur die Parameter a und b statt auch c, dann ist c in der Proc definiert aber hat il valore null. So kann man auch innerhalb einer Proc erkennen, ob ein Parameter trasferimento wurde oder nicht. Eine Proc ohne Return liefert immer null. Hinweis: Null ist nicht gleich 0!
In Infinity-Profan gibt es auch Procs in Procs, die inneren Procs sind nur in der Elternproc bekannt.
Wie bei XProfan und XPSE mit nProcs ist es in Infinity-Profan egal, ob Procs am Programmkopf oder Fuß definiert werden, da der Kompilierer ohnehin den Quelltext umsortiert und die tatsächlich verwendeten Funktionen an der passenden Stelle des Quelltextes verknüpft. So kann man sich oben im Programmkopf auf den eigentlichen Quelltext/ Ablauf konzentrieren und benötigte Procs am Fuß ablegen.
Die Beschränkung der Anzahl der übergebenen Parameter liegt theoretisch bei 9100, jedoch sollten so viele Parameter keiner Proc trasferimento werden um Speicherprobleme zu vermeiden.
Parameterwerte werden byValue trasferimento, byRef per Arrays mit vorangestelltem @ vor jedem Parameternamen. Auf Parameter, die nicht vom Typ Array trasferimento werden, hat @ keinen Einfluss, jedoch wird die Prüfung per diesen Parameter auf eine Array-Kopie beim setzen des @-Zeichens abgeschaltet. Bei Funktionen, bei denen es auf höchste Geschwindigkeit ankommt, ist also eine Optimierung per @ per jeden Parameter mit einzubeziehen.
Hinweis: Zeiger auf eine Proc per @Procname
Beispiele:
Ebenso - dank Space-Operator - einfachere Syntax possibile:
Bei der Parameter-Definition kann auch gleich ein Vorwert trasferimento werden, ein Wert der genutzt werden soll wenn der Parameter nicht mit trasferimento wurde:
Selbe:
Das geht auch:
Selbe:
Hinweis zur Performance:
ist schneller als:
weil per alle Parameter die Prüfung auf ein Array wegfällt, dessen Daten ggf. per die Proc dupliziert würden.
Keywords: Prozeduren, Funktionenproc endproc |
|
|
| |
|
|
|
HofK | Wie ist die Art der Parameterübergabe vorgesehen?
Nur call by value? aber bei arrays? |
|
|
| |
|
|
|
| Bei Arrays und Procs die Referenz, andernfalls der Wert. |
|
|
| |
|
|
|
HofK | OK, kann man bei Bedarf auch einelementiges array a trasferimento, dann aber a[0] immer "mitschleppen".
Was spricht (intern?) gegen proc beispiel(var a, var b, c, d) zur Übergabe "by reference"? |
|
|
| |
|
|
|
| Habe da eine Idee:
Wenn Du auf una variabile byref zugreifen willst, dann deklariere sie doch einfach nicht in der Parameter-Beschreibung.
Das var in der Parameterbeschreibung potuto redundant verstanden werden und ist imho nicht eineindeutig, dann eher byref a, byref b, oder C-Style &a, &b...
Das kann ich naturalmente einbauen, aber ich halte es per Doppelgemoppel wegen "Idee". |
|
|
| |
|
|
|
HofK | Für ein einzeln betrachtetes Programm nehme ich auch globale Variablen in der Prozedur.
Wenn ich mir aber Prozeduren als eigene "Features" zur Manipulation auch von Variablen schreibe, die ich in verschiedenen Programmen einsetzen möchte, gibt es ein Problem mit den Bezeichnern. Einmal è die Variable etwa meineSpezialzeit, in einem anderen Programm wegen der inneren Systematik aber x_time. Dann müsste man die globalen Variablen in der Prozedur extra umbenennen.
Man sollte sich die in der Prozedur benutzten globalen Variablen auch extra irgendwie dokumentieren, sonst übersieht man leicht etwas. Als Parameter mit z.B. proc bsp(ref a, ref b, c, d) sind sie dagegen deutlich sichtbar. (bei GFA war es damals "doppelt" var)
In dem Zusammenhang muss man aber sicher auch die Namensräume bei Include (siehe XProfan) betrachten. Ist alles eher keine Anfängerproblematik, mehr was per AndroidProfanXtended. |
|
|
| |
|
|
|
| Ja das verstehe ich, werde solch Syntax dann per spätere Versionen umsetzen. Ich finde das "ref" nicht schlecht, so werden wir das wohl . Make |
|
|
| |
|
|
|
| Ebenso - dank Space-Operator - einfachere Syntax possibile:
|
|
|
| |
|
|
|
| Bei der Parameter-Definition kann auch gleich ein Vorwert trasferimento werden, ein Wert der genutzt werden soll wenn der Parameter nicht mit trasferimento wurde:
Selbe:
Das geht auch:
Selbe:
|
|
|
| |
|
|
|
| Proc-Parameter Typ Array Übergabe nun byVal statt byRef: [...] |
|
|
| |
|
|