ARRAYS sind nicht böse!!!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Midimaster

Betreff: ARRAYS sind nicht böse!!!

BeitragDo, Jan 07, 2010 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
@Holzchopf

zu: https://www.blitzforum.de/foru...124#356124

Danke! Ich wollte da eh mal einen Thread lostreten für die Arrays. Im Forum gibt es zuviele Stimmen, die davor warnen, als wären sie giftig!

Ich lese oft den Satz:Zitat:
"Mein Tipp: Arbeite nicht mit Arrays, sondern lieber mit Types!"

Das ist Unsinn und wäre so, als ob man schreiben würde: Funktionen sind besser als Strings!.

Das eine hat mit dem anderen nichts zu tun! Ein Type ist nur ein neuer Variablen-Typ wie STRING, INTEGER oder FLOAT. Nicht mehr und nicht weniger!

Dieser Typ läßt sich verarbeiten wie die anderen Typen auch. In Einzelnvariablen, in Arrays und zusätzlich auch in Element-Listen.

Aber nichts spricht dagegen, für einen einzelnen Spieler einen TYPE zu erstellen. Und nichts spricht dagegen für ein Spielfeld ein Array aus Types zu benutzen:

BlitzBasic: [AUSKLAPPEN]
Type PlayerTyp
Field x%, y%, Leben%, Name$, Waffe%[9]
End Type
Global Player.PlayerTyp
Player=New PlayerTyp
Player\X=200
Player\Waffe[6]=Bombe

Type SpielFeldTyp
Field Miete%, Name$, Belohung%[9]
End Type

Dim SpielFeld.SpielFeldTyp(40)
For i=0 To 39
Spielfeld(i) = New SpielFeldTyp
Next i



so, why not? Twisted Evil
  • Zuletzt bearbeitet von Midimaster am Do, Jan 07, 2010 13:01, insgesamt einmal bearbeitet

aMul

Sieger des Minimalist Compo 01/13

BeitragDo, Jan 07, 2010 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Zitat oben macht ohne Kontext wie du schön dargestellt hast in der Tat keinen Sinn.
Es stimmt aber, dass für viele Sachen, bei denen Anfänger vielleicht Arrays benutzen, Types sinvoller sind. Zum Beispiel für Gegner, Asteroiden, etc. ist das arbeiten mit Types flexibler und wenn man erstmal mit ihnen umgehen kann(ich fand sie damals leichter zu verstehen als Arrays, so schwer ist das wirklich nicht) auch einfacher.

Aber ansonsten hast du vollkommen recht. Man sollte beides benutzen, und zwar je nachdem was gerade besser geignet ist, wie du in deinem Beispiel ja schön zeigst.


(Ich habe mir erlaubt die(ich nehme an Flüchtigkeits-)Fehler zu berichtigen: )
BlitzBasic: [AUSKLAPPEN]
Type PlayerTyp
Field x%, y%, Leben%, Name$, Waffe%[9]
End Type
Player.PlayerTyp=New PlayerTyp
Player\x=200
Player\Waffe[6]=Bombe

Type SpielFeldType
Field Miete%, Name$, Belohung%[9]
End Type

Dim SpielFeld.SpielFeldType(40)
For i=0 To 39
SpielFeld(i) = New SpielFeldType
Next
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Midimaster

BeitragDo, Jan 07, 2010 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
danke aMul,

ich habs gleich korrigiert.

darth

BeitragDo, Jan 07, 2010 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Types sind in der Tat ein Variabeltyp. Somit verhalten sie sich ähnlich wie Floats und Integer, da geb ich dir recht Midimaster. Andererseits sind Types auch eine automatische (doppelte) Linkedlist, was sie in die Sparte der Listen (also zusammen mit Arrays) bringt. Types gehören zu beidem, sie nur einer Kategorie zuschreiben zu wollen halte ich für unsinnig.

Von daher hat die Anmerkung, dass man für gewisse Listenfunktionen lieber Types vor Arrays bevorzugen sollte durchaus ihre Berechtigung. Jede der beiden herangehensweisen hat ihre grossen Vorteile und auch Nachteile.

Einfügen eines neuen Gliedes in einer Linked(Type)List ist viel einfacher, man muss nur 2 (bzw 4, da vorwärts und rückwärts verlinkt wird) Links ändern und man hat die Arbeit getan. Bei einem Array müsste man dazu alle nachfolgenden Glieder einen Index nach oben verschieben, das ist ein Laufzeitverhalten von O(n), was zugegebenerweise erträglich ist, aber immernoch schlechter als das konstante Verhalten von Types.

Wenn man ein Element haben will (nicht suchen, bei suchen ist man bei beiden auf lineare Suchweise angewiesen, solange die Listen nicht sortiert sind), dann kann man es bei einem Array direkt über den Index hinaus picken, bei einer Linked(Type)List muss man zuerst bis zu seinem Element durchiterieren, hier ist das Laufzeitverhalten zum vorigen Beispiel invertiert, die Types schneiden mit O(n) schlechter ab als die Arrays mit ihrer konstanten Laufzeit.

Es zeigt sich hier, dass man, je nach Aufgabe entweder das eine oder doch lieber das andere Verwenden soll. Natürlich kann man auch konstant nur eine der beiden Strukturen verwenden das ist dem Programmierer überlassen, aber worauf ich hinaus will ist:
Zu behaupten dass Types nichts mit Arrays zu tun haben und der Tipp lieber Types zu verwenden sei Schwachsinn ist Schwachsinn!

Dieser Thread ist relativ witzlos, da er in absolut keinem Zusammenhang mehr zum anderen steht und man gar nicht mehr sieht warum die Types empfohlen wurden. Geht es um eine dynamische Anzahl an Objekten auf dem Bildschirm die man beliebig erstellen und löschen will dann wird jeder auf Types zurückgreifen, weil sie nunmal leichter zu handhaben sind in diesem Feld. Geht es hingegen um eine vordefinierte Liste von Einträgen die man verwalten will, dann bedient man sich Arrays, aber derart zusammenhangslos zu behaupten der Tipp wäre schlecht ist schlichtweg unüberlegt.

Soviel dazu von meiner Seite,
MfG,
Darth
Diese Signatur ist leer.

Jamagin

BeitragDo, Jan 07, 2010 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@darth!

*bravo*

das ist Mut!! Ja es bleibt jeden selbst überlassen. Keines der Beiden ist besser oder schlechter. Ich arbeite sehr gerne mit Types, benachteilige aber Arrays auch nicht!

lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte

Midimaster

BeitragDo, Jan 07, 2010 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich stimme euch hier 100% zu. Es kommt immer auf den Einzelfall an.

Ich möchte durch diesen Thread die Diskussion anregen, nicht immer wie ferngesteuert zu jeder Useranfrage den Kommetar zu posten: "Verwende keine Arrays!".

Bei der oben genannten Anfrage ging es um ein Monopoly-Spiel mit 40 Felder. Es kommt keines dazu und keines fällt je weg. Für mich ein klassischer Fall für ...

BlitzBasic: [AUSKLAPPEN]
Dim Spielfeld.SpielfeldTyp[40] 


und hier mal die Reaktionen:

Zitat:
sft.SpielfeldTyp = first SpielfeldTyp
while sft\Nummer<>Gesuchte_Nummer
sft = after sft ;blättert eine "Seite" weiter (nächster Type-eintrag)
wend


Zitat:
gesucht=10
sft.SpielfeldTyp = First SpielfeldTyp
for i=1 to (gesucht-1)
sft = after sft
next


Zitat:
jo aber leider nur Statisch. Wer das nicht will kann bei Int,Float und anderen Fixen längen auf Banks umsteigen... strings wären da relativ schwer..


Zitat:
Im übrigen hat Midimaster in seinem Vorschlag ebenso ein Type deklariert in Kombination mit einem Array, also hätte der Anfänger gleich 2 Probleme mit dem er sich beschäftigen und was er verstehen muss.

D2006

Administrator

BeitragDo, Jan 07, 2010 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Midimaster hat Folgendes geschrieben:
Ich möchte durch diesen Thread die Diskussion anregen, nicht immer wie ferngesteuert zu jeder Useranfrage den Kommetar zu posten: "Verwende keine Arrays!".


Wer macht das denn? Das ist mir noch nie aufgefallen, dass sowas "immer" passiert.
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

jokerman29

BeitragDo, Jan 07, 2010 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
das mit dem monopoly war mein problem Very Happy
ich hätt jetzt einfach mal ein paar fragen zu arrays:
ich hab ein array definiert z.b. feld(40,4) (40 weils 40 spielfelder sind und die 4 steht für z.b. miete, position des spielers usw.) wie kann ich jetzt die einzelnen werte in den array eintragen z.b. miete, position usw.?? und wie kann ich dann eine bestimmte spalte abfragen?? bitte mit beispielen Very Happy ich bin noch nciht so vertraut mit arrays Wink
mfg
jokerman29
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

Nicdel

BeitragDo, Jan 07, 2010 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz einfach:

BlitzBasic: [AUSKLAPPEN]
Dim feld(40,4) ;1 = Position, 2 = Miete, 3 = Anzahl der Häuser

feld(10,2) = 200 ;Die Miete auf Feld 10 ist 200
feld(31,3) = 3 ;Auf Feld 31 stehen 3 Häuser
feld(31,3) = 4 ;Jetzt sind es 4 Häuser

Print feld(10,2) ;Die Miete auf Feld 10 anzeigen
Print feld(31,3) ;Die Anzahl der Häuser auf Feld 31 anzeigen

Geld = Geld + feld(10,2) ;Eigenes Geld um die Miete von Feld 10 erhöhen
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Eingeproggt

BeitragDo, Jan 07, 2010 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Wir sind uns ja alle einig dass Types und Arrays gleichermaßen ihre Existenzberechtigung haben aber anhand von Nicdels Beispiel wird schnell klar warum ich Types bevorzuge...

Code: [AUSKLAPPEN]
feld(10,2) = 200 ;Die Miete auf Feld 10 ist 200


das ist doch irrsinnig unübersichtlich. Jemand er nicht Tag und Nacht mit dem Code arbeitet hat keine Ahnung was das bedeutet (selbst mit Kommentar muss man mal lang nachdenken). Und jetzt stelle man sich vor das steht in einem 3000Zeilen COde in 2 verschachtelten For-Schlefen und 3 If-Abfragen (Kann bei komplexeren Projekten gern mal vorkommen) - der arme Mensch der diesen Code lesen muss...

Code: [AUSKLAPPEN]
feld(10)\miete = 200


ist vom Syntax her komplizierter und Anfänger kommen selbstständig unmöglich darauf selbst sowas zu schreiben (ging mir genauso, hab auch 2 Tage lang Type-Tuts gepaukt und dann noch wochenlang Fehler gemacht...) aber es ist doch für jedermann / jederfrau ersichtlich was die Zeile tut.

Soweit meine Meinung - und ja ich nutze aber auch selbst noch reine Arrays wo sie sinnvoll sind - solche Fälle gibt es und will ich nicht abstreiten.
mfG, Christoph.


EDIT: Eine Möglichkeit die erste Variante übersichtlicher zu machen wären Konstanten wie zB
Code: [AUSKLAPPEN]
Const POSITION=1
Const MIETE=2
Const HAUS_ANZAHL=3


und dann es so zu verwenden:
Code: [AUSKLAPPEN]
feld(10,MIETE) = 200


würde ich mir einreden lassen dass das brauchbar ist. Also übersichtlich und effizient.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

jokerman29

BeitragDo, Jan 07, 2010 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ah cool danke =)
wir werden dafür hauptsächlich arrays benutzen Wink
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

Silver_Knee

BeitragDo, Jan 07, 2010 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
geht halt nur bei gleichen Datentypen sonst muss

Code: [AUSKLAPPEN]
Dim Feld_Miete(200)
Dim Feld_Name$(200)


her halten was nicht wirklich schön ist.

jokerman29

BeitragDo, Jan 07, 2010 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, wir machen das ja alles mit zahlen, wir haben ja auch schon das spielfeld (daran saß ich 3 stunden -.-) fertig, und jedes feld kriegt ja eine nummer, und z.b. wenns nur 2 spieler sind machen wir auch eine nummer z.b. wenn eine 0 ist, dann gehört niemanden, 1 dann gehörts spieler1, 2 dann gehörts spieler2 und wenn da eine 3 steht dann ist es z.b. ein spielfeld wo man extra zahlen muss oder ereignisskarte ziehen muss... also alles bleibt integer Wink
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

Midimaster

BeitragDo, Jan 07, 2010 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@jokermann29

Ihr postet gerade im falschen Thread. Eigentlich hattet ihr doch euer Problem dort geschildert:

https://www.blitzforum.de/foru...highlight=

Ich werde euch dort noch gleich ein paar Tipps schreiben...


Dieser Thread hier soll eigentlich unter den Helfern geführt werden. Es geht um die Frage, ob und wann die Verwendung von ARRAYs grundsätzlich an Fragende als Empfehlung gegeben werden sollen.

Vielleicht wärd ihr so nett und stellt euere Fragen wieder in der anderen Post?

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group