Goto variable
-
Dervin schrieb:
Ich versteh nicht ganz was die Nachteile sind an Goto's.. Ist es wegen der
Unübersichtlichkeit?Nehmen wir einmal an du hast ein Programm mit 100'000 Zeilen. Dabei kann von jedem Punkt an jeden anderen Punkt gesprungen werden. Denkst du du kannst dabei noch die Uebersicht behalten?

(Ist vielleicht etwas uebertrieben formuliert. Aber es zeigt das Prinzip).
-
cooky451 schrieb:
Dervin schrieb:
Ist es wegen der
Unübersichtlichkeit?Ja.
Wenn ich aber Funktionen machen würde, müsste ich alle Parameter in diese
herübernehmen. Bei goto's muss man das ja nicht machen.. (soweit ich weis) ^^
-
Dervin schrieb:
Wenn ich aber Funktionen machen würde, müsste ich alle Parameter in diese
herübernehmen. Bei goto's muss man das ja nicht machen.. (soweit ich weis) ^^Was gibt es denn für Objekte in deinem Spiel? (Also nicht was du programmiert hast, sondern in der "echten" Spielwelt.)
Spieler? Räume? ..
-
icarus2 schrieb:
Dervin schrieb:
Ich versteh nicht ganz was die Nachteile sind an Goto's.. Ist es wegen der
Unübersichtlichkeit?Nehmen wir einmal an du hast ein Programm mit 100'000 Zeilen. Dabei kann von jedem Punkt an jeden anderen Punkt gesprungen werden. Denkst du du kannst dabei noch die Uebersicht behalten?

(Ist vielleicht etwas uebertrieben formuliert. Aber es zeigt das Prinzip).
*Spaghetticode*
-
Dervin schrieb:
cooky451 schrieb:
Dervin schrieb:
Ist es wegen der
Unübersichtlichkeit?Ja.
Wenn ich aber Funktionen machen würde, müsste ich alle Parameter in diese
herübernehmen. Bei goto's muss man das ja nicht machen.. (soweit ich weis) ^^Mich wuerde es echt interessieren wie dein Code aussieht.
Ich denke du solltest dir ein gutes C++ Buch kaufen und dieses durcharbeiten.
-
cooky451 schrieb:
Dervin schrieb:
Wenn ich aber Funktionen machen würde, müsste ich alle Parameter in diese
herübernehmen. Bei goto's muss man das ja nicht machen.. (soweit ich weis) ^^Was gibt es denn für Objekte in deinem Spiel? (Also nicht was du programmiert hast, sondern in der "echten" Spielwelt.)
Spieler? Räume? ..Zbs. Attribute vom Spieler (leben,mana usw..)
edit: es ist ein textbasierender Game

-
icarus2 schrieb:
Dervin schrieb:
cooky451 schrieb:
Dervin schrieb:
Ist es wegen der
Unübersichtlichkeit?Ja.
Wenn ich aber Funktionen machen würde, müsste ich alle Parameter in diese
herübernehmen. Bei goto's muss man das ja nicht machen.. (soweit ich weis) ^^Mich wuerde es echt interessieren wie dein Code aussieht.
Ich denke du solltest dir ein gutes C++ Buch kaufen und dieses durcharbeiten.
Werd ich. Kannst du mir eines empfehlen? Ich habe alle diese Informationen meines Programmes vom Internet.
-
Dervin schrieb:
Zbs. Attribute vom Spieler (leben,mana usw..)
Das sind ja schon ein paar Eigenschaften. Wenn du diese kapselst, hast du auch gleich weniger Parameter:
class character { float life_, mana_; public: // ... }; class room { // ... };Gerade Spiele eignen sich normalerweise wunderbar für Objektorientierung, weil man halt auch wirklich mit Objekten hantiert. Probiers mal. Sobald du mehr als 15 Räume hast, oder du diese aus Dateien lesen / zufällig generieren willst, wird das mit goto sicher keinen Spaß mehr machen.

-
Kannst du mir das genauer erläutern? Ich programmiere noch nicht sehr lange mit C++ und hab zwar mal was von Klassen gehört aber weis ned genau wie das geht

wie gesagt ich kauf mir mal ein Buch..
-
Na ja, das "genauer erläutern" würde ziemlich viel Text einnehmen. Wie gesagt, lern erst mal ein paar mehr Sprachmittel und dann versuchs noch mal. Du kannst natürlich auch mit goto arbeiten, aber ich prophezeie dir einfach mal, dass du da glorreich untergehen wirst.

-
Das goto setzt zur Compilezeit einen festen Identifizierer voraus, dieser kann auch z.B. exit: oder IchSteigeAus: heissen. Zur Laufzeit festgelegte Sprünge: was soll das bringen?
Dafür gibt es sicher bessere Möglichkeiten! Gelegentlich kann ein goto noch Sinn machen, aber nur in wenigen besonderen Fällen.
-
berniebutt schrieb:
Gelegentlich kann ein goto noch Sinn machen, aber nur in wenigen besonderen Fällen.
Sag mir einen. (Nicht aus C)
-
cooky451 schrieb:
berniebutt schrieb:
Gelegentlich kann ein goto noch Sinn machen, aber nur in wenigen besonderen Fällen.
Sag mir einen. (Nicht aus C)
while( ... ) { while( ... ) { if( ... ) goto end; } } end:Wenn man nach end nichts mehr tun muss, kann man das natürlich auch in eine Funktion packen und einfach returnen statt springen.
-
ok ich hab jetzt mal ein bischen mit den classes hermuexperimentiert.. und ja die Übersichtlichkeit ist 100 mal besser.

-
Dervin schrieb:
ok ich hab jetzt mal ein bischen mit den classes hermuexperimentiert.. und ja die Übersichtlichkeit ist 100 mal besser.

Du kannst
gotonicht durch Klassen ersetzen. Eher durch Kontrollstrukturen wie Funktionen, Schleifen, If-Abfragen.
-
Nexus schrieb:
Dervin schrieb:
ok ich hab jetzt mal ein bischen mit den classes hermuexperimentiert.. und ja die Übersichtlichkeit ist 100 mal besser.

Du kannst
gotonicht durch Klassen ersetzen. Eher durch Kontrollstrukturen wie Funktionen, Schleifen, If-Abfragen.jo aber ich kann die gotos mit den Funktionen in den Klassen ersetzten. Die
Klassen sind für die Übersicht^^
-
GorbGorb schrieb:
Wenn man nach end nichts mehr tun muss, kann man das natürlich auch in eine Funktion packen und einfach returnen statt springen.
Selbst wenn man noch etwas machen muss ist die Variante mit return imho wesentlich besser (ganz davon abgesehen das ich nur selten tiefe Verschachtelungen habe, da ich versuche den Code im Zweifel so umzustellen das keine Entstehen.
Beispiel:
// ...statt... void foo() { if(bedingung1) { //... if(bedingung2) { //... } } } // ...verwende ich lieber... void foo() { // Statt if(!bedingung1) return; // ... if(!bedingung2) return; //... }Nicht selten kann man ähnliches bei Schleifen mit continue erreichen.
-
Dervin schrieb:
Ich habe eine Frage zu dem Goto befehl.
Ist es möglich, dass man das Label durch zbs. einen String ersetzt?Ist zwar schon länger her, aber, falls es dich noch interessiert, mit gcc kann man Zeiger auf Sprungmarken setzen und diese mit
gotoanspringen. Damit hat man zwei tolle Features in einem vereint:gotound Zeiger!
Schau meine Beiträge hier http://www.c-plusplus.net/forum/275649-full an, wenn man darauf Wert legt, kann man mit diesem Feature aufswitch,ifundforverzichten. Ich propagiere es seit Jahren hier im Forum - aber die Welle der Begeisterung bleibt immer noch aus
