Stilfrage: Zuweisungen in if-Klammern



  • net schrieb:

    int f()
    {
       return 1234;
    }
    

    was hat die rückgabe mit *this zu tun?

    In diesem Fall nichts, aber was hat dein Beispiel mit op= zu tun? Ein Zuweisungsoperator, sei es ein Copy oder ein anderer, gibt immer eine Referenz auf sich selbst (=das Objekt) zurück, deshalb sind solche Verkettungen möglich:

    int a = 5, b = 5;
    int c = a = b = 2;
    

    und die dazugehörige Implementierung:

    T& operator=(const T&) { return *this; }
    


  • Shlo schrieb:

    In diesem Fall nichts, aber was hat dein Beispiel mit op= zu tun?

    da haben wir wohl etwas aneinander vorbei geschrieben 😉



  • Bashar schrieb:

    Wenn du die Exception lokal behandeln willst, setzt du die Zuweisung halt allein vor die if-Bedingung und schließt sie in try..catch ein. Das ist aber nicht die Regel, normalerweise behandelt man Exceptions nichtlokal.

    das sag ich doch die ganze zeit:

    hier zb

    3. man testet nur x und zieht den rest aus der if abfrage raus. Ok meine favorisierte lösung,man ist was rückgabewerte/exceptions angeht absolut frei, im idealfall kann man das programm normal weiterführen, also ich finds gut^^

    oder hier

    dagegen ist das schon viel schöner:

    try{
    x=foo(); 
    } 
    catch(bad_alloc& a){ 
        //JUHU ich kann direkt und übersichtlich direkt auf den fehler reagieren 
    } 
    if(x){ 
        //boah ich komm hier sogar in den if block rein, trotz exception 
    } 
    else 
    { 
    }
    

    ansonsten kommts bei mir häufiger vor, dass ich exceptions lokal behandeln muss, und zwar überall dann, wenn ich darauf bestehen muss, dass das programm normal weiterlaufen muss.



  • net schrieb:

    int f()
    {
       return 1234;
    }
    

    was hat die rückgabe mit *this zu tun?

    Was hat jetzt diese Funktion mit dem op= zu tun? Der Ass.Op gibt nun mal quasi immer *this zurück.

    Was gibt das hier wohl zurück:

    Integer i;
    i = 2;
    

    einen int oder einen Integer?

    schwer zu sagen. was ist 'Integer'? eine klasse? ein typedef? ein #define?
    müsste ein einfacher datentyp sein, wegen der zuweisung mit der 2. aber das = könnte auch ein überladener operator sein... keine ahnung

    Wir sprechen hier über Zuweisungsoperatoren. Tja, was wird Integer dann wohl sein?



  • Bashar schrieb:

    Wie kommt ihr eigentlich darauf (ist ja jetzt schon der zweite), dass eine Zuweisung fehlschlagen kann

    ich hatte den ersten Einwand von Helium als Witz verstanden, bzgl. der Leute, die der Syntax nicht ganz mächtig sind 😉

    Ob ich nun a = b; if(a) oder if(a=b) schreibe, hat mit Exceptions doch überhaupt rein gar nichts zu tun. Ob eine Funktion einen Fehlercode zurückgibt oder eine Exception wirft, hängt vom Sinn der Funktion ab. Ist ja kein Java hier, wo selbst ein EOF als Exception ankommt.

    Irgendwie ist das hier in die falsche Richtung gedriftet.



  • Irgendwie ist das hier in die falsche Richtung gedriftet.

    Jo. So richtig witzig find ich, dass sobald man in einem Thread das Wort "Stil" auch nur erwähnt, diese Threads immer in biblischen Ausmaßen expandieren.

    Witzig witztig... 🙂



  • CarstenJ schrieb:

    Jo. So richtig witzig find ich, dass sobald man in einem Thread das Wort "Stil" auch nur erwähnt, diese Threads immer in biblischen Ausmaßen expandieren.

    eigentlich ist das ziemlich gut.



  • hmmm, was mich nur interessiert:
    Wieso kommt ihr alle mit den Exception-Handling an??? 😕
    Ich bin bis jetzt gut gefahren, diese Funktion so zu implementieren, dass sie -1 als Fehlercode zurückgibt, ansonsten eben die Position im vector des gesuchten Ergebnisses. Damit wird aber auf jeden Fall ein gültiger Wert zurückgegeben und die Situtation, dass die Funktion fehlschlug, damit abgefangen.
    Ich finde Exception-Handling an dieser Stelle eigentlich
    a) stilistisch nicht so schön, da sie den Quellcode nur unheimlich aufbläht und dabei doch alles schön mit Fehlercodes gelöst werden kann.
    b) sowieso alles auf einer Ebene liegt und die Verwendungsmöglichkeiten der Except. hier imho abs. Overkill sind.
    Es geht mir nur prinzipiell darum, dass es praktischer ist, im weit oben von mir aufgeführten Fall die Zuweisung direkt in der Abfrage zu schreiben, damit ich da nicht unnötig eine weitere Ebene der if-Abfrage erstellen muß. Folgendes ist imo nicht sehr schön:

    int x=foo(a)
    if(x!=-1)
      //tu dies
    else
    {
    x=foo(b)
    if(x!=-1)
      //tu jenes
    else 
    //Fehlermeldung, nichts gefunden o.ä. 
    }
    

    Stattdessen:

    int x=0;
    if((x=foo(a))!=-1)
     //tu dies
    else if((x=foo(b))!=-1)
     //tu jenes
    else
     //Fehlermeldung
    

    Da ist nix Exceptions o.ä.
    Und ich lese darin:
    Wenn x nach der Zuweisung einen Wert hat, der ungleich -1 ist, tu dies...
    Eigentlich ziemlich eindeutig.
    Okay, es hängt da natürlich von der Definition der foo()-Fkt. ab. Wenn sie so implementiert ist, dass sie undefiniertes Verhalten haben kann, ist diese Art nicht sehr sicher. ...um mal wieder die Kurve zu kratzen 😉



  • DrGreenthumb schrieb:

    Ist ja kein Java hier, wo selbst ein EOF als Exception ankommt.

    So ziemlich alle Javamethoden liefern bei einem EOF eine -1 zurück. 🙄



  • DrGreenthumb schrieb:

    Ist ja kein Java hier, wo selbst ein EOF als Exception ankommt.

    Dieses Gerücht hält sich ja äußerst hartnäckig. Dabei habe ich das selber schon mindestens bei 3 Gelegenheiten gesagt. Vielleicht sollte man erstmal selber mit Java-Streams hantieren, bevor man schlaue Kommentare abgibt.



  • Optimizer schrieb:

    Vielleicht sollte man erstmal selber mit Java-Streams hantieren, bevor man schlaue Kommentare abgibt.

    Nein danke. Aber mir gings auch nicht darum, Java schlecht zu machen und euch Javaianer zu kränken, sondern eben um so ein Extrem-Beispiel und um die Tatsache, dass man doch noch recht oft Funktionen hat, bei denen man eine Fehler-Rückgabe bekommt.

    Fakt ist, in Java wird sehr viel mehr Gebrauch von Exceptions gemacht (was mir übrigens nicht gefällt) und da muss Java nunmal herhalten, wenn es um sowas geht.



  • DrGreenthumb schrieb:

    Fakt ist, in Java wird sehr viel mehr Gebrauch von Exceptions gemacht (was mir übrigens nicht gefällt) und da muss Java nunmal herhalten, wenn es um sowas geht.

    das erweckt den eindruck, als sei java eine mist-sprache. ist sie aber nicht wegen des exception-mißbrauchs. genauso könnte man argumentieren, c++ sei eine mist-sprache weil viele leute schutzverletzungen bauen.



  • Ich frag mich, wieso du eigentlich so auf Java schimpfst?!



  • CarstenJ schrieb:

    Ich frag mich, wieso du eigentlich so auf Java schimpfst?!

    Weil das in nem C++ Forum sehr l337 ist.



  • Wo schimpf ich denn? Genauso wenig, hab ich irgendwelche Java-ist-Mist-Eindrücke gebracht, bzw. bringen wollen. Habe das Java-EOF-Beispiel genommen, weil ich dachte das wäre tatsächlich so.



  • Ich meinte auch Volkard...Die Frage muss eigentlich auch nicht beantwortet werden, sonst wirds hier ja mega OT und das will ja sicher keiner... 😉



  • Doch, es muss klar heraus gearbeitet werden, warum Java "Mist" und C++ "die Sprache der Zukunft" ist. 😃 😉



  • interpreter schrieb:

    Wir sprechen hier über Zuweisungsoperatoren. Tja, was wird Integer dann wohl sein?

    ja, diesen zuweisungsoperator, den ein c++ compiler automatisch für's 'flache kopieren' anlegt ne?
    ist irgendwie an mir vorbeigezogen bei der länge des threads. ich war noch bei dem if (x=foo()) zeugs



  • CarstenJ schrieb:

    Ich frag mich, wieso du eigentlich so auf Java schimpfst?!

    ich hab geschrieben, daß sie keine mist-sprache ist.
    was willst du überhaupt hier?



  • CarstenJ schrieb:

    Ich meinte auch Volkard...Die Frage muss eigentlich auch nicht beantwortet werden, sonst wirds hier ja mega OT und das will ja sicher keiner... 😉

    angriffe machen und sich im namen aller wünschen, daß der angegriffene sich nicht wehrt. was bist denn du für einer?


Anmelden zum Antworten