Deutsch
Forum

V0.1.60 -> Keine Variablendeklarationen mehr?

 
Ich arbeite grad an einem Update vom XPSE und ich habe die Keyworderkennung verbessert.

XPSE achtet jetzt nicht nur ob ein Identifier deklariert ist, sondern ob dieser auch das richtige Prefix und Postfix trägt.

Hierbei bin ich grad an einer interessanten Stelle angekommen, denn ich könnte nun den XPSE veranlassen nichtdeklarierte Variablen zu deklarieren. Das könnte heissen das man Variablen überhaupt nicht mehr deklarieren muss. Einfach verwenden, XPSE deklariert unauffällig im Hintergrund.

Dabei entstehen natürlich aber ein paar Fragen!

a) Der Programmieranfänger könnte sich verschreiben, und sich wundern das nicht gemackert wird das seine Variable nicht deklariert ist.

b) Wie soll XPSE entscheiden wenn eine in einer Prozedur verwendete Variable bereits im Parent (bzw. Global) deklariert ist. Was meint der XProfaner dann? Die Globale oder eine neue Locale?

c) Sollte es der Standard sein das das Autodeklarieren eingeschaltet ist, oder sollte es nur über Kompilerschalter aktivierbar sein?

d) Hab ich Fragen vergessen?
 
04.10.2006  
 




RGH
[quote:417b5c2a5a=iF]a) Der Programmieranfänger könnte sich verschreiben, und sich wundern das nicht gemackert wird das seine Variable nicht deklariert ist.[/quote:417b5c2a5a]
Nicht nur Programmieranfänger machen Tippfehler! So eine automatisch deklarierte Variable würde in einem größeren Programm die Fehlersuche zum Horrorszenario machen. Da macht man mal einen Tippfehler, etwa bei der Zuweisung. Die Variable wid automatisch deklariert. Und dann sucht man sich einen Wolf, warum den dieser Wert nie zum tragen kommt. Es gibt ja so viele Möglichkeiten ...
Das wäre für mich der Hauptgrund, dieses Feature nicht einmal anzubieten!

[quote:417b5c2a5a]b) Wie soll XPSE entscheiden wenn eine in einer Prozedur verwendete Variable bereits im Parent (bzw. Global) deklariert ist. Was meint der XProfaner dann? Die Globale oder eine neue Locale?[/quote:417b5c2a5a]
Natürlich ist dann die globale, bzw. übergeordnete Variable zu nehmen. Woher sollte XPSE die Gewissheit nehmen, daß der Programmierer es nicht bewußt so gewollt hat?

Was ich mir vorstellen könnte, wenn XPSE in einen solchen Fall (nicht b)!) nachfragt: Variable xy nicht deklariert. Soll sie deklariert werden?. Klickt der Anwender auf ja, wird sie in den Quellcode am Anfang der Prozedur/des Programmes eingefügt, klickt er auf Nein, bricht XPSE ab, damit der Anwender seinen Code korrigieren kann.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
04.10.2006  
 



[quote:c10ff94482=RGH]Das wäre für mich der Hauptgrund, dieses Feature nicht einmal anzubieten![/quote:c10ff94482]
Naja! Man deklariert nix in C (zumindest wird man nicht gezwungen dies innerhalb einer separaten Anweisung zu tun) und auch nicht in PHP. Es gibt riesige C und PHP-Programme - das mit der Fehlersuche als Begründung, das Feature garnicht anzubieten, halte ich aber nicht nur deshalb verkehrt, sondern auch weil das Debugging im Fehlerfall zumeist nicht daher rührt das man eine Variable falsch geschrieben hat!

Ich muss dazu gestehen, Variablendeklarationen nerven mich (Das hat nix mit Typendeklaration zu tun!) und ausser - das es für das bessere Verständnis beim Programmierenlernen hilft, sehe ich rein rechnerisch keinen Grund dazu - wenn der Programmierer selbst entscheidet, das er fähig ist auch ohne Deklaration von Variablen diese zu benutzen.

Ich halte das Ganze eher für ein tolles Feature statt ein Teufelswerk. Ich suche nur nach einem klaren und verständlichen Prinzip für die Umsetzung bei Grenzfällen.

Natürlich müssen Arrays und Strukturen weiterhin deklariert werden - ich würde mich auch erstmal nur auf einen Typ stürzen - natürlich die Longs.
 
04.10.2006  
 



Nachtrag: Das beste ist wohl die Prozeduren gänzlich zu kapseln. Darin benutzte Variablen sind immer local.

Wenn man - und das gucke ich mir einfach dem Erfahrungsschatz von PHP ab - eine globale (oder übergeordnete) Variable meint, dann muss diese mit dem Schlüsselwort Global als Global deklariert werden.

Beispiel:
KompilierenMarkierenSeparieren
declare gx&,gy&

proc vect

    global gx&,gy&
    return (gx&*gy&)/(gy&*gx&)

endproc

 
04.10.2006  
 




Michael
Wodrich
Dann muß wohl wieder mal ein Schalter her.

Ich würde es nicht so lustig finden, wenn eine Automatik mir lauter globale Variablen hinballert. Das möchte ich doch tunlichst vermeiden.

Und wenn jemand eine Variable gerne als globale haben möchte, dann soll er das bitte explizit angeben. Sonst sollte die Variable immer lokal sein.

Der Vorteil ist einfach: hat man sich daran gewöhnt alles lokal zu deklarieren und Dinge die woanders benötigt werden als Parameter weiterzureichen, dann hat man auch keine Probleme mit Threads und Prozessen.

Auch das Hauptprogramm kann auf globale Variablen verzichten:

Main
Run_Main_Program
End

Und schwups ist alles in Prozeduren und Funktionen im lokalen Umfeld. Wenn Roland jetzt noch die Systemvariablen in einem Namespace GLOBAL_VARS eintütet...

Schöne Grüße
Michael Wodrich

War der Turbo-iF schon wieder schneller.......
 
Programmieren, das spannendste Detektivspiel der Welt.
04.10.2006  
 



Genau Michael - soooooooooooo sehe ichs auch. ^^
 
04.10.2006  
 




RGH
Also zumindest in C und C++ (und auch in Java) wird mit der Typdeklaration auch die Variable deklariert. Und im Falle eines Schreibfehlers an spätere Stelle wird nichts automatisch deklariert, sondern eine Fehlermeldung ausgegeben, daß die Variable noch nicht deklariert ist. Umgekehrt gibt es natürlich auch eine Fehlermeldung, wenn die Variable deklariert und sie im gleichen Block bereits deklariert ist.

Wollte man dieses mit XPSE in XProfan-Syntax übertragen, könne man ein neues Schlüsselwort einführen, etwa VAR und mit diesem dann wie in C die Variable on the Fly beim ersten Auftreten deklarieren:
KompilierenMarkierenSeparieren
VAR X$ = "Hugo Maier"

(Dem entspräche in C/C++/Java: String X = Hugo Maier;)
Diese Variable wäre natürlich lokal in der aktuellen Prozedur/Methode.
Wenn ich so darüber nachdenke .... packe ich das gleich mal auf die ToDo-Liste für XProfan 11. Die Variante gefällt mir und dürfte auch recht rasch zu realisieren sein!

Der Gedanke, daß in einer Prozedur/Methode nur lokale Variablen bekannt sind, hat eine Menge für sich. XProfan lehnt sich hier aber an Pascal/Delphi an, in dem übergeordnete Variablen in Prozeduren/Funktionen bekannt sind. Ich habe auch schon darüber nachgedacht, dieses Verhalten per Compilerschalter zu steuern und das aus TurboBasic und Basic bekannte SHARED (anstelle des von iF vorgeschlagenen GLOBAL) zu verwenden, um auf Variablen der übergeordneten Ebene zugreifen zu können. Diese ist ja nicht zwangsläufig Global, sondern kann auch die aufrufende Prozedur sein. Aber ich schweife ab. Hier soll es ja um XPSE gehen und nicht m künftige XProfan-Versionen ... ;)

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
04.10.2006  
 



Hm. Klar, var. Kann vom xprofaneigenen PreCompi erledigt werden - in Xprofan können ja IMHO Variablen eh onthefly deklariert werden.

Ich übe mich also einfach mal daran, einen mit einem Kompilerschalter zu aktivierenden Modus herzustellen, um optional die Autodeklaration einzuschalten. Vielleicht entstehen dabei ja lustige Gesetzmäßigkeiten welche kompatibel bleiben.
 
04.10.2006  
 




RGH
[quote:aa916e5c88=iF]in Xprofan können ja IMHO Variablen eh onthefly deklariert werden.[/quote:aa916e5c88]
Sagen wir mal so: Das DECLARE kann an jeder Stelle im Programm stehen. Allerdings braucht es halt diese Extrazeile. VAR wäre daher sogar noch etwas schneller, allerdings nur, wenn es wirklich in XProfan eingebaut wird, und nicht per Precompiler in Declare X$ : X$ = umgewandelt wird.
(DECLARE überprüft aus Tempogründen auch nicht, ob diese Variable bereits deklariert ist. Es wird einfach immer die zuletzt deklarierte Variable genommen. Aber das hat noch niemand angemeckert.)
Mit VAR könnte man halt gleich eine Zuweisung verbinden und spart diese Extrazeile. In Java (meine derzeitige Hauptsprache in der Firma) habe ich mich ganz gut an diese Vorgehensweise gewöhnt.

Gruß
Roland
(vielleicht wird es doch schon in XProfan 10 undokumentiert drin sein ... ;) )
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
04.10.2006  
 



Grosse Klasse

<offtopic>PS: XPSE kann in der nächsten Version Umlaute, aber ich würde es nie zugeben und als Bug deklarieren. </offtopic>
 
04.10.2006  
 




Jac
de
Lad
<offtopic> Oh, das ist gut! </offtopic>
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
05.10.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.750 Betrachtungen

Unbenanntvor 0 min.
GDL24.08.2015
Roland Schäffer06.01.2011

Themeninformationen



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