Eine Frage am Rande ("Goto"?)



  • volkard schrieb:

    GPC schrieb:

    Ähem, wenn du auf break verzichtest, bin ich gespannt,

    durchs bessere return.

    Aber dann gefährde ich u.U. Single Entry Single Exit...

    wie du ne switch Anweisung schreibst, oder ist die jetzt auch schon böse?

    in der tat, switch rutsch ab zu den bösen buben. die hauptaufgaben *waren*

    je nach eingabe was machen
    ersetzt durch nachgucktabellen mit funktionsobjekten (oft mit dem geschenk, daß die tabellen benutzerkonfigurierbar sind)

    kann man ja auch std::maps nehmen.

    je nach extem typ was machen
    ersetzt durch virtuelle funktionen

    Stimmt, aber manchmal ist die Welt nicht nur reines OOP und switch kann praktisch sein.

    Fred123 schrieb:

    Jeder Programmierer, der etwas auf sich hält, benutzt die Befehle 'break', 'continue' und vor allem 'goto' nicht, aus Lesbarkeits- und Performacegründen. Sie lassen sich allesamt durch Verwendung von Schleifen, if-Anweisungen usw. vermeiden.

    Mal so ne Frage: Wie lange programmierst du schon in c++? Für jede switch-anweisung brauchst du den Befehl break, außer du willst es mit tausenden umwegen machen.. Und jedes Programm hat menüs zum auswählen, diese menüs bestehen meistens aus einer switch-anweisung.. also, wenn ich ein großes Programm schreibe benutze ich ziehmlich oft den break-Befehl..

    Mal so ne Frage: Hast du schon mal mit einer aktuellen GUI - Lib gearbeitet? Gtkmm z.B. benutzt Funktoren, um Widgets eine Methode zuzuweisen. Kein switch. Auch QT benutzt kein switch. Zeig mir eine Lib, die (a) gut designt ist und (b) sowas blödes wie switch zur Menüauswahl voraussetzt.

    MfG

    GPC



  • GPC schrieb:

    volkard schrieb:

    GPC schrieb:

    Ähem, wenn du auf break verzichtest, bin ich gespannt,

    durchs bessere return.

    Aber dann gefährde ich u.U. Single Entry Single Exit...

    Single Entry haben wir doch eh. und Single Exit ist ja auch inzwischen kompletter müll. wir haben destruktoren und diese regel ist kaputt. wir haben konstrukte wiederentdeckt, die ohne single exit viel einfacher sind und schneller und besser aussehen und die regel ist doppelt kaputt.
    das deutete ich schon um 13:13 an mit "für break sehe ich eher nachteile, es verleitet einen zur strukturierten programmierung." und meine damit die veralteten teile dieser religion, die von dogmatikern weitergefahren und sogar noch verbreitet werden.

    GPC schrieb:

    aber manchmal ist die Welt nicht nur reines OOP und switch kann praktisch sein.

    deswegen ist switch auch nicht so böse wie goto. aber 98% der switch-sichtungen sind folge schlechten designs. du fragst dich, wo gut designte gui-libs switch nehmen und ich frage mich überhaupt, wo gut designte software switch nimmt (außer, man benutzt schlechte libs, die einen zwingen).



  • Single Entry Single Exit...

    das war zu Pascal Zeiten wichtig... oder zumindest üblich.



  • volkard schrieb:

    hab nur zwei gefunden, die in code stecken, den man nachvollziehen kann.
    http://www.volkard.de/siff/goto.rar

    wobei zu bemerken ist, daß der folgende durchaus goto verwendet, um lesbaren code bei großer performance zu erhalten.

    //http://www.geocities.com/acmesofties/wpcq110.htm
    /*
    the following code is the macro expansion of
    
    #define compare(i,j)\
    	if(a[i][0]!=a[j][0] | a[i][1]!=a[j][1]) goto label##i##j;\
    	if(a[i][2]!=a[j][2] | a[i][3]!=a[j][3] | a[i][4]!=a[j][4]) goto label##i##j;\
    	return true;\
    label##i##j:\
    
    int wpc107(int a[5][5])
    {
    	compare(0,1)
    	compare(0,1)
    	compare(0,3)
    	compare(0,4)
    	compare(1,2)
    	compare(1,3)
    	compare(1,4)
    	compare(2,3)
    	compare(2,4)
    	compare(3,4)
    	return false;
    }
    
    //sometimes i used | instead of || or if to expensive jmps.
    */
    
    int wpc107(int a[5][5])
    {
    	if(a[0][0]!=a[1][0] | a[0][1]!=a[1][1]) goto label01;
    	if(a[0][2]!=a[1][2] | a[0][3]!=a[1][3] | a[0][4]!=a[1][4]) goto label01;
    	return true;
    label01:
    	if(a[0][0]!=a[2][0] | a[0][1]!=a[2][1]) goto label02;
    	if(a[0][2]!=a[2][2] | a[0][3]!=a[2][3] | a[0][4]!=a[2][4]) goto label02;
    	return true;
    label02:
    	if(a[0][0]!=a[3][0] | a[0][1]!=a[3][1]) goto label03;
    	if(a[0][2]!=a[3][2] | a[0][3]!=a[3][3] | a[0][4]!=a[3][4]) goto label03;
    	return true;
    label03:
    	if(a[0][0]!=a[4][0] | a[0][1]!=a[4][1]) goto label04;
    	if(a[0][2]!=a[4][2] | a[0][3]!=a[4][3] | a[0][4]!=a[4][4]) goto label04;
    	return true;
    label04:
    	if(a[1][0]!=a[2][0] | a[1][1]!=a[2][1]) goto label12;
    	if(a[1][2]!=a[2][2] | a[1][3]!=a[2][3] | a[1][4]!=a[2][4]) goto label12;
    	return true;
    label12:
    	if(a[1][0]!=a[3][0] | a[1][1]!=a[3][1]) goto label13;
    	if(a[1][2]!=a[3][2] | a[1][3]!=a[3][3] | a[1][4]!=a[3][4]) goto label13;
    	return true;
    label13:
    	if(a[1][0]!=a[4][0] | a[1][1]!=a[4][1]) goto label14;
    	if(a[1][2]!=a[4][2] | a[1][3]!=a[4][3] | a[1][4]!=a[4][4]) goto label14;
    	return true;
    label14:
    	if(a[2][0]!=a[3][0] | a[2][1]!=a[3][1]) goto label23;
    	if(a[2][2]!=a[3][2] | a[2][3]!=a[3][3] | a[2][4]!=a[3][4]) goto label23;
    	return true;
    label23:
    	if(a[2][0]!=a[4][0] | a[2][1]!=a[4][1]) goto label24;
    	if(a[2][2]!=a[4][2] | a[2][3]!=a[4][3] | a[2][4]!=a[4][4]) goto label24;
    	return true;
    label24:
    	if(a[3][0]!=a[4][0] | a[3][1]!=a[4][1]) goto label34;
    	if(a[3][2]!=a[4][2] | a[3][3]!=a[4][3] | a[3][4]!=a[4][4]) goto label34;
    	return true;
    label34:
    	return false;
    }
    

    Ne, hätte ich auch nicht lesbarer hin bekommen. Schon so aussagekräftige Namen wie a und label##. 👍



  • volkard schrieb:

    GPC schrieb:

    volkard schrieb:

    GPC schrieb:

    Ähem, wenn du auf break verzichtest, bin ich gespannt,

    durchs bessere return.

    Aber dann gefährde ich u.U. Single Entry Single Exit...

    Single Entry haben wir doch eh. und Single Exit ist ja auch inzwischen kompletter müll. wir haben destruktoren und diese regel ist kaputt. wir haben konstrukte wiederentdeckt, die ohne single exit viel einfacher sind und schneller und besser aussehen und die regel ist doppelt kaputt.

    Also gut, nieder mit SESE. Ich habe es eh nie befolgt, weil ich lieber da raus bin, wo's sinnvoll war 😉

    das deutete ich schon um 13:13 an mit "für break sehe ich eher nachteile, es verleitet einen zur strukturierten programmierung." und meine damit die veralteten teile dieser religion, die von dogmatikern weitergefahren und sogar noch verbreitet werden.

    Hättest du nicht mal Lust, einen Styleguide zu schreiben? In die Richtung "Volkards coding standards" oder so?

    MfG

    GPC



  • GPC schrieb:

    Hättest du nicht mal Lust, einen Styleguide zu schreiben? In die Richtung "Volkards coding standards" oder so?

    hab damit sogar schonmal angefangen. http://volkard.de/siff/StyleGuide.doc.rar (oh, in wenigen monaten hat die datei ihren 10. geburtstag).
    aber der wurde so nichts. ich finde, daß stil-regeln auf jeden fall gut begründet sein müssen. sonst passieren doch nur sachen wie

    Ich habe es eh nie befolgt, weil ich lieber da raus bin, wo's sinnvoll war

    damit mutierte der styleguide aber zu nem abklatsch von "effektiv c++ programmieren". und später zum c++-kurs.



  • volkard schrieb:

    hab damit sogar schonmal angefangen. http://volkard.de/siff/StyleGuide.doc.rar (oh, in wenigen monaten hat die datei ihren 10. geburtstag).

    Oha, 1996, das ist ja fast Steinzeit. Ich sehe noch viel switch 😉

    aber der wurde so nichts. ich finde, daß stil-regeln auf jeden fall gut begründet sein müssen.

    Klar, sonst hält sich keiner dran, weil niemand sieht, wozu das gut sein soll.

    sonst passieren doch nur sachen wie

    Ich habe es eh nie befolgt, weil ich lieber da raus bin, wo's sinnvoll war

    ja, aber mir hat bisher noch niemand gesagt dass SESE schlecht ist. Auch Meyers und Sutter haben darüber nichts geschrieben. Und dabei gehöre ich nicht zu den Anfängern.

    damit mutierte der styleguide aber zu nem abklatsch von "effektiv c++ programmieren". und später zum c++-kurs.

    Ok, es gibt aber, wie man sieht, auch Dinge, die Meyers nicht behandelt hat. Nicht jeder kauft sich gleich die Meyers Bücher.
    Wenn aber DU was vorbringst, hören viele zu. Imho. Ich gehe fest davon aus, dass ein Style Guide von dir richtig gut kommen würde.

    MfG

    GPC


Anmelden zum Antworten