Stilfrage: Zuweisungen in if-Klammern



  • 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?



  • otze schrieb:

    erstmal zu den exceptions: ich bin dagegen, bei jedem funktionsfehlschlag den programmfluss mittels exception zu unterbrechen, stellt euch mal vor,in der std::map würde find ne exception werfen, wenn das element nicht gefunden wurde,anstatt dem üblichen end-iterator. was ich damit sagen will:

    std::map<int,int> a;
    try{
        (*a.find(5))=6;
    }
    catch(std::end& b){//ein typ der die exception auswerfende map liefern kann
        b->map.insert(5,6);
    }
    

    wer sowas gut findet hat echt ein medizinisches problem 😮 .

    Ganz oft will ich aber genau sowas. Ich bin es satt immer:

    map<int,int>a;
    map<int,int>::iterator pos=a.find(4);
    if(pos==a.end())
      throw runtime_error("Couldn't find a value for ...");
    pos->second=6;
    

    Anstatt einfach:

    map<int,int>a;
    a.find(4)->second=6;
    

    (Wobei ich auch nicht dagegen hätte wenn ich das ->second weglassen könnte)

    otze schrieb:

    ps: und wenn ihr jetzt mit exception in der zuweisung kommt: JUHU der perfekte schlangencode

    try{
        if(!(x = foo()){
       
    
        //Setzt hier 40 zeilen code ein
    
        }
        else
        {
       
    
        //hier nochmal 20
        }
    catch(bad_alloc& a){
        //usw
    }
    

    Jetzt mal ganz davon abgesehen, dass eine Funktion mit mehr den 60 Zeilen eh schlechter Stil ist hat niemand gesagt, dass du pro Funktion nur einen try Block haben darfst, und bad_alloc zu fangen ist eh Schwachsinn da du entweder keinen Speicher mehr hast oder ein Memoryleak. Beides kannst du nicht lokal (wenn überhaupt) lösen. Also soll es in der Debug version aus der main Funktion raus fliegen und in der Release version in der main Funktion gefangen werden in cerr geschrieben werden und anschließend mit return 1 das Program abgebrochen werden. Bei deinem Beispiel fällt dann der gesamte try Block weg und ob ich nun:

    throw runtime_error("blabla");
    

    oder

    return -1;
    

    schreibe bläht mein Code ja so enorm auf...

    Und

    if(int i=foo()){
      //...
      return i;
    }
    return -1;
    

    ist

    int i=foo();
    //...
    return i;
    

    ja Meilen weit überlegen.

    net schrieb:

    die zuweisung schlägt fehl. ohne 'throw' wär das nicht passiert (es sei denn, die funktion stürzt ab)

    Falsch die Zuweisung findet erst gar nicht statt und somit bleibt x bei einem Fehlschlag von foo intakt wogegen es bei einem Fehlerrückgabe von foo in einen Zombiestatus versetzt wird und man darauf expilicit testen muss wo einem sehr dumme Fehler unterlaufen können.

    DrGreenthumb schrieb:

    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.

    Ich kann kein Java und eigentlich ist es Schade, dass so wenige Funktionen Exceptions nutzen.

    PS:langsam sind Exceptions nur wenn sie viele Destruktoren aufrufen müssen (was auch bei der Rückgabe eines Fehlerwertes der Fall ist), wenn dies nicht der Fall ist dann sind sie nicht wirklich langam.



  • Wenn du in einer Collection was suchst, kann das durchaus ein normaler Vorgang sein, dass es nicht enthalten ist.
    In dem Fall eine Exception zu werfen ist also Unsinn. Exceptions sind für Situationen gedacht, die im planmäßigen Programmablauf nicht vorkommen sollten.



  • volkard schrieb:

    was willst du überhaupt hier?

    Äh..wie was will ich hier?



  • CarstenJ schrieb:

    volkard schrieb:

    was willst du überhaupt hier?

    Äh..wie was will ich hier?

    frage nicht beantwortbar, weil sie irgendwie quatsch ist? ja, das problem hatte ich bei deiner auch. ignoriere die frage einfach. ich weiß, was du hier willst.



  • volkard schrieb:

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

    Auch, wenn schon präventiv der "Offtopic-Gang" verteufelt wurde, möchte ich dazu noch was schreiben, denn deine Kommasetzung ließ keinen so eindeutigen "Java ist kein Mist"-Schluß zu:

    volkard schrieb:

    ist sie**,** aber nicht wegen des exception-mißbrauchs.

    oder

    volkard schrieb:

    ist sie aber nicht**,** wegen des exception-mißbrauchs.

    Also, ich fand das auch mißverständlich. 😉



  • Naja...in der Bibel interpretiert man die Erzaehlungen auch grad so wie man es
    braucht...

    So genau muss man jetzt die Saetze auch wieder nicht auseinanderfriemeln. Sonst
    kann man wahrscheinlich fast jede Argumentation hier aushebeln (nein, ich habe
    und werde mir nicht die Muehe machen, dass zu pruefen).

    mfg
    v R



  • Cocaine schrieb:

    denn deine Kommasetzung ließ keinen so eindeutigen "Java ist kein Mist"-Schluß zu:

    volkard schrieb:

    ist sie**,** aber nicht wegen des exception-mißbrauchs.

    oder

    volkard schrieb:

    ist sie aber nicht**,** wegen des exception-mißbrauchs.

    Also, ich fand das auch mißverständlich. 😉

    meine version (ohne komma) ist aber die richtige version.
    ich wollte nicht schreiben "java ist mistig. java ist nicht wegen des em mistig."
    ich wollte nicht schreiben "java ist nicht mistig. java ist wegen des em nicht mistig."
    ich wollte schreiben "java ist nicht wegen des em mistig".
    das sollte keinen schluß darüber lassen, ob java mistig ist. wegen anderer sachen könnte java durchaus mistig sein, aber nicht wegen des em.

    allerdings muß ich zugeben, daß ich den satz ein wenig konstruiert habe, um ihn so schön mißverständlich hinzukriegen. manchmal kann ich mich einfach nicht zurückhalten.



  • @vR: Nein, ich halte mich auch nicht an Rechtschreibfehlern auf. Aber wenn es zur Folge hat, daß man das Gegenteil des eigentlich Gemeinten in einem Satz verstehen kann, wird man das doch erwähnen dürfen.

    volkard schrieb:

    allerdings muß ich zugeben, daß ich den satz ein wenig konstruiert habe, um ihn so schön mißverständlich hinzukriegen. manchmal kann ich mich einfach nicht zurückhalten.

    😃


Anmelden zum Antworten