Verwendung Global in Type

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Rick_72

Betreff: Verwendung Global in Type

BeitragMo, Jan 25, 2010 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

was bringt mir eigentlich die Verwendung von Globals in Types ausser einer weiteren (besseren) Strukturierung des Programms? Als Beispiel soll mal dienen (nur rudimentär, es geht um's Prinzip; klar kann ich auch in Methoden packen usw., aber ..):

Code: [AUSKLAPPEN]
Global myList:TList

Type myType
   Field x:Int
End Type

myList = New TList
Test:myType = New myType

myList.AddLast(Test)


Innerhalb der Klasse:

Code: [AUSKLAPPEN]
Type myType
   Global myList:TList
   Field x:Int
End Type

Test:myType = New myType
Test.myList = New TList

Test.myList.AddLast(Test)


Deutlich ist der Unterschied im Aufruf der Liste. Aber ist das alles? Übersehe ich etwas?

Vielen Dank für Eure Hilfe!

D2006

Administrator

BeitragMo, Jan 25, 2010 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du es mit Global machst, gibt es eine Liste, in die du jede Instanz des Types packen kannst. Wenn du es aber lokal mit Field machst, dann hat jede Instanz ihre eigene Liste.

EDIT: oh, in deinem Beispiel wäre der unterschiedliche Aufruf der einzige Unterschied. Allerdings ist die zweite Variante einfach sauberer und übersichtlicher. So könntest du bei der zweiten Variante in deinem Programm noch eine andere "myList" benutzen, da der Variablenname nicht belegt wird.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Rick_72

BeitragMo, Jan 25, 2010 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
Wenn du es mit Global machst, gibt es eine Liste, in die du jede Instanz des Types packen kannst. Wenn du es aber lokal mit Field machst, dann hat jede Instanz ihre eigene Liste.


Ja, schon klar. Aber wo ist der Unterschied durch die unterschiedliche Notation? Einmal deklariere ich Global *innerhalb* der Klasse, das andere mal *ausserhalb*. Welchen Unterschied macht das (ausserden oben beschriebenen in der Syntax)?

Xeres

Moderator

BeitragMo, Jan 25, 2010 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Vor allem muss man nicht tausend verschiedene Listennamen verwenden. TVogel.list, TAuto.list, TBaum.list - überall sieht man sofort wo was drin ist. Bei längeren Programmen ist alles hübsch im Type geordnet und man findet alles was dazu gehört auch genau da.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Rick_72

BeitragMo, Jan 25, 2010 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Vor allem muss man nicht tausend verschiedene Listennamen verwenden. TVogel.list, TAuto.list, TBaum.list - überall sieht man sofort wo was drin ist. Bei längeren Programmen ist alles hübsch im Type geordnet und man findet alles was dazu gehört auch genau da.


OK, dann ist wie vermutet der einzige (wesentliche) Unterschied die Notation sprich die bessere Lesbarkeit.

Danke für die Hilfe!

D2006

Administrator

BeitragMo, Jan 25, 2010 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Was man nebenbei auch gleich machen kann:
BlitzMax: [AUSKLAPPEN]
Type myType
Global list:TList = New TList
Method New()
list.addLast( Self )
End Method
End Type

New myType
New myType

So muss man nur noch Objekte mit New erschaffen und schon sind sie auch in der Liste.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

Dreamora

BeitragMo, Jan 25, 2010 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist nicht nur notation sondern die basis von OOP. Wenn du oop nutzt und dein code nicht sauber gekapselt ist, hättest du dir OOP auch gleich sparen können.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Alfadur

BeitragMo, Jan 25, 2010 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Global bezeichnet statische Variablen, die Variablen gehören zu dem Type und jedes Objekt kann sie benutzen.
Lokale Variablen gehören einer jeden Instanz eines Types.


Ist dasselbe mit method und function.
Functions sind statisch, gehören also dem Type.
Methods gehören zu jeder Instanz des Types.
A Cray is the only computer that runs an endless loop in less than four hours.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group