ARRAYS sind nicht böse!!!
Übersicht

![]() |
MidimasterBetreff: ARRAYS sind nicht böse!!! |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 so, why not? ![]() |
||
- Zuletzt bearbeitet von Midimaster am Do, Jan 07, 2010 13:01, insgesamt einmal bearbeitet
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke aMul,
ich habs gleich korrigiert. |
||
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
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.
|
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hallo,
das mit dem monopoly war mein problem ![]() 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 ![]() ![]() mfg jokerman29 |
||
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!
Rechtschreibfehler sind special-effekts meiner Tastatur ![]() |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ganz einfach:
BlitzBasic: [AUSKLAPPEN] Dim feld(40,4) ;1 = Position, 2 = Miete, 3 = Anzahl der Häuser |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ah cool danke =)
wir werden dafür hauptsächlich arrays benutzen ![]() |
||
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!
Rechtschreibfehler sind special-effekts meiner Tastatur ![]() |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!
Rechtschreibfehler sind special-effekts meiner Tastatur ![]() |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group