Deutsch
Forum & Hilfe

Sprachelement: var

 
var Bezeichner [ = Wert ] [, Bezeichner [ = Wert ], ...

Deklariert Variablenbezeichner und weist ihnen ggf. Werte zu.

Es können beliebig viele Variablen erstellt werden, erlaubt für die Bezeichnernamen sind Buchstaben und Ziffern und das erste Zeichen muss ein Buchstabe sein. Auch erlaubt sind die Zeichen _ und .

Hinweis: Var als Funktion kann verwendet werden um den Variablentyp zurückzuerhalten.

Siehe auch: § 5 - Datentypen

Beispiele für die Verwendung von Variablen:

Einfache Variable:
var a,b,c
a=10
b=20.5
c="Hallo Welt"
print a,b,c// gibt 10 20.5 Hallo Welt aus

Einfache Variable, kompaktere Schreibweise:
var a=10,b=20.5,c="Hallo Welt"
print a,b,c// gibt 10 20.5 Hallo Welt aus

Array:
var a=[10,20,30]
print a[1]// gibt 20

Assoziative Arrays:
var a=["Magnet"=5,"Faktor"=5.5,"Farbe"="Grün"]
print a["Faktor"]// gibt 5,5

Arrays als Objekte:

Arrays als Objekte:
var a,a.liste
a.magnet=5
a.faktor=5.5
a.farbe="Grün"
a.liste=50
print a// gibt magnet=5, faktor=5.5 farbe=Grün aus, aber nicht liste=50 da a.liste durch var eigenständig deklariert wurde.

Typ einer Variablen beziehen:
var a="Test"
print var(a)// gibt string aus

Keywords: var,declare,gettype

 
01.12.2014  
 



Achtung Änderung für Arraydeklaration:

aus var o=array(10,20,30) wird var o=[10,20,30]
 
06.12.2014  
 



Neu:

Var kann auch verwendet werden um den Variablentyp zurückzuerhalten. In diesem Fall ist Var als Funktion zu verwenden: var a=1.1;print var(a) //gibt float aus.
 
13.05.2015  
 




HofK
Im Zusammenhang mit dem "Space-Operator"  [...]  beim Präkompilierer wäre ein optionales Sonderzeichen zur Typermittlung für total Schreibfaule super. Bei einer polymorphen Funktionsdefinition sieht man die Reduzierung des Schreibstreassfaktors deutlich.
proc poly a b c// der Präkompilierer richtet das

    //  Typprüfung mit optionalem Sonderzeichen (bspw °) wäre etwas für total Schreibfaule wie ...

    if ((°a==long)&&(°b==long)&&(°c==null))

        return "Das Ergebnis ist: " + str(a-2*b)

    elseif ((°a==string)&&((°b==long)||(°b==float))&&((°c==long)||(°c==float)))

        return  a + " = " + str(sqrt(a*a+b*b))

    elseif ((°a==string)&&(°b==null)&&(°c==null))

        return "Genau eine Zeichenkette wurde übergeben."
        // ... Befehle zur Verarbeitung der Zeichenkette ...

    elseif ((°a==string)&&((°b==long)||(°b==float))&&(°c==null))

        if (°b==long)

            return "Ãœbergabe: 1. Parameter Zeichenkette, 2. Parameter ganze Zahl"

        endif

        if (°b==float)

            return "Ãœbergabe: 1. Param. ist Zeichenkette, 2. Parameter Dezimalzahl"

        endif

        // ... Befehle zur Verarbeitung der Zeichenkette und/oder der Zahl ...

    elseif ((°a==string)&&((°b==long)||(°b==float))&&(°c==bool))

        return "Parameterübergabe: 1. Zeichenkette, 2. Zahl, 3. Wahrheitswert
        // ... Befehle zur Verarbeitung der drei Parameter ...

    else

        return null

    endif

endproc

// so ist es nach derzeitiger Referenz mit var( )

proc poly(a,b,c)

    //  Typprüfung mit var()

    if ((var(a)==long)&&(var(b)==long)&&(var(c)==null))

        return "Das Ergebnis ist: " + str(a-2*b)

    elseif ((var(a)==string)&&((var(b)==long)||(var(b)==float))&&((var(c)==long)||(var(c)==float)))

        return  a + " = " + str(sqrt(a*a+b*b))

    elseif ((var(a)==string)&&(var(b)==null)&&(var(c)==null))

        return "Genau eine Zeichenkette wurde übergeben."
        // ... Befehle zur Verarbeitung der Zeichenkette ...

    elseif ((var(a)==string)&&((var(b)==long)||(var(b)==float))&&(var(c)==null))

        if (var(b)==long)

            return "Ãœbergabe: 1. Parameter Zeichenkette, 2. Parameter ganze Zahl"

        endif

        if (var(b)==float)

            return "Ãœbergabe: 1. Param. ist Zeichenkette, 2. Parameter Dezimalzahl"

        endif

        // ... Befehle zur Verarbeitung der Zeichenkette und/oder der Zahl ...

    elseif ((var(a)==string)&&((var(b)==long)||(var(b)==float))&&(var(c)==bool))

        return "Parameterübergabe: 1. Zeichenkette, 2. Zahl, 3. Wahrheitswert
        // ... Befehle zur Verarbeitung der drei Parameter ...

    else

        return null

    endif

endproc

 
14.05.2015  
 



if ((°a==long)&&(°b==long)&&(°c==null))

da könnte man doch sagen, statt:

°c==null

einfach

c==null

denn Typ Null kann ja nur den Wert null liefern - hier also ein Typenzeichen
unnötig.

So weitergedacht überlege ich natürlich, ob nicht einfach

a==long oder s==string oder f==float,

schließlich werden hier long, float etc nicht als Funktion verwendet
sonden könnten als Konstante verstanden werden. Ich muss mal
herausbekommen ob sich das mit irgendwas beißt.
 
14.05.2015  
 



Ach und übrigens Deine Zeile:
return  a + " = " + str(sqrt(a*a+b*b))

geht dank Space-Operator viel einfacher:
return  a + " = " + str sqrt a*a+b*b

und eigentlich sowieso nur so notwendig:
return  a + " = " + sqrt a*a+b*b

Weil string+float = string
 
14.05.2015  
 




HofK
... denn Typ Null kann ja nur den Wert null liefern - hier also ein Typenzeichen unnötig ... immer auch noch diese Sonderfälle

... übrigens Deine Zeile: ...soweit war ich noch garnicht! Da ist noch ganz schön viel Potential.
 
14.05.2015  
 




HofK
Hm, wodurch wird klar, ob das letzte Pluszeichen eine Stringanfügung oder eine Addition ist? Leider ist + ja üblicherweise doppelt belegt.

return a + " = " + sqrt a*a+b*b
 
15.05.2015  
 



Das vom Typ her höherwertige Ergebnis bestimmt den Typ weil nur so
ohne Datenverlust konvertiert werden kann. Höherwertig demzufolge
in dieser Reihenfolge:

String
Float
Long
Bool
Null

Ergo ist 1+"Test" immer "1Test" genau wie "Test"+1 immer "Test1" ist,
1.1+2 ist immer 2.2 genau wie 2+1.1 immer 2.2 ist.

Man kann auch sagen, was Du mit String verknüpfst ist immer String.

Dies hier: 2.2+1+"hallo"+5.5+1
ergibt: 3.2hallo5.51,
in diesem Fall also von Links nach Rechts ausargumentiert.

Wenn man mit den Zahlen in einer Stringkonstante rechnen will dann
per long( oder float( den String konvertieren.
 
15.05.2015  
 




HofK
Das war soweit klar, hatten wir auch schon vor einiger Zeit in der Diskussion - finde ich aber gerade nicht. Schön hier nochmal die konkrete Auflistung der Wertigkeit, würde sich da  [...]  gut machen.

Wenn ich jetzt nicht total schief liege, nur daher meine Anmerkung bezüglich des mitdenkenden Präkompilierers, müsste dann in der letzten Vereinfachung doch noch return a + " = " + sqrt( a*a+b*b) stehen, da ja in der Ausgangszeile der Pythagoras anvisiert war.
Es sei denn, nach sqrt wird solange numerisch "gedacht" wie es geht.

Da ist der . für die Konkatenation bei php und Konsorten dann eben eindeutiger und übersichtlicher. Aber den Punkt übersieht man auch mal schneller, er ist so lütt.
 
15.05.2015  
 



iF (01.12.14)
Space-Operator (Freizeichen), eigentlich kein Operator sondern eine Sprach/ Syntaxeigenschaft, näheres dazu unter: [...]


Die Zeile:

return a + " = " + str(sqrt(a*a+b*b))

kann durchaus so vereinfacht werden:

return a + " = " + sqrt a*a+b*b

Der Space-Operator ist kein logischer Operator sondern ein Syntaxmittel,
das vor den logischen Operatoren aufgelöst wird und nicht wie die log.
Operatoren von Links nach Rechts sondern er kann nur von Rechts
nach Links aufgelöst werden.

Du hast es mit

> Es sei denn, nach sqrt wird solange numerisch "gedacht" wie es geht.

richtig erkannt. Der Space-Operator kann Kommas und Klammern
herbeizaubern anhand dessen ob er eine Funktion findet oder einen Wert.

So würde aus:

proc test a b c;endproc
return a + " = " + str sqrt a*a+b*b test a b c

proc test(a,b,c);endproc
return a + " = " + str(sqrt(a*a+b*b,test(a,b,c)))
 
16.05.2015  
 




HofK
"Es sei denn, nach sqrt wird solange numerisch "gedacht" wie es geht."

Ich hatte es gehofft, aber nicht unbedingt erwartet, denn derartig lästige Sonderzeichen sparendes, wirklich vereinfachendes habe ich bei den gängigen Sprachen bisher nicht gesehen. Gibt es das überhaupt schon irgendwo?

Sicher muss man es so einsetzen, dass die Übersichtlichkeit nicht zu kurz kommt. Das wird sich praktisch schnell zeigen.

Der Präkompilierer mit der Syntaxeigenschaft/Syntaxmittel Kodeergänzung durch Space Operator verdient eventuell einen eigenen Paragraphen, bei § 7 Operatoren geht der Space Operator etwas unter und ist ja dann auch kein klassischer Operator.

Das Leerzeichen, der Space Operator ist ein intelligenter Space Seperator, ein intelligenter Trenner, ein Space-Autoseparator kurz ein Autoseparator, ein polymorpher Seperator, damit noch etwas polymorphes bei InfinityProfan.

" ... das vor den logischen Operatoren aufgelöst wird ... er kann nur von Rechts nach Links aufgelöst werden." ist ganz wichtig zum Verständnis und sollte in den Paragraphen rein. Kann man den zugrundeliegenden Algorithmus kurz/vereinfacht/übersichtlich darstellen?

Freue mich schon auf's konstruieren und erklären von Beispielen zur Syntaxeigenschaft.
 
16.05.2015  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

15.390 Betrachtungen

Unbenanntvor 0 min.
RudiB.20.03.2020
maroro25.07.2016
Sascha Patzsch23.03.2016
Pedro Miguel16.03.2016
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

iF (13x)
HofK (10x)


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