Strikte Erfordernis von Variablendeklaration als Option

Für allgemeine Fragen zur Programmierung mit PureBasic.
Vi-P
Beiträge: 32
Registriert: 18.01.2013 18:56

Strikte Erfordernis von Variablendeklaration als Option

Beitrag von Vi-P »

Gibt es eigentlich die Möglichkeit im Compiler eine Option einzuschalten, daß .i Variablen nicht automatisch deklariert werden, sondern, daß bei der ersten Verwendung der Typ angegeben werden muß. Ist ja seit je her ein Kritikpunkt an Basic, daß man Variablen nicht deklarieren muß. Die Diskussion hierzu will ich hier aber nicht lostreten. In PB geht das Deklarieren aber so mühelos (wie vieles andere) und ist ja außer bei .i auch (in irgendeiner Form) notwendig.
Warum den Aufwand? Nicht um irgendwelchen Formalismen nachzurennen. Ganz einfach, wenn ich einen Variablennamen vertippe, dann kann erfolgreich compiliert werden, mein Programm wird aber nicht wie gedacht funktionieren. Wenn es sich bei der vertippten Variable z.B. um einen String handelt, wird der Compiler (meist) meckern.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von RSBasic »

Falls ich dich richtig verstehe: EnableExplicit
Variablen sind ohne manuelle Typsetzung standardmäßig Integer.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Vi-P
Beiträge: 32
Registriert: 18.01.2013 18:56

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von Vi-P »

Danke für die schnelle Antwort. Jein. Schön, daß es eine solche Funktion gibt und ich überlege mir doch sehr, diese zukünftig zu verwenden. "Einfacher" wäre es aber, wenn man
Variablen sind ohne manuelle Typsetzung standardmäßig Integer.
einfach abschalten könnte, so daß man (mindestens) .i bei der ersten Verwendung dahinter schreiben muß. Hätte den selben Effekt als mindestens define verwenden zu müssen.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von RSBasic »

Meinst du ohne Define und einfach so?:

Code: Alles auswählen

MyVariable.i ;Neue Ganzzahl-Variable wird definiert
Falls ja: Es ist aber meiner Meinung nach unübersichtlich bzw. nicht klar erkennbar, in welcher Zeile die Variablen zuerst definiert wurden. Wenn irgendwo im Code beispielsweise MyVariable.i gibt, dann sieht man das nicht. Mit Define sieht man das besser, weil das Schlüsselwort eine andere Farbe hat. Man kann viel besser nach "Define" suchen.
Außerdem gibt es mehrere Arten, um eine Variable zu definieren:
  • Define
  • Global
  • Shared
  • ...
Das Schllüsselwort muss sein.
Vi-P hat geschrieben:"Einfacher" wäre es aber, wenn man
Variablen sind ohne manuelle Typsetzung standardmäßig Integer.
einfach abschalten könnte
Da musst du selber daran denken, die neue Variable explizit als Integer zu definieren, auch wenn es bereits standardmäßig definiert wird, wenn kein Typ angegeben wurde.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von NicTheQuick »

Man kann den Standard auch ändern, indem man 'Define.TYP' alleine nutzt. Wenn du am Anfang eine unsinnige Struktur definierst und den Standardtyp auf diesen setzt, wirst du immer einen Fehler erhalten. :D

Code: Alles auswählen

Structure blablubb
EndStructure
Define.blablubb

i = "Hallo"

Debug i
Ansonsten stimme ich aber RSBasic zu.
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von #NULL »

netter trick.
in diesem fall kommt der fehler allerdings nicht:

Code: Alles auswählen

Structure blablubb
EndStructure
Define.blablubb

Define var.blablubb

i = var

Debug i
auch nicht mit Define var ohne typangabe
Zuletzt geändert von #NULL am 13.04.2016 23:29, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von RSBasic »

@#NULL
Willkommen zurück :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von #NULL »

hi!
fühlt sich an wie gestern :)
my pb stuff..
Bild..jedenfalls war das mal so.
Vi-P
Beiträge: 32
Registriert: 18.01.2013 18:56

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von Vi-P »

@NicTheQuick

Code: Alles auswählen

Structure blablubb
EndStructure
Define.blablubb

i = 1
geiler Trick ohne Frage. Die Frage ist nur, ist das sprachtechnisch "for ever"?

@RSBasic: Ja mein ich "einfach so". Ja es ist unübersichtlich... Aber es bläht z.B. den Code nicht "unnötig" auf.
Wenn man es sauber machen möchte/muß gebe ich dir recht. Für die schnelle Programmierung klatsch ich halt bei der ersten Verwendung den Typ dran und gut is. Wenn .i default ist, riskiere ich aber unnötig Fehler.
Ich finde das einfach als "3te" Variante (Zwischenstufe) sinnvoll.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Strikte Erfordernis von Variablendeklaration als Option

Beitrag von NicTheQuick »

Du möchtest quasi sowas wie 'EnableExplicit', allerdings ohne dass man 'Define' hinschreiben muss. 'Define' soll quasi automatisch gemacht werden. Was soll innerhalb von Prozeduren gemacht werden? Automatisch 'Protected', oder 'Static' oder 'Shared'? Ich finde das zu undurchsichtig, weil du das Problem nur verschiebst. Anstatt dass der Standard ein '.i' ist, möchtest du als Standard 'Define' haben. Was ist, wenn jemand 'Global' oder 'Threaded' will? Ich finde es gut, so wie es ist.
Antworten