Existiert Object?
Übersicht

![]() |
AnniXaBetreff: Existiert Object? |
![]() Antworten mit Zitat ![]() |
---|---|---|
hey,
ich hab ein array, gefüllt mit objekten: also z.B. so Code: [AUSKLAPPEN] array:myobject[100] array[11]= New Myobject array[12]= New Myobject array[15]= New Myobject wie kann ich nun herausfinden ob an array position x ein object ist, oder noch "null" ? hab es hiermit versucht, aber es ist immer null also das innerhalb der if bedingung wird nie erreicht Code: [AUSKLAPPEN] if array[x] then ... if array[x] <> null then ... ich dachte eigentlich das würde so einfach gehen, aber irgendwie geht es nicht ![]() oder hab ich einfach was vecheckt? ich lerns wohl nie^^ |
||
|moonForge|
Ich bin Pokémon Meisterin seit 1998! |
- Zuletzt bearbeitet von AnniXa am Sa, Dez 12, 2009 17:53, insgesamt einmal bearbeitet
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn das dein echter code sein soll, dann solltest du SuperStrict verwenden, denn du hast da was vertauscht.
BlitzMax: [AUSKLAPPEN] Global array[100]:myObject müsste eigentlich BlitzMax: [AUSKLAPPEN] Global array:myObject[100]sein. Bei der Abfrage nach Null würde ich folgendes vorschlagen: BlitzMax: [AUSKLAPPEN] If array[50] = Null Also eigentlich ziemlich genau das was du eh schon machst. :> |
||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und BlitzMax: [AUSKLAPPEN] array[11]= NewMyobject wird zu BlitzMax: [AUSKLAPPEN] array[11]= New Myobject |
||
Blog. |
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
noch zu:
Code: [AUSKLAPPEN] array[11]= New Myobject array[12]= New Myobject array[15]= New Myobject kannst du auch mit: BlitzBasic: [AUSKLAPPEN]
lg F. glaube aber das hilft dier net viel ^^ |
||
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
ne, das is nich der eigentliche code, hab das nur für hier eingegeben =)
also muss mein bug irgendwo anders liegen, hmm, danke für die hilfe. edit: hab den fehler gefunden ![]() war etwas ganz anderes, ganz woanders, und hatte dort zwei dinge vertauscht... wenn strict nicht so nerven würde, hätte ich es ja an. aber es verlangt ja sogar für for schleifen ein local, und dann kann ich irgendwie nie 2 schleifen haben die den selben wert durchgehen (also 2 mal "for local x = 0 to 10", da meckert es dan rum). oder hab ich da was falsch verstanden? |
||
|moonForge|
Ich bin Pokémon Meisterin seit 1998! |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
nimm superstrict, da geht das | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Well |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
AnniXa hat Folgendes geschrieben: aber es verlangt ja sogar für for schleifen ein local, und dann kann ich irgendwie nie 2 schleifen haben die den selben wert durchgehen (also 2 mal "for local x = 0 to 10", da meckert es dan rum).
oder hab ich da was falsch verstanden? BlitzMax: [AUSKLAPPEN] Strict Die Variable muss eben initialisiert werden; Das muss aber nicht im Schleifenkopf geschehen. ![]() |
||
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich sehe das Problem nicht?
Code: [AUSKLAPPEN] SuperStrict
' Normales Strict funktioniert auch For Local x:Int = 0 To 10 Print x Next For Local x:Int = 0 To 10 Print x*2 Next Oder meinst du so: das funktioniert auch: Code: [AUSKLAPPEN] SuperStrict
For Local x:Int = 0 To 10 Print x For Local x:Int = 0 To 10 Print "~t"+x Next Next Wichtig ist hier auch die zweite Variable explizit als Local zu deklarieren, weil sonst die Werte für die erste Schleife überschrieben werden und die erste Schleife also nur einmal durchläuft. Oder alternativ nie endet (Lass mal die äußere Schleife bis 12 gehen), da dann x nach der inneren Schleife immer auf 11 steht, auf 12 inkrementiert wird, aber nie 13 erreicht, da wieder die innere Schleife kommt. |
||
![]() |
AlkanBetreff: ???? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versteh das Problem auch nicht!
Kannst du es vieleicht etwas deutlicher erklären? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
AnniXa hat Folgendes geschrieben: wenn strict nicht so nerven würde, hätte ich es ja an.
strict nervt net zumindest dann net wenn man BM programmieren will und nicht Blitz3D. Wenn du strict nicht aktivierst kannst du grad so gut mit Blitz3D arbeiten weil verschiedene Dinge aus BM komplett deaktiviert werden die BM erst zu etwas besserem und schönerem als Blitz3D machen und die Performance wird nicht unerheblich einbrechen. Zum Beispiel fliegen dank strict grauselcode der Marke "Goto Spaghetti" gnadenlos raus, weil Goto nicht unterstützt wird und auch net gebraucht (das einzige wofür man goto in sauberem code brauchte war schleifen kontrolle und dafür gibts exit / continue inklusive loopLabels damit man 2 - 3 nested loops rausspringen kann wenn man will) Ohne Strict gibt es zb auch keinen variablenscope für local, womit viele Dinge sehr viel länger / für die ganze laufzeit im speicher hängen bleiben. Und last but not least schaltet strict vor allem auch den legacy support für integer handles zu objekten ab. Das ist sehr wichtig, da diese handles den garbage collector umgehen (weswegen man dann weiteren zusatzcode braucht oder memory leaks / speicher verletzungen bekommen wird) und ausserdem massiv viel zeit verbrauchen beim hin und zurück konvertieren. Wenn du bei neuem Code direkt strict / superstrict oben rein schreibst wirst du prinzipiell kaum Probleme haben. Den hat man primär dann wenn man alten Blitz Code hochkonvertieren lässt vom Tool oder wenn man uralten code (pre 1.16) im neuen BM verwenden will. In beiden Fällen sollte man den Code den man hat jedoch eh von grundauf anpassen, da er in keinster weise schnell sein wird im aktuellen BM, da damals vieles anders bis total anders war. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Di, Dez 22, 2009 8:52, insgesamt einmal bearbeitet
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
okay, ich hab nun mein aktuelles projekt nachträglich ge-superstricted.
mein goto kram gegen exit ersetzt und einige andere dinge angepasst. (dank an FF und die anderem im chat) malsehen ob ich mich nun daran gewöhne. |
||
|moonForge|
Ich bin Pokémon Meisterin seit 1998! |
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: wenn strict nicht so nerven würde, hätte ich es ja an.
aber es verlangt ja sogar für for schleifen ein local, und dann kann ich irgendwie nie 2 schleifen haben die den selben wert durchgehen (also 2 mal "for local x = 0 to 10", da meckert es dan rum). Das ärgert mich auch öffter mal. Dann erstelle ich einfach am Anfang der Function/Methode ein local "i:int", und hab dann meine Ruhe. Aber meist änder ich stehts den Namen des locals in der For-Schleife, je nach dem worums sich handelt, zB: dir ship p für Particle usw Dann ist es auch gleich besser lesbar. @ all mir ist aufgefallen, das Strict jedoch langsamer ist, als ein erstelltes Exe ohne Strict. Ich arbeite zwar auch mit Strict/SuperStrict, aber ich frage mich ob es am Ende des Projectes wohl bessere wäre, wenn man es dann doch wegliese, da das Game dann fixer ist ??? Ich will hier aber keinen Falschen Vorschalg machen. Ich benutze halt immer TimeDifference als SpeedAnzeige, und daran ist es mir mal aufgefallen. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, wenn sauber programmiert wird ist (super-)strict in der Regel schneller als ohne.
Zudem kannst Du das strict nicht einfach zu Ende rausnehmen da sich das Scopingverhalten von Max dann ändert und du unter Umständen nicht nachvollziehbare Fehler erhältst. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
ist schon etwas länger her, sorry, vergass durch den Jahreswechselstress immer zufragen.
Was meinst du denn mit sauber programmieren ? welcher Programmierstill, wenn man das so nennen darf, ist denn besser für (super-)strict ? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sauber im Sinne der Nutzung aller OO-features von BMax, ohne Rückgriff auf die Wrapper die zum Komfort eingebaut worden sind. Dann vollständiger Verzicht auf Int-Handles, denn die sind übelst lahm.
Das dersbste Problem ist aber in der Tat das unsägliche Scoping von Bmax im Vergleich Strict/Nonstrict. Eigentlich was Dreamora da schon sehr ausführlich, und ich konnte bislang nicht beobachten dass meine Programme mit superstrict langsamer wären. Eher das Gegenteil. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
StarGazer hat Folgendes geschrieben: Was meinst du denn mit sauber programmieren ? welcher Programmierstill, wenn man das so nennen darf, ist denn besser für (super-)strict ?
Sauber in dem zusammenhang heisst primär: 1. Keine Goto / Gosub Codes (strict sorgt dafür das mans net nutzen kann) 2. Kein HandleFromObject( ... ) etc. War in Blitz3D ja noch akzeptable das man das mit types gemacht hat um sie im entityname zu speichern und dann schneller raus zu holen später, aber in BM bright die leistung total ein und wenn man vergisst das objekt selbst zu zerstören hat man wie erwähnt auch noch ein speicher loch, da handle objekte nimmer von garbage collector gehandhabt werden. 3. min. modulare Programmierung (also klare benennung für dinge, eigene dateien für eigenständige dinge, ...), optimal natürlich direkt objekt orientiert, damit hat man klar getrennte Datenräume. Da BM echte Referenzen kennt, nicht nur "int handles" wie die alten BlitzSprachen hast du von Objekten dann auch mehr weil du sie in funktionen reinschicken kannst und drin ändern zb 4. Variablen immer sauber deklarieren. Heisst mit local oder global je nachdem was sie sein sollen und mit ihrem type 5. immer strict, wenn man will auch superstrict am anfang der datei (ausser die wird included, dann kommts von der hauptdatei her). Ich persönlich nimm strict weil man bei code von anderen personen nie garantieren kann das alle ints schön deklariert wurden und da die "alles muss mit type deklariert werden" pflicht der hauptunterschied von Strict zu SuperStrict ist, seh ich da keinen direkt zwang immer superstrict zu gehen Ich denke damit sind die wichtigen Dinge die mir so auf anhieb in den sinn kommen abgedeckt. wenn man die befolgt wird man sehr viel weniger kopfweh haben und vor allem in BM sehr viel schneller guten code hinbekommen als man es in Blitz3D / BlitzPlus vermutlich jemals hat (zumal der debugger von BM einiges besser ist und windows user die Blide nutzen werden vermutlich gleich doppelt happy rauskommen) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke euch für die Tipps. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group