Seite 1 von 1

Declarationsfragen

Verfasst: 16.11.2015 17:53
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?

Re: Declarationsfragen

Verfasst: 16.11.2015 17:57
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)

Re: Declarationsfragen

Verfasst: 16.11.2015 17:57
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.

Re: Declarationsfragen

Verfasst: 16.11.2015 18:17
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
?

Re: Declarationsfragen

Verfasst: 16.11.2015 18:33
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.

Re: Declarationsfragen

Verfasst: 16.11.2015 18:51
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.