Swift

  • Amin Negm-Awad schrieb:

    Da steht aber keiner.

    Achso. Dann gebe ich das mal so weiter.

    Amin Negm-Awad schrieb:


    Ach, das ist ja so toll mit dem Operatoroverlaoding. Keiner braucht es, aber es erzeugt einen Haufen inkonsistenter Scheiße.

    Ich find es relativ angenehm, für Matrix/Vektor-Operationen, insbesondere wenn der Code dann relativ übertragbar zu Shader/CL/CUDA ist, wo es native Matrix/ Vektortypen gibt. "p = (T1+T2)*S*R*v" is für mich übersichtlicher als das entsprechendes in Obj-C was ich mir dort vorstellen kann. Ist aber vielleicht auch eine Frage des Geschmacks und der Gewohnheit.

    Natürlich macht es keinen Sinn, an jeder Stelle Operatoren zu überlagern. Eigentlich nur an relativ wenigen. Finde ich aber kein Grund, das ganze zu verteufeln.
    C++
  • kmr schrieb:

    Amin Negm-Awad schrieb:


    @kmr Nicht relevant? Machen wir eine Wette, wann es das erste mal auftaucht?


    Ich kann ja nur für die Apps sprechen, deren Sourcecode ich in die Finger kriege. Und da sind die von Euch erwähnten Probleme wirklich nur rein akademischer Natur. Wer Base64 für eine Verschlüsselung hält, wer AES verwendet, aber das Passwort als String im Binary kodiert, wer die Keychain verwendet, dass Passwort aber nicht ins Feld kSecValue, sondern in das Feld für den Service-Label schreibt, und wer mit Singletons hantiert, weil er das von Java nun mal so kennt, für den macht es keinen Unterschied, ob er Swift oder Objc in den Fingern hat. Furchtbar ist das Ergebnis allemale. ^^
    Na, ja, du kannst ja bisher nur recht wenig Apps gesehen haben, die + aus Strangs anwenden.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • zerm schrieb:

    Amin Negm-Awad schrieb:

    Da steht aber keiner.

    Achso. Dann gebe ich das mal so weiter.

    Amin Negm-Awad schrieb:


    Ach, das ist ja so toll mit dem Operatoroverlaoding. Keiner braucht es, aber es erzeugt einen Haufen inkonsistenter Scheiße.

    Ich find es relativ angenehm, für Matrix/Vektor-Operationen, insbesondere wenn der Code dann relativ übertragbar zu Shader/CL/CUDA ist, wo es native Matrix/ Vektortypen gibt. "p = (T1+T2)*S*R*v" is für mich übersichtlicher als das entsprechendes in Obj-C was ich mir dort vorstellen kann. Ist aber vielleicht auch eine Frage des Geschmacks und der Gewohnheit.

    Natürlich macht es keinen Sinn, an jeder Stelle Operatoren zu überlagern. Eigentlich nur an relativ wenigen. Finde ich aber kein Grund, das ganze zu verteufeln.
    Genau, bei numerischen Typen ist es recht sinnvoll, auch wegen der Gewöhnung zur Mathematik.

    Jetzt müsste man das auf solche Typen einschränken, was dann wieder ein Sprachmittel verlangt oder lebt mit dem Blödsinn. Erstaunlicherweise gibt es sogar im Handbuch ein Beispiel für Strings mit +. Dabei ist doch gerade in C++ bekannt, dass man das nicht macht, oder?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Nein, das erinnert an gequirlte Scheiße.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    Genau, bei numerischen Typen ist es recht sinnvoll, auch wegen der Gewöhnung zur Mathematik.

    Jetzt müsste man das auf solche Typen einschränken, was dann wieder ein Sprachmittel verlangt oder lebt mit dem Blödsinn. Erstaunlicherweise gibt es sogar im Handbuch ein Beispiel für Strings mit +. Dabei ist doch gerade in C++ bekannt, dass man das nicht macht, oder?

    Ehrlichgesagt ist es mit in der Praxis so ziemlich nie untergekommen, dass jemand unsinnige Operatorüberladung verwendet hätte.

    Strings mit + ist bequem. Alle andere Operatoren auf Strings weniger, insbesondere "-" (bzgl. deines Post dazu denk ich mit auch "wtf")
    C++
  • macmoonshine schrieb:

    Findest Du >> und << für die Ein- und Ausgabe sowie && für die Archivierung sinnvoll überladene Operatoren?

    Was << und >> betrifft, tatsächlich, ja. Bitshifts sind praktisch so selten, aber "streaming" so häufig, dass es hier nicht nur bequem, sondern auch so ziemlich immer eindeutig ist. In der Regel denkt man erst an "streaming" und nur an Bitshifts, wenn es auch tatsächlich welche sind. && für die Archivierung? Boost.Serialization? Nett gemeint, wie einige der anderen, weniger benutzten Boost-Komponenten. Ich kenne niemand, der das nutzt. Ist aber ein einfaches &, von daher noch grenzwertig-logisch und sollte auch nie zu Verwechselungen führen - wiegesagt, Bitoperationen sind so selten.
    C++
  • zerm schrieb:

    Ich kenne niemand, der das nutzt. Ist aber ein einfaches &, von daher noch grenzwertig-logisch und sollte auch nie zu Verwechselungen führen - wiegesagt, Bitoperationen sind so selten.

    Du sprachst oben von unsinnig überladenen Operatoren und da zähle ich den &-Operator in der weitverbreiteten Bibliothek Boost dazu, insbesondere wo er meines Wissens zum Ein- und Auspacken dient. Ich finde auch die dahinter stehende Semantik (und das noch in das Archiv dazu) ist schon fast das Gegenteil vom logischen Und.

    Es geht ja hier um die Sinnhaftigkeit und nicht die Anwendungshäufigkeit der Operatoren. Die Bedeutung als Bitoperatoren ist nun mal wesentlich älter und verbreiteter. In den meisten Fällen verschleiern überladene Operatoren den Sinn des Codes und erschweren die Lesbarkeit. Klartext wie z. B. print oder write ist wesentlich aussagekräftiger. Der Computer versteht den Sourcecode ja sowieso, nur der dumme Mensch hat damit schnell seine Probleme. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Es geht ja hier um die Sinnhaftigkeit und nicht die Anwendungshäufigkeit der Operatoren. Die Bedeutung als Bitoperatoren ist nun mal wesentlich älter und verbreiteter. In den meisten Fällen verschleiern überladene Operatoren den Sinn des Codes und erschweren die Lesbarkeit. Klartext wie z. B. print oder write ist wesentlich aussagekräftiger. Der Computer versteht den Sourcecode ja sowieso, nur der dumme Mensch hat damit schnell seine Probleme.

    << und >> erschweren mir nicht das Lesen, im Gegenteil. Und Boost ist weitverbreitet, aber wiegesagt, Boost.Serialize wird meiner Erfahrung nach sehr selten tatsächlich genutzt. Ich hatte in meinem ganzen Leben noch keine praktischen Probleme mit überladenen Operatoren in C++, nichtmal dass die Lesbarkeit gelitten hätte. Die Argumentation wirkt immer auf mich ein wenig so, wie wenn ich behaupten würde, die vielen [ und ] in Obj-C schaden der Lesbarkeit - weil es mir, wo ich wenig bis gar kein Obj-C mehr mache, einfach schwerer fällt.
    C++