Deutsch
Befehlssatz und Hilfe

Sprachelement: proc

 
proc Name( [ Parameter, [ ...

Definiert eine Prozedur/ namens Name und für 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 übergeben 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 den Wert null. So kann man auch innerhalb einer Proc erkennen, ob ein Parameter übergeben 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 übergeben werden um Speicherprobleme zu vermeiden.

Parameterwerte werden byValue übergeben, byRef für Arrays mit vorangestelltem @ vor jedem Parameternamen. Auf Parameter, die nicht vom Typ Array übergeben werden, hat @ keinen Einfluss, jedoch wird die Prüfung für 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 @ für jeden Parameter mit einzubeziehen.

Hinweis: Zeiger auf eine Proc per @Procname

Beispiele:
proc meineProc(a,b,c)

    /// ...
    /// return

endproc


Ebenso - dank Space-Operator - einfachere Syntax möglich:
proc meineProc a b c

    /// ...
    /// return

endproc


Bei der Parameter-Definition kann auch gleich ein Vorwert übergeben werden, ein Wert der genutzt werden soll wenn der Parameter nicht mit übergeben wurde:
proc test(a,b,c=50)

    return c

endproc

print test()// gibt 50 aus

Selbe:
proc test a b c=50

    return c

endproc

print test()// gibt 50 aus

Das geht auch:

Selbe:

Hinweis zur Performance:

ist schneller als:

weil für alle Parameter die Prüfung auf ein Array wegfällt, dessen Daten ggf. für die Proc dupliziert würden.

Keywords: Prozeduren, Funktionen

proc
endproc
 
14.02.2015  
 




HofK
Wie ist die Art der Parameterübergabe vorgesehen?

Nur call by value? aber bei arrays?
 
10.03.2015  
 



Bei Arrays und Procs die Referenz, andernfalls der Wert.
 
11.03.2015  
 




HofK
OK, kann man bei Bedarf auch einelementiges array a übergeben, dann aber a[0] immer "mitschleppen".

Was spricht (intern?) gegen
proc beispiel(var a, var b, c, d)
zur Übergabe "by reference"?
 
12.03.2015  
 



Habe da eine Idee:

Wenn Du auf eine Variable byref zugreifen willst, dann deklariere sie
doch einfach nicht in der Parameter-Beschreibung.

Das var in der Parameterbeschreibung könnte redundant verstanden
werden und ist imho nicht eineindeutig, dann eher byref a, byref b,
oder C-Style &a, &b...

Das kann ich natürlich einbauen, aber ich halte es für Doppelgemoppel
wegen "Idee".
 
12.03.2015  
 




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 heißt 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 für AndroidProfanXtended.
 
12.03.2015  
 



Ja das verstehe ich, werde solch Syntax dann für spätere Versionen
umsetzen. Ich finde das "ref" nicht schlecht, so werden wir das wohl
machen.
 
13.03.2015  
 



Ebenso - dank Space-Operator - einfachere Syntax möglich:
proc meineProc a b c

    /// ...
    /// return

endproc

 
24.05.2015  
 



Bei der Parameter-Definition kann auch gleich ein Vorwert übergeben werden, ein Wert der genutzt werden soll wenn der Parameter nicht mit übergeben wurde:
proc test(a,b,c=50)

    return c

endproc

print test()// gibt 50 aus

Selbe:
proc test a b c=50

    return c

endproc

print test()// gibt 50 aus

Das geht auch:

Selbe:
 
24.05.2015  
 



Proc-Parameter Typ Array Übergabe nun byVal statt byRef:  [...] 
 
11.01.2016  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

12.078 Betrachtungen

Unbenanntvor 0 min.
Sven Bader04.08.2021
Micha1233418.05.2016
Michael W.09.04.2016
HofK08.04.2016
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

iF (7x)
HofK (3x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie