Variablen/Variablentypen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Variablen/Variablentypen

    Variablen/-typen Tutorial

    Hallo Leute,

    willkommen zurück bei einem weiteren Tutorial in Pawn.
    Ja dieses Tutorial geht auch wieder auf den Wunsch eines Users namens @Cooper: !
    zurück, der sich im Thread Tutorialwünsche ein Tutorial über die unterschiedlichen Variablentypen bzw. allgemein Variablen gewünscht hat.
    So genug geredet, fangen wir doch mal ganz simpel mit der Frage an:


    Was sind Variablen überhaupt und wozu werden Sie gebraucht ?


    Variablen sind wohl überhaupt das wichtigste in allen Programmiersprachen bzw. Skriptsprachen, denn nur mit deren Hilfe kann man ein halbwegs anständiges
    Programm/Spiel etc. schreiben. Ohne diese könnte man keine veränderlichen Werte in einem Programm/Skript haben,das heißt man könnte zum Beispiel nicht mal das Level eines einzelnen Spielers abfragen bzw. setzen.
    Deshalb ist es umso wichtiger für euch zu wissen, was Variablen sind und wozu Sie gebraucht werden.
    Doch was Sind jetzt Variablen? Ich werde nun mal extra für die Anfänger unter uns versuchen, einen schönen Vergleich zu bringen,
    damit Sie das auch richtig verstehen. Eine Variabel kannst du dir ungefähr wie eine Schublade vorstellen, die du beschriftest und deine
    Sachen darin lagern kannst. (Im Skript z.B das Adminlevel,usw.)
    Wenn du deine Sachen austauschen oder Sie verändern willst, kannst du den Inhalt immer wiederfinden dank der passenden 'Beschriftung'.
    Genauso ungefähr ist es im Script auch. Man erstellt, also deklariert sie, und gibt ihr einen passenden Namen.
    Nun kann man die Variable anhand ihres Namens ansprechen und Werte darin speichern ( So wie du z.B deine PC-Spiele in einer Schublade lagern kannst).
    Wenn du jetzt willst, dass der Spieler Lebensenergie verliert, suchst du die Variable, die du davor deklariert hast, und veränderst ihren Wert.
    Kurz und knapp gesagt, sind Variablen also Platzhalter,in der du Werte ablegen kannst.
    Jedoch gibt es auch verschiedene Variablentypen in Pawn. Ein Typ davon sind die veränderlichen Variablen (kommt von 'variabel' = veränderlich) und
    unveränderlichen Variablen (Konstanten). Die veränderlichen Variablen können wir jederzeit einen neuen Wert zuweißen, bei den unveränderlichen nicht.
    ( Wir werden uns hier hauptsächlich mit den veränderbaren befassen, da diese am meisten gebraucht werden)
    Doch bei den Variablen gibt es nun auch verschiedene Variablentypen. Doch was sind jetzt Variablentypen ?
    Um nochmal auf den Vergleich mit der Schublade einzugehen, kann man in eine Schublade nur eine bestimmte Anzahl von Dingen hineinlegen,
    da Sie sonst 'überlaufen' würde. Man muss also in Pawn ( auch in anderen Skript-/Programmiersprachen) vor dem Deklarieren einer Variablen festlegen,
    was und wie viel diese an Werten aufnehmen kann. Von diesen Datentypen gibt es einige.
    Manche können nur wenige Werte annehmen, manche auch größere.
    Die Schlussfolgerung ist, dass größere Datentypen auch mehr an 'Platz' im Skript verbrauchen.
    Deshalb sollte man z.B einer Zeichenkette im Skript nicht 500 Zellen an Platz geben, wenn man nur 128 verbraucht oder weniger.
    Die verschiedenen Datentypen folgen weiter unten.


    Deklarieren und Definieren von Variablen


    Wichtige Begriffe die man sich bei Variablen merken sollten, ist das so genannte, Deklarieren und Definieren von Variablen,
    da diese in der "Fachsprache" häufig benutzt werden. Wenn man dem Skript sagt, welchen Datentypen eine Variable und Namen haben soll,
    hat man diese deklariert. Wenn man der Variablen dann einen Wer zuweißt,hat man sie definiert.
    Jetzt kommen wir dazu wie man diese sozusagen im Skript 'erstellt'.
    Mit dem Schlüsselwort new können wir uns eine veränderbare Variable deklarieren.
    Wichtig dabei ist jedoch, dass der Name nicht mit einem Opertaor (+/-/== etc.) oder einer Zahl anfängt, da wir sonst vom Compiler eine Fehlermeldung bekämen würden.
    Dazu kommt, dass man Variablen global und lokal deklarieren kann.
    Global bedeutet, dass man diese überall im Skript ansprechen kann, in dem man diese zum Beispiel in keinem Sichtbereich deklariert sondern ganz oben im Skript, lokal
    bedeutet, dass die Variable nur in ihrem Sichtbereich gültig ist ( z.B in einer Funktion, der main Funktion z.B , oder einem If-Statement).
    Mit dem Schlüsselwort const können wir eine unveränderbare Variable erstellen, deren Wert außerhalbt ihrer Deklarierung nicht mehr verändert werden darf, da
    wir dann wieder eine Fehlermeldung vom Compiler bekämen würden.
    Also hier wird nochmal beschrieben wie man eine Variable deklariert bzw. definiert.
    Wir schreiben erst einmal das passende Schlüsselwort, also new oder static davor, kommt halt drauf an, was wir
    für einen Variablentypen brauchen gefolgt von dem Variablentypen-Tag und danach der Variablenname. Zum Variablentypen-Tag kommen wir gleich.


    Die verschiedenen Variablentypen


    Jetzt kommen wir zu den Variablentypen.


    Fließ-/Gleitkommazahl:
    Auch genannt im Englischen 'float'. In dieser Variable können wir Kommazahlen z.B Werte aus einem Koordinatensystem speichern.
    Häufig werden diese genutzt, wenn man besonders genaue Werte benötigt.
    Mit dem Tag Float: können wir so einen Typen nutzen: ( Auch genau das Semikolon, also 'Strichpunkt' sagt nur, dass die Anweisung zu ende ist)
    [pwn]new Float:Test;[/pwn]



    Arrays/Zeichenketten/Strings:
    Auch genannt im Deutschen 'Felder'. In diesem Typen können wir Zeichenketten, also z.B Namen von Spielern oder Passwörter speichern.
    Hier brauchen wir keinen keinen Tag davor sondern können die max. Zeichen in eckigen Klammern angeben ( bzw. müssen eckige Klammern setzen).
    Beachtet: Der Nullterminator spielt bei Arrays/strings auch eine große Rolle . Jeden Array, den ihr deklariert, beinhaltet den Nullterminator, d.h. ihr müsst für 5 Zeichen 6 Zeichen
    in die eckigen Klammern packen.
    Hier mal ein paar Beispiele.

    [pwn]new Test[128];[/pwn]
    [pwn]new Text[] = "Hallo";[/pwn]
    Im ersten eine Variable Test mit dem max. Zeichengröße von 128 Zeichen
    im Zweiten geben wir keine max. Größe an und definieren Sie mit dem Wert "Hallo".
    Arrays bzw. Strings ist der Typ, der am meisten Speicher verbraucht, da für jedes Zeichen ein Byte an Speicher benötigt wird.
    Es gibt auch multidimensionale Arrays, jedoch werden diese hier nicht erklärt.


    Integers:
    Im Deutschen so viel wie Ganzzahl. In ihr kann man ganze Zahlen, also auch negative, speichern und verändern.
    Auch wieder kein Tag davor benötigt. Wird benutzt, z.B für das Adminlevel, das logischweiße auch nur ganze Zahlen enthält.
    Ein kleines Beispiel:
    [pwn]new Adminlevel = 3;[/pwn]
    Wir deklarieren eine Integervariable Adminlevel und definieren Sie mit dem Wert 3;


    Booleans:
    Zu diesem Wert fällt mir keine passende Deutsche Bedeutung außer 'Boolsche Werte' ein.
    Diese werden häufig für wahr/falsch (true,false) abfragen genutzt, z.B ob der Spieler schon einmal was eingegeben hat,
    und können mit einem bool: Tag vor der Variablen festgelegt werden. Sie können wie oben schon gesagt nur 2 Werte enthalten (true,false),
    alles andere würde nicht gehen. Booleans verbrauchen am wenigsten an Ressourcen.
    Beispiel:
    [pwn]new bool:IstServerAn = true;[/pwn]


    Es gibt natürlich auch noch andere Typen wie Enumeratoren,usw, die ich jetzt hier aber nicht erklären werde.


    So das war es erst einmal wieder von diesem Tutorial.
    Ich hoffe, dass ich einigen Anfängern damit helfen konnte.
    Freue mich wie immer über Bewertungen + Feedback.
    Weitere grundlegenden Sachen findet ihr hier: Klick mich!


    Mit Freundlichen Grüßen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Logan_Adams ()

  • Auf jeden Fall ein schönes Tutorial!
    Ich bin mir sicher, dass es einigen weiterhelfen wird.

    Im folgenden noch ein paar Anregungen und Verbesserungen:

    Mit dem Schlüsselwort static können wir eine unveränderbare Variable erstellen [...]

    Unveränderbare Variablen (wie im Tutorial auch schon geschrieben: Konstanten) werden mit dem Schlüsselwort const erstellt.

    static hat etwas mit dem Sichtbereich zutun (globale statische Variablen sind nur innerhalb der Datei bekannt, in der sie deklariert wurden) und
    vor allem auch mit dem "Erinnern von Werten" (mir fällt gerade keine bessere Beschreibung ein) - wenn z.B. eine Funktion mit einer lokalen statischen Variablen aufgerufen wird, so
    behält die Variable ihren Wert auch zwischen mehrere Aufrufen. Beispiel:
    [pwn]public OnFilterScriptInit() {
    beispielFunktion();
    beispielFunktion();
    }

    beispielFunktion() {
    static var = 0;
    printf("var = %i", var);
    var++;
    printf("var = %i", var);
    }
    /* Ausgabe:
    var = 0
    var = 1
    var = 1
    var = 2 */[/pwn]


    dass der Name nicht mit einem Opertaor (+/-/== etc.) oder einer Zahl anfängt

    Nicht nur Operator dürfen nicht am Anfang des Namens stehen; alle Sonderzeichen bis auf den Unterstrich "_" sind am Anfang eines Variablennamens tabu (inklusive Zahlen).


    Zu den Zeichenketten:
    im Zweiten geben wir keine max. Größe an und definieren Sie mit dem Wert "Hallo".

    Könnte zu Missverständnissen führen. Wir geben zwar keine maximale Größe an, aber die maximale Größe ist dann automatisch die Länge der gegebenen Zeichenkette (in diesem Fall "Hallo") inklusive einem Zeichen für den Null-Terminator. Also könnte ich der Variable keine Zeichenkette zuweisen, die mehr Zeichen besitzt als "Hallo".
    Arrays bzw. Strings ist der Typ, der am meisten Speicher verbraucht, da für jedes Zeichen ein Byte an Speicher benötigt wird.


    Ansonsten ein gelungener Überblick über Variablen im Allgemeinen - ohne auf zu viele Details einzugehen, sodass Anfänger nicht direkt überrumpelt werden. :)

    Mit freundlichen Grüßen,
    Piranha.
  • Piranha schrieb:

    Auf jeden Fall ein schönes Tutorial!
    Ich bin mir sicher, dass es einigen weiterhelfen wird.

    Im folgenden noch ein paar Anregungen und Verbesserungen:

    Mit dem Schlüsselwort static können wir eine unveränderbare Variable erstellen [...]

    Unveränderbare Variablen (wie im Tutorial auch schon geschrieben: Konstanten) werden mit dem Schlüsselwort const erstellt.

    static hat etwas mit dem Sichtbereich zutun (globale statische Variablen sind nur innerhalb der Datei bekannt, in der sie deklariert wurden) und
    vor allem auch mit dem "Erinnern von Werten" (mir fällt gerade keine bessere Beschreibung ein) - wenn z.B. eine Funktion mit einer lokalen statischen Variablen aufgerufen wird, so
    behält die Variable ihren Wert auch zwischen mehrere Aufrufen. Beispiel:
    [pwn]public OnFilterScriptInit() {
    beispielFunktion();
    beispielFunktion();
    }

    beispielFunktion() {
    static var = 0;
    printf("var = %i", var);
    var++;
    printf("var = %i", var);
    }
    /* Ausgabe:
    var = 0
    var = 1
    var = 1
    var = 2 */[/pwn]


    dass der Name nicht mit einem Opertaor (+/-/== etc.) oder einer Zahl anfängt

    Nicht nur Operator dürfen nicht am Anfang des Namens stehen; alle Sonderzeichen bis auf den Unterstrich "_" sind am Anfang eines Variablennamens tabu (inklusive Zahlen).


    Zu den Zeichenketten:
    im Zweiten geben wir keine max. Größe an und definieren Sie mit dem Wert "Hallo".

    Könnte zu Missverständnissen führen. Wir geben zwar keine maximale Größe an, aber die maximale Größe ist dann automatisch die Länge der gegebenen Zeichenkette (in diesem Fall "Hallo") inklusive einem Zeichen für den Null-Terminator. Also könnte ich der Variable keine Zeichenkette zuweisen, die mehr Zeichen besitzt als "Hallo".
    Arrays bzw. Strings ist der Typ, der am meisten Speicher verbraucht, da für jedes Zeichen ein Byte an Speicher benötigt wird.


    Ansonsten ein gelungener Überblick über Variablen im Allgemeinen - ohne auf zu viele Details einzugehen, sodass Anfänger nicht direkt überrumpelt werden. :)

    Mit freundlichen Grüßen,
    Piranha.
    Ups ja sorry das mit dem static hatte ich verwechselt keine Ahnung warum ich das da hingeschrieben habe.
    Danke, da ist mir wohl ein Fehler unterlaufen.
    Wurde editiert.

    MFG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Logan_Adams ()