Autor Thema: Der Function-Befehl in AGS  (Gelesen 2500 mal)

Rayman

  • Dott-MMM-Entwickler
  • Midlife Crisis Tentakel
  • **
  • Beiträge: 1577
    • Profil anzeigen
Der Function-Befehl in AGS
« am: 08. September 2013, 08:41:29 »
Nachdem ich bei einem Starterpack mal den Global-Script durchgeschaut habe, bin ich oft auf Function-Zeilen gestoßen
und wollte fragen, ob es sich bei function wirklich um einen Zugriffsmodifikator einer Methode handelt?
Wenn ja, ist er öffentlich oder privat?

Habe selber mal in einem Room-Script eine Methode deklariert, doch in demselben Room konnte ich
diese Methode nicht aufrufen.

rulaman

  • Moderator
  • Teenie Tentakel
  • *****
  • Beiträge: 354
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Der Function-Befehl in AGS
« Antwort #1 am: 08. September 2013, 10:25:32 »
Meinst du so was wie:

[ags]
function GetNumber()
{
}
[/ags]


Dann ist das gleichbedeutend mit:

[ags]
int GetNumber()
{
}
[/ags]


function ist dabei nur ein Synonym für int.
Baden ist die einzige Möglichkeit, den Dreck der Füße an den Hals zu bekommen.

Rayman

  • Dott-MMM-Entwickler
  • Midlife Crisis Tentakel
  • **
  • Beiträge: 1577
    • Profil anzeigen
Re: Der Function-Befehl in AGS
« Antwort #2 am: 08. September 2013, 12:09:19 »
Yep, genau das hab ich gemeint.

Ich versteh aber nicht, warum es für int ein Synonym gibt.
Und warum benutzt man trotzdem function, obwohl es das int gibt?

JackLD

  • Tentakelschleim
  • *
  • Beiträge: 4
  • LD steht für Qualität
    • Profil anzeigen
Re: Der Function-Befehl in AGS
« Antwort #3 am: 08. September 2013, 12:20:02 »
'function's sind in AGS in etwa das was Funktionen in C oder C++ sind und keine Objekte wie z.B. in Python oder Javascript: Eine Funktion landet in einem speziellen (skript-lokalen) Namensraum für Funktionen, der zur Compile-Zeit aufgelöst wird, und die danach nur noch eine Nummer ist. Modifikatoren wie 'privat' oder 'öffentlich' sind da nicht nötig - eine Funktion ist wenn man so will immer 'öffentlich'. Diese Modifikatoren braucht man nur bei extrem vererbungslastiger Objektorientierung (wie in Java oder C++) zur eindeutigen Auflösung von Attributnamen in Klassen - und das konnte AGS noch nie.

(( Was du wahrscheinlich indirekt gefragt hast, ist, wie du eine Funktion aus dem Global-Script oder einem Modul in lokalen Scripts verwenden willst. Dafür muss die Funktion nochmal zusätzlich im Global Header oder Modul-Header deklariert werden, damit AGS das Ganze beim Kompilieren auflösen kann. ))

Rayman

  • Dott-MMM-Entwickler
  • Midlife Crisis Tentakel
  • **
  • Beiträge: 1577
    • Profil anzeigen
Re: Der Function-Befehl in AGS
« Antwort #4 am: 08. September 2013, 12:30:36 »
So langsam hab ich das jetzt mit den function's begriffen.

(( Was du wahrscheinlich indirekt gefragt hast, ist, wie du eine Funktion aus dem Global-Script oder einem Modul in lokalen Scripts verwenden willst. Dafür muss die Funktion nochmal zusätzlich im Global Header oder Modul-Header deklariert werden, damit AGS das Ganze beim Kompilieren auflösen kann. ))

Echt stark! Ganz genau, das wollte ich durch diesem Thread auch herausfinden. :)
Jetzt macht für mich der Global-Header auch wieder Sinn.

Ich danke euch, rulaman und JackLD.  :)

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Der Function-Befehl in AGS
« Antwort #5 am: 10. September 2013, 11:08:02 »
Man kann eine eigene Funktion problemlos im selben Raum aufrufen, sie muss aber immer vorher (weiter oben) deklariert werden.

Wenn man eine Funktion aus dem GlobalScript in Räumen verwenden will, schreibt man zuerst "import" und dann die komplette erste Zeile. Am Ende noch einen Strichpunkt statt dem {}-Block.
Beispiel:
Code: (ags) [Auswählen]
// header
import float Summe(float a, float b);

// script
float Summe(float a, float b) {
  return a + b;
}

Mit anderen Worten: eine Funktion ist erstmal privat, d.h. nur im selben Skript aufrufbar. Wenn ich sie aber im header importiere, wird sie öffentlich.
Lege ich mehrere Skripte an, werden die Header oben an alle Skripte angehängt, die weiter unten in der Liste sind. Wenn ich also ein neues Skript ganz oben in der Liste anlege, dort eine Funktion erstelle und sie im eigenen Header importiere, steht sie in jedem anderen Skript zur Verfügung.

Beispiel:
Skript A
Skript B
Skript C
GlobalScript

Skript B wird vor dem Kompilieren so zusammengesetzt:
Header A
Header B
Skript B

Rayman

  • Dott-MMM-Entwickler
  • Midlife Crisis Tentakel
  • **
  • Beiträge: 1577
    • Profil anzeigen
Re: Der Function-Befehl in AGS
« Antwort #6 am: 10. September 2013, 15:52:19 »
Danke khrisMUC für diese tolle und sehr ausführliche Information. :)
Ich verstehe jetzt auch, warum man was im Header reinschreiben muss.

Ich freue mich schon, wenn ich irgendwann eine neue Episode entwickle und
mein erweitertes Wissen einsetzen kann.