Schwerer, unspezifischer Fehler

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

 

Omenaton_2

Betreff: Antwort für LINKed

BeitragDo, Nov 19, 2009 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
LINKed
Zitat:
"Was ich mich frage ist wozu man 400 Variablen braucht.
WoW zum Beispiel benutzt pro Item/NPC/wasauchimmer ca. 5-15 Variablen, die nur aus den Datenbänken gelesen werden wenn sie auch gebraucht werden...."


Ich werde nicht genau auflisten, was diese Variablen sind. Das WoW nur 5-15 Variablen pro Item/NPC/ Wasauchimmer benutzt kann ich nicht glauben. Diese Zahl ist entweder total aus der Luft gegriffen oder es sind damit nicht alle Variablen gemeint, sondern nur die, die auch öfters zwischen Server und Klienten übertragen werden. Da sind sehr viel mehr Variablen die da sind und auch ständig gebracht werden, nur nicht ständig auch übertragen werden müssen.
Die NPCs haben bei mir über 400 Variablen. Die Items viel, viel weniger. Viele Items habe ich aber auch pro Item Typus auch einen eigenen Type, sonst müßte der Item Type auch sehr groß werden, weil unterschiedliche Item Arten unterschiedliche Eigenschaften, Funktionen haben die alle nach ihren eigenen Variablen verlangen.

NPCs und Items sind 2 totalst unterschiedliche paar Schuhe. Ich weiß das genau, weil ich das schon fertigprogrammiert habe. Erwähne sie nicht mit nur einem Schrägstrich getrennt, weil damit verrätst du nur deine Ahnungslosigkeit in dieser Sache.


Zitat:
Da du ja anscheinend ein größeres Spiel programmieren willst, empfehle ich dir Functionen zu benutzen, da sie die Leserlichkeit stark verbessern. Außerdem kann man dadurch (wie in anderen Posts schon geschrieben) Fehler wesentlich besser finden.


Die Functions sollen die Leserligkeit verbessern ? Gegenüber was ?
Sicherlich nicht gegenüber einen Code wie meinen mit Subrutinen. Mit GOSUBs aufgerufene Subrutinen stehen Functions in nichts nach. In beiden Fällen kann ein Code absolut identisch gegliedert sein, nur in meinem Fall springe ich mit GOSUB zu einem Code-Abschnitt (Subrutine genannt) und Function Fanatiker "springen" (rufen) ihren Code-Abschnitt (Function) genannt ohne das Wort Gosub auf.
Gosubs sind dabei leserlicher und verständlicher, weil Gosub ein blau gezeichneter Befehl ist und ein Function Aurfuf ist nur weiß wie eine gewöhnliche Variable. Außerdem sagt Gosub genau das aus, was da geschieht, nehmlich "GO to SUBrutine Machetwas". Verständlicher als das kann gar nichts sein.


Zitat:
Ich denke du solltest deinen Programmierstil ändern, da du sonst in deinem "Spagetti-Code" untergehen wirst.


Woher willst du wissen, daß mein Code ein Spagetti-Code ist, wenn du zugegeben hast, daß du meinen Code noch nie gesehen hast ? (Und ich kann dir verraten daran wird sich auch in der Zukunft nichts ändern).

Das ist schon wieder eine aus der Luft gegriffen, unseriöse Behauptung.
Nur weil du es nicht weißt, wie man ohne Functions einen Code gut leserlich halten kann, heißt es nicht, daß das nicht geht.
Ein so langer Code für ein so komplexes Spiel wie meine kann unmöglich eine Spagetti-Code sein, sonst wäre es nicht möglich diesen zum Laufen zu bringen und Bugs darin zu finden. (Meine spiele sind extrem Bug arm. Ich habe zur Zeit in meinem Projekt nur 2 Bugs drin, die auf meiner Liste stehen und in meinem Strategiespiel sind am Ende glaube ich noch ca 3 Bugs drin geblieben. Vergleiche das mal mit der Anzahl der Bugs in anderen, "professionellen" Spielen.)

Ich sehe nicht den aller geringsten Grund meinen erfolgreichen Programmierstiel zu ändern.
Nur um anderen Personen die Genugttung zu beschaffen, daß Alle alles genau so machen, wie sie es alleinig für richtig halten tue ich gar nichts und nur weil Viele etwas glauben werde ich es nicht auch glauben und nur weil Viele etwas glauben wird dieses etwas deswegen noch nicht wahr.


Zitat:
Ich achte sehr darauf, dass mein Code auch für andere Menschen gut zu verstehen ist.


Schön für dich. Vielleicht hast du auch einen guten Grund dafür wie Zusammenarbeit mit anderen Programmierern oder du begegnest öfters Fehler in deinem Code den du allein nicht finden kannst und du deshalb deinen Code Anderen zeigen mußt. (Vielleicht aber machst du das nur, weil man dir das so gesagt hast, daß du das tun sollst.)
Ich jeden Falls habe niemals die Absicht gehabt meinen Code jemals irgendjemandem zu zeigen. Ich programmiere alleine und das ist genau das Gute daran.
Ich bin kein Berufsprogrammierer und möchte das niemals werden. Ich hatte niemals diesen Wunsch und ich kann mir nicht vorstellen, daß sich das ändern würde. Für mich ist das Hobby und Ausgleich zu meinem sonst auf designerischen Gebiet liegenden Arbeit.

Der wesentliche Punkt ist, daß ich nicht deshalb programmiere, um zu programmieren. Berufsprogrammierer tun das.
Ich programmiere um meine erdachte Welt zu verwirklichen und diese so anderen Personen zu zeigen. Ich will also nicht den Programmcode zeigen, sondern das Ergebnis wohin dieser Code mit Unterstützung der Grafik, Story und Sound hinführt.
Für mich ist der Code nur der Mittel zum Zweck und nicht gleich der Zweck.


Zitat:
Und wenn du uns nicht mal den Code zeigst werden wir den Fehler wahrscheinlich nicht erkennen.


Erstens der "Fehler" ist längst vor mir behoben worden, zweitens es war kein echter Fehler in Code, sondern nur eine leider nicht dokumentierte, bisher unbekannte Beschränkung von BlitzBasic die erst ermittelt werden mußte. Nur dafür habe ich hier diesen Thread ursprünglich gestartet. Nicht um einen Code-Fehler zu finden, sondern um in einer Diskussion meiner Vermutung nach einer undokumentierten Sache nachzuforschen. Das ist auch gelungen.
Normale, echte Programmfehler habe ich bisher immer auch alleine gefunden und ich habe noch nie Code aus diesem Grunde zeigen müssen. Nur wenn ich eine Sache grundsätzlich noch nicht gut kenne und verstehe frage ich nach, aber dabei geht es nicht um Code Fehler, sondern um Verständis eines Prinzips und dafür reicht pseudo Code.

Eingeproggt

BeitragDo, Nov 19, 2009 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ui... Also ich hab ja wie per PN angekündigt deine Haltung zu Gosub und Function respektiert. Aber das eine Argument was ich da aufgegriffen hab aus deinem Post ist nicht so ganz schlagkräftig:

Zitat:
Gosubs sind dabei leserlicher und verständlicher, weil Gosub ein blau gezeichneter Befehl ist und ein Function Aurfuf ist nur weiß wie eine gewöhnliche Variable.


Es gibt ja andere IDEs außer der Blitz-Standard-IDE in denen Funktionsaufrufe ebenfalls gehighlightet werden - sogar in jeder Farbe die du möchtest.
Klar, von Blitz her isses blöd gemacht aber so alternative IDEs wie zB IDEal sollte sich wirklich jeder anschauen der größere Projekte macht. Hast ja selber gesagt du benutzt Includes. Die Arbeit mit Includes und der Blitz-Standard-IDE stell ich mir auch sehr mühsam / grausig vor. IDEal hilft da, die Übersicht zu behalten und die Dateien zu verwalten.

EDIT: Moment mal - sagtest du nicht auch du würdest eh nicht mehr die Standard IDE benutzen weil diese n Limit von 1MB pro Code-Datei hat?
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

BladeRunner

Moderator

BeitragDo, Nov 19, 2009 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Pro Function:
- Saubere Datentrennung. Die Function erfährt nur das an Daten was sie braucht und kann ausserhalb nichts verwursteln.
- Du musst nicht Variablen mehrfach umdeklarieren für verschiedene Zwecke wie Du es derzeit wohl praktizierst.

Sorry, das Argument mit dem Highlight ist für mich keines, zumindest keines mit Gewicht. Mittels Gosub erstelle ich einen großen Datenraum und das ist sehr gefährlich weil es sehr leicht zu Kreuzeffekten führen kann.

Vor BMax war ich auch ein strikter Vertreter prozeduraler Programmierung, weil ich nur die kannte. Heute möchte ich die zusätzlichen Trennungsmechanismen der Objekte nicht mehr missen, einfach weil sie enorm viele Fehlerquellen ausschalten.
Auf dem C64 habe ich auch Goto und Gosub bis zum erbrechen genutzt. Klar geht das. Ich frage mich nur warum Du Dich neuen Techniken zwanghaft verschliesst anstatt sie mal zu versuchen, denn ich empfand das Umsteigen auf einen funktionsgestützen Code als massive Erleichterung meiner 'Arbeit'.

Aber im Endeffekt ist es ja dein Bier wie Du es machst, nur fürchte ich Du wirst zunehmend an die Grenzen des Compilers stoßen.
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

LINKed

BeitragDo, Nov 19, 2009 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das eigene Functions nicht als Befehl angezeigt werden, mag zwar beim normalen Compiler stimmen, allerdings zeigt BlitzView auch eigene Functionen Blau.
Also kannst du auch einfach einen anderen Compiler benutzen.

Edit: Es wundert mich nur das du, wenn ein Schiff zerstört wird, 400 Variablen updaten musst.
Soviel kann da ja nicht passieren. (Das waren auch die 87 Variablen)

mpmxyz

Betreff: Ich gebe mal auch meinen Senf dazu...

BeitragDo, Nov 19, 2009 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Anzahl an Variablen pro Objekt
Das ist noch im Rahmen des Möglichen, wenn die Objekte dem entsprechend variabel sind.

Der Programmierstil von Omenaton_2
Wenn es Spaghetti Code ist, dann hat er zumindest Fleischbällchen. Smile

Ich gönne jedem seine Meinung, auch wenn ich sie nicht mit ihm teilen kann.
Aber ich stelle mir gerade die "Einfachheit" dieses Codes von Omenaton_2 vor:
BlitzBasic: [AUSKLAPPEN]
WritePixel Sin(r)*Entfernung(x1,y1,x2,y2),Cos(r)*Entfernung(x1,y1,x2,y2),$FFFFFFFF

Moment... Das hier wäre meines Wissens nach sein Code:
BlitzBasic: [AUSKLAPPEN]
Sinus_Winkel#=r
Gosub Sinus
Cosinus_Winkel#=r
Gosub Cosinus
Entfernung_X1=x1
Entfernung_Y1=y1
Entfernung_X2=x2
Entfernung_Y2=y2
Gosub Entfernung
WritePixel Sinus_Rückgabe*Entfernung_Rückgabe,Cosinus_Rückgabe*Entfernung_Rückgabe,$FFFFFFFF

[Ironie]Das ist doch schön kurz und einfach! Und man kann die Parameter sauschnell auf Korrektheit überprüfen, da sie auf ganzen 10 Zeilen verteilt wurden.[/Ironie]
Ich benutze bewusst eine Hyperbel, um auf das Problem aufmerksam zu machen! Falls ich dein System falsch verstanden habe, dann sehe ich gerne ein Gegenbeispiel.
Natürlich funktioniert es auch nur mit GoSub, aber Funktionen haben trotzdem die teilweise schon genannten Unterschiede.
Man muss sich nicht mehr die Namen der Parameter und Rückgabevariablen merken, um eine Funktion verwenden zu können, und jede IDE, die etwas auf sich hält, unterstützt einen zusätzlich beim Programmieren, indem sie einen die Funktionsparameter zeigt.
So kann man die Funktionen auch besser wiederverwenden und weitergeben. (Wozu gibt es denn ein "Codearchiv" in diesem Forum?)
Außerdem haben diese den auch schon einmal genannten Vorteil der Kapselung; man kann sowohl im Hauptprogramm als auch in jeder Funktion Variablen à la "x1", "x2" etc. nutzen, ohne, dass sich diese gegenseitig beeinflussen können. Man kann die Programme besser kontrollieren und einem fallen nebenbei vielleicht noch unbekannte Fehler auf.
Es tut nicht weh, sich neue Sachen anzuschauen und anzueignen. Wenn etwas wehtun würde, dann ist es die Tatsache, Neuerungen zu meiden.
Vor kurzem konnte ich mir noch nicht vorstellen, was einem denn OOP für große Vorteile bringen soll.
Ich hatte zwar ein bischen davon gelesen, aber ich kannte es nicht wirklich.
Daher habe ich mich aber nicht davor verschlossen; ich habe stattdessen so lange gewartet, ein Urteil zu fällen, bis ich genug Erfahrungen damit gesammelt habe.
Da ich es noch nicht "alltäglich" nutzen kann, ist meine Meinung dazu etwas neutraler:
Ich sehe in OOP nicht wenige Möglichkeiten; auch wenn ich es noch nicht so sehr vermisse, könnte ich mir gut vorstellen, dass ich jene oder welche Sache viel besser hätte lösen können, wenn Blitz3D OOP könnte.
Die Sache könnte man auch in die andere Richtung spinnen:
Zitat:
Feuer? Ich sehe keinen Sinn darin. Man könnte sich ja daran verbrennen! Ich komme außerdem auch ohne klar.

Dies ist ganz klar auch eine Hyperbel, ein ganz normales Stilmittel. ; - )

Zitat:
Der wesentliche Punkt ist, daß ich nicht deshalb programmiere, um zu programmieren. Berufsprogrammierer tun das.

Und genau dafür sind "Berufsprogrammierer" weniger gedacht.
Es ist natürlich nicht ausgeschlossen, dass bei der Berufswahl die Interessen der jeweiligen Person mit eingeflossen sind, aber wenn man Programme nicht programmieren sondern singen müsste, dann würden "Berufsprogrammierer" singen müssen.
Sie sind streng genommen nur dafür da, Programme zu erstellen.
Sie machen also doch das, was du machst.

Und zu guter Letzt frage ich mich, wozu man temporäre Variablen braucht, wenn man ein Objekt kopiert.
Hast du eine Antwort?
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

Omenaton_2

BeitragFr, Nov 20, 2009 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
An mpmxyz.

Der Code den du mir zudichtest entspricht nicht im Geringstem meinem Programmierstiel. Ich sehe daran, wie schwer es dir fällt dir was Anderes als das was du immer machst vorzustellen.

Weißt du, es gibt viele Leute, die müssen einfach immer alles genau studiert haben und dann ganz genau nach den Vorgaben, wie im Lehrbuch steht vorgehen um ein Problem zu lösen, weil wenn sie versuchen von dem gut bekannten, schon zertretenen Lösungsweg (den ihnen andere gezeigt haben) abzukommen gibt es für sie ein katastrophales Ergebnis.
Die mögen dann das ganz und gar nicht, wenn jemand die Frechheit besitzt zu behaupten oder gar zu zeigen, daß es auch anders gut geht.

Es gibt aber auch Individuen wie zum Beispiel mich, der fähig ist eigenständige Wege zu gehen.
Wenn ich vor ein Problem gestellt werde (und das kommt und kam bei meinen großen Projekten sehr oft vor, weil ich sehr Vieles was ich mache zum aller ersten Mal im Leben mache) dann lese ich nicht irgendwo nach "wie man Dies und Jenes macht" oder frage jemanden danach, sondern entwickele selbständig eine Lösung. Ich nehme auch nicht gleich die erste Idee die mir einfällt. Wenn ich von der ersten Idee nicht sehr überzeugt bin, dann entwickele ich immer gedanklich alternative Lösungen und wäge dann die Vor- und Nachteile ab und verwirkliche dann den besten Weg.

Lieber mpmxyz, ich habe den Eindruck, du bewegst dich gedanklich in all zu engen Grenzen und Kreativität ist nicht deine Stärke.
(Das schlußfolgere ich aus der Gesamtheit deines Schreibens und insbesondere aus dem Code, den du MIR zudichtest.)


Zitat:
Und zu guter Letzt frage ich mich, wozu man temporäre Variablen braucht, wenn man ein Objekt kopiert.
Hast du eine Antwort?


Mit Objekt meine ich hier (was ich eigentlich schon beschrieben habe) nicht einfach nur einen Mesh, sondern alles, was ein von mir Living Object (in 3D RPGs aber meist nur MOB genanntes) Wesenheit (NPC, Gegnerschiff, etc.) ausmacht.
Dazu gehören alle Eigenschaften, Attribute, Fähgikeiten und Zustände eines LOBs aber auch die Grafik und die Grafik beschreibenden Werte. Natürlich auch mehrere Meshes, angehängte Spezialeffekte, etc.

Da die LOBs bei mir immer in einem TYPE drin sind und man auf ein Mal immer nur an einen einzigen Type Eintrag zeigen kann, ist es nicht möglich, ohne mindestens 3 temporären Variablen die Werte von dem einem Type Eintrag (Muster) zum anderen (Duplikat) zu übertragen. Weil nicht 2 oder mehrere Einträge (oder wäre Instanz das bessere Wort dafür) des selben Types "aktiv" sein können.
 

BIG BUG

BeitragFr, Nov 20, 2009 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
und man auf ein Mal immer nur an einen einzigen Type Eintrag zeigen kann


man kann doch beliebig viele Zeiger auf einen Type Eintrag(oder verschiedene) benutzen?
Code: [AUSKLAPPEN]
Type tTest

   Field myField

End Type


a.tTest = New tTest
b.tTest = a.tTest

a\myField = 10

Print b\myField

WaitKey()
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

mpmxyz

BeitragFr, Nov 20, 2009 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus der Tatsache, dass du trotz - wenn auch leicht kleinen - Aufruf kein Gegenbeispiel lieferst, könnten böse Zungen behaupten, dass du gar kein Gegenargument hättest.

Nun bin ich aber kein böser Deutschlehrer.
Daher hast du immer noch die Möglichkeit, ein Gegenbeispiel zu liefern, um mein Argument zu entkräften.
Außerdem bin ich gerne für neue Sachen zu haben; mich interessiert diese Möglichkeit wirklich sehr.
Man hat immerhin nie ausgelernt.
Aber nun komme ich zum Ende meiner Antwort auf deinen kurzen Text:
Warum sollte man nicht mehrere Type-Instanzen auf einmal bearbeiten können?
Da würden ja viele meiner Programme nicht funktionieren...

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

BladeRunner

Moderator

BeitragFr, Nov 20, 2009 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenn mpmxyz' Beispiel etwas überspitzt war trifft es doch den Kern. Du sagst Du benutzt keine einzelne Function in deinen Programmen. Was glaubst Du was Sin(), Cos(), Mousex() und wie sie alle heissen sind? Ab von den Kernkonstrukten der Sprache (Schleifen, Bedingungen, Deklarationen) besteht Blitz nahezu vollständig aus einem Funktionspaket. Und nur weil es da gehighlighted wird ist es gut, wenn Du es aber selber machst und es nicht gehighlighted wird ist es böse?
(Noch dazu wo man auch in der Standard-IDE sämtliche eigenen Funtkionen per DECLS highlighten kann. Nur mal so am Rande).

Und was das Benutzen von Types angeht solltest Du vielleicht wie es Big Bug schon zeigte vielleicht nochmal ein wenig üben- Du kannst beliebig viele Typeinstanzen beliebig oft referenzieren.

Zitat:
Es gibt aber auch Individuen wie zum Beispiel mich, der fähig ist eigenständige Wege zu gehen.

Dann wäre meine Frage: Muss jeder das Rad für sich erfinden? Ist es böse aus den Erfahrungen anderer zu lernen? Ist der eigenständige Weg zwangsläufig der Beste?
Ich würde da dreimal mit nein antworten.
Klar ist es sinnvoll sich selbst Wege zu erarbeiten, schon allein weil man mehr Einblick und Verständnis erlangt. Dazu gehört - wenn man sich schon als Denker und Selbstständig deklariert - aber auch dass man seine Thesen und Algorithmen wertneutral im Vergleich mit anderen beurteilt, und ich denke im aktuellen Fall würde schon die Tatsache dass ich mit functions keine sonderbaren Konstrukte erschaffen muss um den Compiler vom Freitod abzuhalten eine recht eindeutige Sprache sprechen.
Zitat:
Lieber mpmxyz, ich habe den Eindruck, du bewegst dich gedanklich in all zu engen Grenzen und Kreativität ist nicht deine Stärke.

Ich finde es erstaunlich dass Du dies konstatierst, ohne selbst gedanklich die Flexibilität an den Tag zu legen neues zu testen und dir DANACH ein Urteil zu bilden. (Und ja, ich erlaube mir ein Urteil, denn ich habe sowohl mit Goto/GoSub als auch mit Functions als auch mit Objekten und deren Instanzen mittlerweile je einige Jahre Erfahrungen gesammelt.)

Im Endeffekt bleibt es Dir weiter überlassen wie Du vorgehst, und es kratzt mich auch nicht sonderlich ob Du neue Wege gehen möchtest oder nicht. Nur denke ich sollte Dir bewusst sein dass Du bei Problemen die deswegen auftreten kaum einer ernsthaft zu Deiner Hilfe eilen wird- Du möchtest nichts Neues aufnehmen also können wir uns die Mühe sparen es Dir zu empfehlen.
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

FireballFlame

BeitragFr, Nov 20, 2009 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Omenaton_2 hat Folgendes geschrieben:
Weißt du, es gibt viele Leute, die müssen einfach immer alles genau studiert haben und dann ganz genau nach den Vorgaben, wie im Lehrbuch steht vorgehen um ein Problem zu lösen, weil wenn sie versuchen von dem gut bekannten, schon zertretenen Lösungsweg (den ihnen andere gezeigt haben) abzukommen gibt es für sie ein katastrophales Ergebnis.
[...]
Es gibt aber auch Individuen wie zum Beispiel mich, der fähig ist eigenständige Wege zu gehen.

Sehr schön. Ich würds andersrum auslegen:
Dein "eigenständiger" Weg besteht darin, das zu tun, was andere Programmierer früher getan haben. Die, die gute Ideen hatten und sich weiterentickelt haben, haben Funktionen, OOP etc. erfunden.
Heißt also, du verachtest den vom Mainstream "zertretenen" Weg - und dann gehst du stattdessen einen Weg der so zertreten ist, dass ihn selbst der Mainstream schon seit Jahrzehnten nicht mehr will?
Wie mpmxyz schon sagte, ein paar Beispiele, wo dein Programmierstil denn übersichtlicher und besser ist als der "normale", wären sicherlich interessant Smile
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Casiopaya

Betreff: Re: Antwort für LINKed

BeitragSo, Nov 22, 2009 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Wir warten noch auf dein Beispiel der Lösung von mpmxyz`s Codezeile...

Omenaton_2 hat Folgendes geschrieben:

Die Functions sollen die Leserligkeit verbessern ? Gegenüber was ?
Sicherlich nicht gegenüber einen Code wie meinen mit Subrutinen. Mit GOSUBs aufgerufene Subrutinen stehen Functions in nichts nach. In beiden Fällen kann ein Code absolut identisch gegliedert sein, nur in meinem Fall springe ich mit GOSUB zu einem Code-Abschnitt (Subrutine genannt) und Function Fanatiker "springen" (rufen) ihren Code-Abschnitt (Function) genannt ohne das Wort Gosub auf.
Gosubs sind dabei leserlicher und verständlicher, weil Gosub ein blau gezeichneter Befehl ist und ein Function Aurfuf ist nur weiß wie eine gewöhnliche Variable. Außerdem sagt Gosub genau das aus, was da geschieht, nehmlich "GO to SUBrutine Machetwas". Verständlicher als das kann gar nichts sein.



Also einmal ignorierend dass du allen ernstes die Schlüsselwort-Typ - Farbe deiner IDE entscheiden lässt nach welchem Paradigma du programmierst ( Question Question Question Question Question ) solltest du evtl wissen, dass die Programmierung sich in den letzten 20 Jahren stark verändert hat, getrieben von wissenschaftlicher und technischer Neugier.

Falls dir Dinge etwas sagen wie:

- Information Hiding (auch bekannt als Datenkapselung)
- Kopplung und Zusammenhalt (zwischen und innerhalb verschiedener Module)
- Objektoriertierung (Oberbegriff, enthält u.A. die beiden oberen Punkte)

dann kannst du nachlesen, dass (-genau wie man nun in Autos eine Servolenkung hat, damit man sich nicht mehr den Arm ausrenkt beim Lenken-) dies Techniken sind, die eine Weiterentwicklung bestehender, bekannter Lösungen darstellen. Sie werden verwendet, schlicht weil sie eine Verbesserung darstellen.

Es bleibt dir überlassen wirklich ohne Functions zu programmieren, aber bei jedem größeren Projekt führt das nicht nur dazu, dass du "deinen eigenen Stil verwendest" (kannst ja Stolz auf dich sein), sondern dass der Code unermesslich unüberschaubarer und vorallem komplizierter wird.

Wenn du eine Funktionalität in der Funktion realisierst, tust du das genau ein mal. Wenn du an verschiedenen Stellen deines Programms diese Funktionalität brauchst kannst du mit deiner Lösung entweder

a) An allen Stellen identischen Code einfügen: Dies ist die schlechtest denkbare Lösung, Code-Duplizierung ist NUR (wirklich NUR) aus Performancegründen erlaubt

b) mit GoSubs rumeiern, dass es dir schwindelig wird. Wenn die Funktion z.B. 4 Übergabeparameter hat, wie willst du das machen? Du müsstest irgendwie "lokale" Gosub-Variablen haben, die diese Funktionalität erfüllen und dann an jeder Stelle individuell setzen und lesen.-> Völlig unmöglich bei viel Code da den Überblick zu halten.

Nochmal:

BlitzBasic: [AUSKLAPPEN]
WritePixel Sin(r)*Entfernung(x1,y1,x2,y2),Cos(r)*Entfernung(x1,y1,x2,y2),$FFFFFFFF


Sieht bei dir wie aus?

Angenommen "Entfernung" ist eine Funktionalität, die sehr häufig gebraucht wird. Wiederkehrende Funktionalität gibt es in wirklich jedem Programm, das mehr als 100 Zeilen hat. Bevor du weiter auf deinem Standpunkt verharrst und in kaum akzeptabel arrogantem Ton über andere herziehst, solltest du erst mal deine Lösung preisgeben. Du sagts hier Dinge wie derlei Menschen seien nicht kreativ, nicht fähig selbst Dinge zu entwickeln... Hmm. ich bin Softwaretechniker mit nem Uni-Diplom und 5 Jahren Studium im Software- Engineering und verdiene Geld damit, qualitativ hochwertige, wiederverwendbare und wartebare Software zu entwerfen. Du willst sagen, dein Weg sei individuell? Ist er, heist aber nicht, dass er individuell gut ist.

Das Wissen der Menschheit verdoppelt sich (nach verschiedenen Schätzungen) alle 5 Jahre. Man muss gar nicht komplett verstehen was wohl wirklich bedeutet (das tu ich auch nicht), aber das Nutzen von Wissen, dass andere Menschen errungen haben, und das nachfolgende weiterentwickeln dieses Wissens ist der Grundpfeiler einer Kultur.

Da ich schon mit Leuten wir dir zu tun hatte: Schreibe bitte als ersten Teil in deinen neuen Post deine Code-Lösung. Vlt ist sie ja so gut, dass wir alle staunen und dir Recht gegen (wäre toll, denn dann würdest du bestimmt an der TU München Informatik eine Professur angeboten bekommen aufgrund der Erfindung eines neuen, bahnbrechenden Programmierparadigmas.)

D2006

Administrator

BeitragSo, Nov 22, 2009 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Omenaton_2 hat Folgendes geschrieben:
Es gibt aber auch Individuen wie zum Beispiel mich, der fähig ist eigenständige Wege zu gehen. ...

Wenn es in deinem Interesse liegt, dass die Leute hier einfach deinen Programmierstil akzeptieren und tolerieren und endlich aufhören, dagegen vorzugehen... ja dann solltest du diesen arroganten Unterton mal weglassen.

Dazu ein allgemeiner Aufruf an alle, hier nicht unsachlich und persönlich zu werden. Sonst hol ich die Verwarnungskeule raus.
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
 

Omenaton_2

BeitragMo, Nov 23, 2009 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu erst zu dem Beispiel Code.

Code: [AUSKLAPPEN]
;--- Die Lösung mit Function --------------------------------------------------------

WritePixel Sin(r) * Entfernung(x1,y1,x2,y2), Cos(r) * Entfernung(x1,y1,x2,y2), $FFFFFFFF

;... wird hier die Function 2 mal in der selben Zeile aufgerufen und berechnet ? Bei Gosub reicht es nur ein Mal.

Function Entfernung(x1,y1,x2,y2)

   Return Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)

End Function



;--- Meine Variante "A" wenn solche Entfernungsberechnung sehr oft gebraucht wird ---

Gosub BerechneEntfernung
WritePixel Sin(r) * Entfernung, Cos(r) * Entfernung, $FFFFFFFF

;...

.BerechneEntfernung

Entfernung = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)

Return



Vergleichen wir Variante A (die ich am ehesten benutze) mit der Functionslösung.
Meine Gosub Variante ist von Code Länge her insgesamt nicht länger (sogar bißchen kürzer) als die Function Variante.
Mit Gosub : 86 Char Länge inlklusive Leerstellen.
Mit Function Aufruf : 88 Char inklusive Leerstellen.
Die Subrutine ".BerechneEntfernung" ist auch nicht länger als die Function.
(Wobei Code Länge meiner Auffassung nach am allerwenigsten von Bedeutung für ein Programm ist.)
Von Ablauf her ist die Gosub Variante sogar klein wenig schneller als die Function, ich habe dafür einen Test gemacht. Der Unterschied
ist gering, aber zumindest liegt die Gosub Lösung auch von Performance her keineswegs hinter einer Function zurück.


Code: [AUSKLAPPEN]
;--- Meine Variante B wenn solche Entfernungsberechnung nur 2-3 mal gebraucht wird -----
; Wenn so eine einfache Berechnung nur paar Mal gebraucht wird, dann mache ich dafür kein Gosub sondern schreibe es einfach an Ort und Stelle
; dann hat man alles gleich im Überblick.

Entfernung = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
WritePixel Sin(r) * Entfernung, Cos(r) * Entfernung, $FFFFFFFF



Code: [AUSKLAPPEN]
;--- Spezial Fall C wenn solche Entfernungsberechnung oft gebraucht wird und wenn die Ausgangsvariablen immer unterschiedlich sind ---
; Das ist der einzige Fall, in dem eine Function gewissen Sinn machen könnte, aber solche Fälle habe ich in meinem Programm fast gar nicht !
; das ist die sehr seltene Ausnahme. (In einem 3D Programm wie mein aktuelles Projekt nehme ich immer EntityDistance Befehl für die Entfernung.
; Ich weiß, daß die Entfernungsberechnung nur ein Beispiel ist, es könnte auch was ganz Anderes berechnet werden, aber das gehört auch dazu.)

x1 = X1_Hier : x2 = X2_Hier : y1 = Y1_Hier : y2 = Y2_Hier
Gosub BerechneEntfernung
WritePixel Sin(r) * Entfernung, Cos(r) * Entfernung, $FFFFFFFF


In diesem seltenen, schlimmsten Fall hätte ich eine Zeile extra drin für die Variablenzuweisung. Damit kann ich gut leben Smile
Meine Subrutinen, die öfters aufgerufen werden beinhalten nur selten reine Berechnungen. Ich manipuliere meist die NPCs und die müssen
globale Types sein, damit sie überall funktionieren. Es werden Zustände verändert, überprüft und Ähnliches.

Mein Fazit (das damit gleicht, was ich schon vor vielen Jahren festgestellt habe) :

Für den überwiegenden Teil meiner Programmierung bieten die Functions keinerlei Nützliches und schon gar nicht was Notwendiges.
Es kann sehr selten solche Situationen geben, in denen die Benutzung einer Function ein wenig an Code Länge sparen kann.
Das war aber dann auch schon alles an Vorzügen. Ich könnte mit Functions lediglich ein paar Zeilen Code einsparen.
Nach meiner groben Schätzung könnte ich meine Code mit Functions vielleicht 0,1% kürzer machen.
Ich kann mir vorstellen, daß andere Personen die vornehmlich anders gerichtete Aufgaben in ihren Projekten zu
lösen haben als ich, öfters Nutzen von Funktionen ziehen können.
Functions würden meinen Code weder schneller, noch übersichtlicher machen. Also nichts von Bedeutung.

Was ich total ablehne ist, daß viele Leute (weil man ihnen das so gesagt hatte und sie diesen Diktat auch akzeptieren) alles mit Functions lösen
wollen und empören sich darüber, wenn jemand andere Gosubs benutzt und glauben fälschlicher weise, ihr Code sei viel, viel übersichtlicher
und gar schneller und weit, weit überlegen als der Code eines Gosub-Nutzers, nur weil sie überall Functions einsetzen.
Das ist falsch und es ist egal wie Viele wie oft das behaupten, es bleibt falsch.

* * *

An Casiopaya
Zitat:
...dies Techniken sind, die eine Weiterentwicklung bestehender, bekannter Lösungen darstellen. Sie werden verwendet, schlicht weil sie eine Verbesserung darstellen.


Das ist eine idealisierende, blauäugige Verallgemeinerung.
Sehr oft ist es so, daß eine Weiterentwicklung nur scheinbar tatsächlich eine echte, nützliche Weiterentwicklung ist. Oft ist es nur Schein.

Als Beispiel dafür möchte ich viele neu entwickelte Medikamente nennen.
Es ist so, daß die mächtige Pharma Konzerne ständig neue Medikamente auf den Markt bringen, die sie dann teuerer verkaufen wollen als die Alten, weil die Neuen ja besser seien, weil sie halt neu sind, weil sie eine "Weiterentwicklung" sind.
Sie preisen dann (mit viel Power) diese Weiterentwicklungen so an, als ob sie den alten Medikamenten weit, weit überlegen wären und es sei großer Fehler und rückständig noch die alten Medikamente zu kaufen.
Wenn sich dann eine von Lobbyisten unabhängige Organisation die neu entwickelten Medikamente genauestens untersucht und diese mit den alten vergleicht, wird oft festgestellt, daß die Aussagen über die Überlegenheit des neuen Medikamentes sehr weit übertrieben sind. In der Wirklichkeit sind die im Kern die selben wie die Alten, man hat nur paar unbedeutende zusätzliche Substanzen hinzuaddiert. Die Verbesserung gegenüber dem Alten ist hauptsächlich rein kosmetischer Natur. Die Wirkung ist der Gleiche. Es gibt vielleicht eine sehr kleine Patientengruppe, die das neue Medikament vielleicht minimal besser verträgt. Für die Mehrheit der Patienten bringt aber das neue Medikament keinerlei Vorteile und sie könnten ruhig beim Alten bleiben.

So ähnlich verhält es sich auch mit den Functions, nur das es viel weniger einen kommerziellen Hintergrund gibt.
Hierbei ist es eher so, daß die Menschen die sich intensiv (in Beruf oder in Universitäten) damit beschäftigen immer bemüht sind den Image einer Person zu haben, der "fortschrittlich" ist. Sie möchten bloß nicht in einer Situation kommen in dem ich mich befinde, in dem sie von anderen angefeindet werden weil sie sich der Diktat nicht beugen wollen. (Mich kümmert es nicht.) Das ist wie der Zwang bei Jugendlichen die aktuelle Modetrends streng zu befolgen. Wer das nicht tut wird von der Gemeinschaft als "uncooler Typ" ausgestoßen.

Wahrscheinlich war es so, daß irgendwann vor 2-3 Jahrzehnten jemand auf die Idee mit den Functions kam. Er hat das dann in eine Programmiersprache eingebaut und schon weil das SEINE Idee war hat er diese vehement angepriesen wie genial und fortschrittlich das sei. (Ein klein wenig Nützlichkeit in einigen speziellen Fällen kann man dabei tatsächlich finden, aber nicht annähernd soviel wie behauptet wird.) Einige interessierten Personen die gewisses Ansehen und Bekanntheit hatten, haben das übernommen (um bloß nicht irgendetwas wenn auch nur dem Anschein nach hinter ihren kokurrierenden Kollegen zurückzubleiben) und haben dann die Functions als eine super "Weiterentwicklug" propagiert. Die "Studenten" mußten dann das zwangsläufig auch übernehmen, wollten sie nicht ihre Beurteilung bei den Lehrern verschlechtern.

Die Functions bringen für Viele meist gar nichts. Die haben hier und da mal auch ein klein wenig Positives, aber bei weitem nicht so viel, wie das von den Befürwortern der Functions behauptet wird und ein Code ohne Functions ist genauso nicht schlechter als ein Code mit Functions wie das neue Medikament mit den selben Wirkung als das Alte das nicht ist.
Vielleicht "glänzt" der Code mit Functions ein wenig mehr, leistet aber nicht mehr.

* * *

Die Sache mit den mehrere Type-Instanzen. (Ich weiß nicht welcher Ausdruck dafür am Besten wäre, ich habe mich nie mit Lehrbüchern über Programmierung beschäftigt.)

Was ich behaupt ist, das das nicht geht :

a.tTest = New tTest

a.tTest = New tTest

und dann gleichzeitig beide "Instanzen" als aktuell zu haben. Man kann nicht gleichzeitig die Werte von Feldern aus verschiedenden Instanzen des selben Types haben.


* * *

Die Farbe der Functions in IDEs.

Das war für mich kein wichtiges Argument, sondern nur ein Detail, das ich nebenbei erwähnt habe.
Ich habe auch IDEal installiert und gesehen, daß man darin alles eigene Farben zuweisen kann.
Aber nur weil es auch alternative Editoren gibt, heißt es auch nicht, daß der original, offizieller Editor als nicht existent betrachtet werden muß.


* * *

D2006
Zitat:
Wenn es in deinem Interesse liegt, dass die Leute hier einfach deinen Programmierstil akzeptieren und tolerieren und endlich aufhören, dagegen vorzugehen... ja dann solltest du diesen arroganten Unterton mal weglassen.

Dazu ein allgemeiner Aufruf an alle, hier nicht unsachlich und persönlich zu werden. Sonst hol ich die Verwarnungskeule raus.


Es ist für mich bequemer, wenn die Leute hier meinen Programmierstiel akzeptieren, aber das ist für mich nicht wichtig. Ich kann auch gut damit leben wenn sie das nicht tun.

Ich habe aber nicht beabsichtigt arrogant zu sein und ich glaube auch nicht, daß das was ich geschrieben habe arrogant war.

Schau dir aber bitte erstmal an, WER damit anfing und dann fortsetzte den Programmierstiel von jemandem zu schmählern.
Wer Kraftausdrücke wie "Scheiße" gebraucht hat.
Wer den Code des Anderen schon blind als Spaghetti Code verunglimpft hat.
Ich jeden Falls nicht.
Und wenn Einige hier das tun, dann habe ich das Recht darauf zu antworten und sie sollten sich nicht wundern, wenn die Antworten eventuell ein wenig unbequem oder "arrogant" erscheinen.


* * *

Eine Sache, die ich angedeutet habe und eventuell als Grund für falsch verstandene Arroganz dienen könnte wurde offensichtlich nicht verstanden.

Ich wollte erklären, daß ich das Programmieren niemals aus Büchern oder in einer Schule oder von anderen Personen gelernt habe, sondern ich alles selbst ausdenke und mache.
Das ist noch nichts Besonderes. Viele machen das so.
Aber, das gilt bei mir auch für alle Details meiner Projekte und das ist schon selten. Es ist eine Leistung ein Aufbau-Echtzeitstrategiespiel zu programmieren und es ist eine Leistung ein 3D Weltraum Rollenspiel zu programmieren ohne dabei ständig wenn ich auf Schwierigkeiten stoße irgendwo nachzulesen, nachzufragen "wie macht man das normalerweise" ?
Wenn ich an so einem sehr komplexen Projekt arbeite und bei dem ich sehr Vieles was ich mache zum ersten Mal in meinem Leben mache, dann stellen sich ständig immer neue Fragen, wie ich die unzähligen Aufgaben die sich allmählich formulieren, sich stellen lösen will.
Und ich fand und ich finde auf alles einen Lösungsweg und GENAU DAS ist einer der 2 Gründe, warum ich überhaupt programmiere. Es ist ein Rätsellösen und eine große Herausforderung und bietet mir viele kleine und große Erfolgserlebnisse.
(Den 2. Grund habe ich schon früher erwähnt, ich will Bilder aus meiner Fantasie verwirklichen, eine Welt erschaffen.)

Es wäre für mich nicht reizvoll, wenn ich beispielsweise fragen würde, "wie programmiert man 3D-Schüsse". Wenn ich das tun müßte, dann würde ich sofort und für immer aufhören zu programmieren.

Das Programm wäre dann nicht mehr ganz mein geistiger Eigentum, mein Kind.
Es wäre so, als ob ein großer Maler-Künstler nur die zentrale Figur in einem Gemälde selber malen würde, die Nebenfiguren und den Hintergrund von seinen Lehrlingen malen ließe. (Ich weiß, einige Künstler haben sowas tatsächlich getan, aber das spielt keine Rolle.)

Das gilt für mich persönlich. Ich will damit nicht die zahlreichen Anfänger kritisieren, die nicht vorhaben riesige, ehrgeizige Projekte zu realisieren sondern einfach nur möglichst schnell ein kleines Spielchen auf die Beine stellen wollen. Das ist was Anderes.

BladeRunner

Moderator

BeitragMo, Nov 23, 2009 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst also für deine Entfernungssache eine Extra Variable "Entfernung". Diese wird nur dafür angelegt. Wenn Du nun woanders in deinem Code eine andere Entfernung benötigst musst Du dir einen neuen Namen dafür ausdenken. Du musst jederzeit Überblick darüber behalten welche Entfernung für welchen zweck angelegt wurde. Bist du 300 Zeilen weiter mal inkohärent in deinen Bezeichnungen kannst Du kaum reproduzierbare Fehler erzeugen.

Bei einer Funktion ist dein Datenraum gekapselt. Du kannst sie beliebig oft aufrufen ohne ausserhalb der Funktion etwas zu verändern. Kreuzeffekte treten alos nicht auf, nd das ist ein deutlicher Vorteil.
Nebenbei hat niemand behauptet Gosub sei langsamer oder es funktioniere nicht. Es ist unsicherer in der Anwendung, da es dem Anwender wesentlich mehr Eigenstruktur abnötigt.
Und wenn du bei deinen 3d-Programmen ja entitiydistance verwendest benutzt du wieder die Segnungen der Funktionen welche Du ja so sehr verschmähst.

Funktionen sind deshalb etabliert weil sie das Programmieren enorm vereinfacht haben. No more, no less.

Ich klinke mich hiermit hier aus, denn es ist wie ich schon mehrfach erwähnte dein Bier ob Du bei Methoden der 80er Jahre bleiben willst oder nicht.
Nur werde ich keine Fragen mehr beantworten die mit diesem Themenkomplex zu tun haben. Zum einen da der Compiler nicht für diese Verwendung ausgelegt ist, zum anderen weil ich es mir nicht antun werde eine fehlende Datenkapselung zu durchwaten um potentielle Bugs zu finden.
Have Fun.
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

Goodjee

BeitragMo, Nov 23, 2009 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Die Sache mit den mehrere Type-Instanzen. (Ich weiß nicht welcher Ausdruck dafür am Besten wäre, ich habe mich nie mit Lehrbüchern über Programmierung beschäftigt.)

Was ich behaupt ist, das das nicht geht :

a.tTest = New tTest

a.tTest = New tTest

und dann gleichzeitig beide "Instanzen" als aktuell zu haben. Man kann nicht gleichzeitig die Werte von Feldern aus verschiedenden Instanzen des selben Types haben.


was meinst du mit aktuell, und warum initialisierst du a 2 mal
kannst du mal versuchen deinen punkt deutlich zu machen, im moment scheint es so als hättest du types nicht verstanden
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Kruemelator

BeitragMo, Nov 23, 2009 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu deinen Gosub Varianten: Wenn du davon eine Million hast, dann hast du ja eine Million unterschiedlichen Variablen, wenn ich das richtig verstanden habe.
Mach doch einfach ein Array für die Rückgaben.
Code: [AUSKLAPPEN]
Dim rueckgabe(9)

rueck = 2
Gosub Entfernung

Print rueckgabe(rueck)

WaitKey()
End

.Entfernung
   rueckgabe(rueck) = ((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))^0.5
Return

Holzchopf

Meisterpacker

BeitragMo, Nov 23, 2009 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Werter Omenaton,

(man erlaube mir, jetzt wo sich BladeRunner offiziell aus diesem Thema hier verabschiedet hat, dass ich mich dafür neu einmische)
du fragst, wann du arrogant klangst? Nun, ich persönlich finde (ja, das ist meine persönliche Meinung und mir ist bewusst, dass die dich im schlimmsten Fall einfach kalt lässt), dass folgende Aussagen von dir einen sehr arroganten Unterton haben (und das ehrlich gesagt noch das kleinste aller Übel ist):

Omenaton_2 hat Folgendes geschrieben:
Es gibt aber auch Individuen wie zum Beispiel mich, der fähig ist eigenständige Wege zu gehen.
Das zB ist eine ziemlich krasse Beleidigung, weil du - wenn auch indirekt - alle Befürworter der Funktionen in einen Topf wirfst und sie der Unfähigkeit beschuldigst.

Omenaton_2 hat Folgendes geschrieben:
...du bewegst dich gedanklich in all zu engen Grenzen...
Ich weiss ja nicht, wo du diese Ausdrucksweise gelernt hast, aber selbst ich habe in meinem eigentlich noch jungen Leben bereits mitgekriegt, dass man die Worte "Gedanke" "eng" "Grenzen" nicht in einer Diskussion verwendet, wenn man nicht absichtlich sein Gegenüber beleidigen will (auch da wieder, meine persönliche Meinung: Beleidigen ist schlimmer, als arrogant wirken). Grund: Diese Wörter sind alle über Umwege verwandt mit "engstirnig", "beschränkt" und das gute alte "dumm". Wer diese Wörter (deine drei) in einem Satz verwendet, tut dies, wenn denn eine Absicht dahinter steckt, genau deshalb, weil er seinen Kontrahenten als engstirnigen, beschränkten Dummen darstellen will, ohne direkt beleidigende Worte zu sprechen.
Denn wer beleidigend wird, disqualifiziert sich selber - und das will ja wohl niemand. Ich denke, so wie du dich hier ausdrückst, dass du eine gewisse Ahnung vom Reden hast. Aber bedenke bitte, dass man selbst mit den tollsten Worten nicht mehr alles schönreden kann - irgendwann wird's einfach Zeitverschwendung, das solltest du meiner Meinung nach auch wissen.

Omenaton_2 hat Folgendes geschrieben:
Das ist eine idealisierende, blauäugige Verallgemeinerung.
Als ich das las, war ich gespannt, ob eine Begründung folgt. Tatsächlich hast du eine geliefert, aber damit bewegst du dich leider ins Abseits. Zu denken, dass ein Grossteil der Programmierer Funktionen nur deshalb verwenden, um nicht - Zitat - als "uncooler Typ" ausgestoßen zu werden, ist leider mit Objektivität nicht einmal über sieben Zweige verwandt. Wenn man das objektiv beurteilen möchte, würde man Tests durchführen. Dabei spielt aber nicht nur Geschwindigkeit eine Rolle (was je nach Projekt tatsächlich ausschlaggebend sein kann), sondern auch Aspekte wie "Kann ich meinen Code abkapseln [?] so, dass ein Fremder damit arbeiten kann und noch garantiert wird, dass es nirgends zu Konflikten kommt [?]". Denn auch das kann man Messen. Das ist der Grund, wieso sich Functions in der grossen weiten Welt durchgesetzt haben. Mir ist bewusst, dass das nicht das Argument sein kann, das dich auf Funktionen umstimmen könnte. Aber es ist nun mal das Argument, wieso Funktionen nichts schlechtes sind - erst recht nicht so schlecht, wie du sie hier versuchst hinzustellen.


Dann hätte ich noch was anderes:
Omenaton_2 hat Folgendes geschrieben:
a.tTest = New tTest
a.tTest = New tTest

Ich habe keine Ahnung (ja, ich verstehe dich in diesem Punkt wirklich nicht), was du damit bewirken willst.
Wenn man von deinen früheren Posts ausgeht, nehme ich mal an, dass es irgendwas mit der Kopieren-Sache zu tun hat.
Was da nämlich geht:
BlitzBasic: [AUSKLAPPEN]
;================================
; Lösung ohne temporäre Variablen
;================================

; Base sei das "Schablonenobjekt",
; von dem alle anderen kopiert werden
Local Base.TObject = New TObject
Base\Feld1 = 100
Base\Feld2 = 200
Base\Feld3 = 333

; Eine Kopie wird dann einfach dadurch erstellt
Local NPC.TObject = New TObject
NPC\Feld1 = Base\Feld1
NPC\Feld2 = Base\Feld2
NPC\Feld3 = Base\Feld3

; Und noch eine Kopie:
Local NPC.TObject = New TObject
NPC\Feld1 = Base\Feld1
NPC\Feld2 = Base\Feld2
NPC\Feld3 = Base\Feld3

; Der Zauber an der ganzen Sache:
; In BB sind Types immer mit Listen verbunden,
; d.h: Du kannst ganz einfach in Listen-Manier
; durch alle möglichen Instanzen eines Types
; iterieren. Beispiel:
Local itNPC.TObject
For itNPC = Each TObject
; Für den Fall, dass man nur durch die
; Kopien will
If itNPC <> Base
; Tu was auch immer mit
itNPC
EndIf
Next

Wie du siehst, wird zum einfachen Kopieren keine temporäre Variable benötigt. Auch das "überschreiben" von NPC führt nicht dazu, dass die eine Instanz verloren geht, weil sie nämlich immer noch in der integrierten Liste von TObject ist.


Und noch etwas:
Es gibt Programmierer-Probleme, die rekursiv wirklich einfacher zu lösen sind. Nur so ganz am Rande nähme mich jetzt mal wunder, wie man so ein Problem überhaupt löst, wenn man nur mit Subroutinen arbeitet, die sich alle den selben Variablenraum teilen.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Krischan

BeitragMo, Nov 23, 2009 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Bist du 300 Zeilen weiter mal inkohärent in deinen Bezeichnungen kannst Du kaum reproduzierbare Fehler erzeugen.

Wobei wir wieder beim Anfangspost wären, ich zitiere:

Omenaton_2 hat Folgendes geschrieben:
Ich habe seit gestern ein noch nie erlebtes, Riesenproblem mit meinem Code

Du hattest ein Problem gepostet und die Lösung lag sowohl in einer Beschränkung von B3D die unter "üblichen" Umständen (mit Functions) gar nicht aufgefallen wäre als auch an Deinem Programmierstil.

Ein Grund warum man Functions benutzt ist z.B. zum Debuggen ohne den Debugger, ob der Code jetzt dadurch länger oder kürzer wird ist mal wurscht da eh alles compiliert wird. Ich habe früher auch nur mit Gosub programmiert (damals noch in GW-BASIC, da gabs noch keine Functions) bis ich mit QuickBASIC 4.5 das Geheimnis der SUBs entdeckt habe und Blitz3D ist ein Traum dagegen. Ich kann heute kaum noch meine Codes von damals entziffern, die Blitzprojekte von vor ein paar Jahren hingegen schon. Wieso wohl?

Letztlich musst Du selbst wissen, wie Du was programmierst, darfst aber mit Deiner Einstellung in Zukunft nicht auf allzu grosse Hilfe hoffen, wenn Du in die Hand beisst die Dir helfen will, die Moderatoren auf den Plan rufst bzw. immer längere Postings schreibst und vom eigentlichen Thema abschweifst (Philosophie, IT-Geschichte). Functions zu benutzen ist keine Religion oder Weltanschauung, zu der wir Dich bekehren wollen sondern einfach eine Vereinfachung und Strukturierung.

Und Du wirst früher oder später Probleme bekommen, wenn z.B. B3D wirklich nicht mehr weiterentwickelt wird (wonach es aussieht) und Du auf eine "höhere" Sprache wie BlitzMAX umsteigen musst weil die B3D-Programme nicht mehr auf aktuellen Rechnern laufen (oder auf DarkBASIC, *grusel*).

Pummelie

BeitragMo, Nov 23, 2009 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
So, jetz misch ich mich auch mal ein Wink
Wie meine Vorredner schon gesagt haben, wirkst du sehr arrogant, und hälst deine (nun *seufs* nennen wir es mal) Methode für die beste.
Das sie das nicht ist, kann ich dir sagen, da ich es mal genauso gemacht habe.
Funktionen und Types habe ich nicht verwendet, da meine Phantasie nicht ausreichte um mir die Möglichkeiten vor zu stellen.
Wenn man sich heutige Programme von mir Ansieht, ist schnell festzustellen, das sie nur aus einer Hauptschleife bestehen sie Funktionen aufruft.
Beispiel:
BlitzBasic: [AUSKLAPPEN]
AppTitle("Mein Programm")
Global blitzarry[50]
Local Temporär[5]
Dim dims(20,2,1)
Repeat
Cls
Function1
Function2
Function3
Flip
Until KeyDown(1)
End

Function Function1()
Print("blub")
End Function

Function Function2()
Print("bla")
End Function

Function Function3()
Print("nochmal blub")
End Function

user posted image

Ich muss zugeben, das ich types noch immer nicht benutze (oder sehr selten), was nichts daran ändert, das ich sie für nützlich befinde, ich meißt aber einfach zu doof bin sie sinnvoll einzusätzen.


Zitat:
Wenn ich vor ein Problem gestellt werde (und das kommt und kam bei meinen großen Projekten sehr oft vor, weil ich sehr Vieles was ich mache zum aller ersten Mal im Leben mache) dann lese ich nicht irgendwo nach "wie man Dies und Jenes macht" oder frage jemanden danach, sondern entwickele selbständig eine Lösung.

Wenn du die Cumunity(sorry für meine Rechtschreibung) nicht benötigst dann geh...
It's done when it's done.
 

BIG BUG

BeitragMo, Nov 23, 2009 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@Pummelie
Vorsicht beim sinnlosen Hinterhertreten, vor allem wenn Dir entsprechendes Hintergrundwissen und Erfahrung fehlt Evil or Very Mad


Ich denke es wurde alles zum Thema gesagt - die Anklage und Verteidigung haben ihre Schlussplädoyer vorgebracht - Sitzung kann doch geschlossen werden?

Ohh ja, das Urteil:

Ewige Verbannung von Omenation von allen Programmiertätigkeiten weil er keine Funktionen benutzen mag. Wink
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group