Declarationsfragen

Anfängerfragen zum Programmieren mit PureBasic.
PWorks
Beiträge: 8
Registriert: 15.11.2015 23:33

Declarationsfragen

Beitrag von PWorks »

hi leute ich bedanke mich schon mal für die schöne fortlaufende hilfe die ich hier erhalten habe.

nun habe ich noch ein problem. viel mehr eine nachfrage.
ich habe gemerkt das purebasic globalisierungen hat die aufs ganze programm sich ausweiten. das ist schon mal recht schön. meine nachfrage ist purebasic hat keine lokalisierungen.
das wiederrum irritiert mich z.b.

(in meiner früheren prog sprache musste ich in einer Funktion / Procedure -> übersetzt auf pbasic)

Code: Alles auswählen

Procedure Draw(Image:Timage)
     local X:Int=50
     local Y:Int=80
     drawimage (image,x,y)
EndProcedure
das heisst ich habe den label X,Y innerhalb der Procedure lokalisiert, pure basic scheint mir so als müsse man das gar nicht,...
desweiteren in sachen declarationen.

Bilder wurden in der ehemaligen prog sprache wirklich mit Bild:Timage decariert das war aus einem folgendem grund so. erstlabel:dann der type (bzw structur in pbasic)

so uum das ganze nun auf ein nenner zu bringen wie sehen die declarationen aus? ich habe desweiteren auf youtube in den videos gesehen das in pbasic
declarationen so aussehen könnten:
label.s = wäre ein string
label.i =ein intenger
label.f =float
label.l =Long
label.b = byte

gehe ich da richtig der annahme das es so ist?
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Declarationsfragen

Beitrag von GPI »

jup, das ganze ist ähnlich wie beim 68000-Assembler.
Übrigens: Protected in PB entspricht deinen local.

Wenn die Procedure ein String zurückgeben soll, dann fügt man das auch so an : Procedure.s MyFunction(blablabla.s)
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Declarationsfragen

Beitrag von RSBasic »

Ist zwar leider optional, aber du kannst es aktivieren (meine Empfehlung), so dass du deine Variablen definieren musst. Füge ganz oben in deinem Code folgendes ein:

Code: Alles auswählen

EnableExplicit
Außerhalb der Prozeduren kannst du mit Define definieren.
Innerhalb mit Protected.
PWorks hat geschrieben:label.s = wäre ein string
label.i =ein intenger
label.f =float
label.l =Long
label.b = byte

gehe ich da richtig der annahme das es so ist?
Ja, das ist richtig. Am besten dann davor noch ein Define oder Protected, jenachdem ob innerhalb oder außerhalb einer Prozedur.
Es gibt noch andere Schlüsselwörter bezüglich der Variablendefinition. Weitere Informationen in der Hilfe.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
PWorks
Beiträge: 8
Registriert: 15.11.2015 23:33

Re: Declarationsfragen

Beitrag von PWorks »

EnableExplicit = ist also mein alter superstrict :D

ok ja ich würde schon gern alles definieren da sonst die optik ein wenig überlaufen könnte (labels mehrfach zu benutzen für andere werte wäre hier die gefahr)
wie genau definiere ich dann etwas?

gehts nur mit global? weil das wäre schlecht da es über das ganze prog sich ausweitet.
wie gesagt mein alter befehl dazu hieß local ... das sorgte dafür das der befehl nich innerhalb einer procedure genutzt werden kann, ihn ich also praktisch in der prozedure für was anderes nutzen könnte.

z.b.

Code: Alles auswählen

local Wert.s="Halllo welt"

printn (wert)

procedure Draw (image)
     local Wert.i = 100

     printn (wert)
endprocedure
und dann noch eine kleine rand frage
wenn eine Structure keine klasse ist was ist es genau dann?

ich habe es klasse genannt aus folgendem grund:
ich kann Structure User machen, dort "felder" wie username passwort ect. ja sogar kann ich listen in einer structur verwenden. von daher bin ich ausgegangen das es sich um eine klasse handelt.

und kann man die labels innerhalb einer sructur auch "zwangs" definieren müssen? wenn ja wie?

z.b.?

Code: Alles auswählen

Structure User
global name.s
?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Declarationsfragen

Beitrag von ts-soft »

Nochmal ein Beispiel zur Deklaration von Variablen:

Code: Alles auswählen

EnableExplicit

Global a.i          ; Überall gültig, abgesehen von Modulen.
Define b.l          ; Nur im Mainscope gültig und wo geshared.

Procedure Foo(c.f)  ; c.f ist ein gültiger Parameter in der Procedure, es gilt die vorherige Deklaration wobei Globale Variablen aber keinen Sinn ergeben, da diese bereits bekannt.
  Protected d.d     ; Lokal: nur in der Procedure gültig, gleichnamige Variablen werden ignoriert.
  Shared b.l        ; Variable b aus dem Mainscope ist jetzt hier auch gültig.
  Static e.i        ; Lokal: Variable behält ihren Wert, auch bei verlassen der Procedure ist aber nur in der Procedure gültig.
EndProcedure
Structuren sind nichts anderes als die Definition für "UserDefinedTypes". Es ist eine CompilerAnweisung und die Definition ist
immer Global gültig (abgesehen von Modulen). Darauf basierend können dann Variablen deklariert werden, wie alle anderen
Typen auch und erhalten dann entsprechend ihre Gültigkeit. Der erforderliche Speicher wird automatisch reserviert, es sei
denn, ich definiere Pointer-Strukturen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: Declarationsfragen

Beitrag von NicTheQuick »

Hier ist noch ein Tutorial von mir über die grundlegenden Schlüsselwörter in Purebasic. Vielleicht hilft dir das: [PB] Grundlegende Schlüsselwörter. Vielleicht helfen dir die anderen Videos in der selben Playlist ebenfalls.
Antworten