macmoonshine schrieb:
Das kommt mir alles so bekannt vor. Ja, va s war das nur für eine Programmiersprache, die auch keine Pointer hatte.
Optionals, Optionals - wieso eigentlich
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
-
-
Markus Müller schrieb:
gritsch schrieb:
Markus Müller schrieb:
gritsch schrieb:
Markus Müller schrieb:
Mit dem optionals-Konstrukt lässt sich ein Konzept explizit ausdrücken. Ein optionaler Wert kann einen Wert enthalten oder eben auch nicht. Wenn man es nicht nur als syntaktischen Zucker für obj-c Zeiger versteht, bietet dieser Sprachmechanismus wesentlich ausdrucksvolleren Code. Es funktioniert ja auch mit integers etc. Und es nicht möglich, wie in objc versehentlich eine nil-Referenz herumzureichen, ohne dass es der Compiler bemerkt.
normal verwendet man es doch nur zum sortieren. und dort gibt es ja zwei objekte sonst müsste man nicht sortieren!
viel schlimmer sind solche ketten in swift: irgendwas!.nochwas!.irgendwasanderes
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es. -
macmoonshine schrieb:
Markus Müller schrieb:
Du darfst kein nil reinreichen, aber Du kannst es trotzdem machen. In swift kompiliert solcher Code nicht).
nil
kommt ja nicht einfach so in diecompare:
-Methode. Der Fehler liegt dann wahrscheinlich schon vorher. Und dann bricht der Swift-Code da, und das wahrscheinlich eben auch zur Lauf- und nicht zur Übersetzungszeit.
-
gritsch schrieb:
Markus Müller schrieb:
gritsch schrieb:
Markus Müller schrieb:
gritsch schrieb:
Markus Müller schrieb:
Mit dem optionals-Konstrukt lässt sich ein Konzept explizit ausdrücken. Ein optionaler Wert kann einen Wert enthalten oder eben auch nicht. Wenn man es nicht nur als syntaktischen Zucker für obj-c Zeiger versteht, bietet dieser Sprachmechanismus wesentlich ausdrucksvolleren Code. Es funktioniert ja auch mit integers etc. Und es nicht möglich, wie in objc versehentlich eine nil-Referenz herumzureichen, ohne dass es der Compiler bemerkt.
viel schlimmer sind solche ketten in swift: irgendwas!.nochwas!.irgendwasanderes
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es.
-
tsunamix schrieb:
Das verstehe ich nicht. Was meinst Du damit?
nil
sein dürfen.„Meine Komplikation hatte eine Komplikation.“ -
Markus Müller schrieb:
gritsch schrieb:
Markus Müller schrieb:
gritsch schrieb:
Markus Müller schrieb:
gritsch schrieb:
Markus Müller schrieb:
Mit dem optionals-Konstrukt lässt sich ein Konzept explizit ausdrücken. Ein optionaler Wert kann einen Wert enthalten oder eben auch nicht. Wenn man es nicht nur als syntaktischen Zucker für obj-c Zeiger versteht, bietet dieser Sprachmechanismus wesentlich ausdrucksvolleren Code. Es funktioniert ja auch mit integers etc. Und es nicht möglich, wie in objc versehentlich eine nil-Referenz herumzureichen, ohne dass es der Compiler bemerkt.
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es.
-
Michael schrieb:
macmoonshine schrieb:
Das kommt mir alles so bekannt vor. Ja, va s war das nur für eine Programmiersprache, die auch keine Pointer hatte.
„Meine Komplikation hatte eine Komplikation.“ -
gritsch schrieb:
viel schlimmer sind solche ketten in swift: irgendwas!.nochwas!.irgendwasanderes
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es.
Wenn man explizit dem Compiler sagt, "Ich weiß es besser als Du. Mach trotzdem!" – genau dazu ist das!
da – dann sollte man sich nicht beschweren. In C/Objetive-C kann man auch explizit casten und dann auf die Schnauze fallen.... -
tsunamix schrieb:
macmoonshine schrieb:
Markus Müller schrieb:
Und es nicht möglich, wie in objc versehentlich eine nil-Referenz herumzureichen, ohne dass es der Compiler bemerkt.
-
tsunamix schrieb:
gritsch schrieb:
viel schlimmer sind solche ketten in swift: irgendwas!.nochwas!.irgendwasanderes
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es.
!
da – dann sollte man sich nicht beschweren. In C/Objetive-C kann man auch explizit casten und dann auf die Schnauze fallen....
ihr wollt uns in obj-c verbieten auf nil zu prüfen, in swift gehts dann aber doch auch nicht ohne prüfen. also was soll das ganze.
meiner meinung nach braucht man in obj-c keine optionals da wir eh bereits optionals haben.
optionals wären manchmal praktisch für einfache typen und structs, aber das liegt ja nicht an obj-c sondern kommt von C. -
Markus Müller schrieb:
Na zumindest nativer swift-code würde das dann nicht zulassen beim kompilieren. Die jetzige Übergangszeit mit den obj-c Cocoa-API's bereitet diesbzgl. die einen oder anderen Schmerzen, richtig...
„Meine Komplikation hatte eine Komplikation.“ -
macmoonshine schrieb:
tsunamix schrieb:
Das verstehe ich nicht. Was meinst Du damit?
nil
sein dürfen.
var key: Int!
. -
tsunamix schrieb:
macmoonshine schrieb:
tsunamix schrieb:
Das verstehe ich nicht. Was meinst Du damit?
nil
sein dürfen.
var key: Int!
.
„Meine Komplikation hatte eine Komplikation.“ -
gritsch schrieb:
tsunamix schrieb:
gritsch schrieb:
viel schlimmer sind solche ketten in swift: irgendwas!.nochwas!.irgendwasanderes
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es.
!
da – dann sollte man sich nicht beschweren. In C/Objetive-C kann man auch explizit casten und dann auf die Schnauze fallen....
meiner meinung nach braucht man in obj-c keine optionals da wir eh bereits optionals haben.
optionals wären manchmal praktisch für einfache typen und structs, aber das liegt ja nicht an obj-c sondern kommt von C.
Hier will Dir niemand etwas verbieten. Solche Prüfungen sind nötig, sie funktionieren in Obj-C und Swift nur oft anders.
Obj-C hat keine Optionals, und das Konzept hat da auch nichts verloren. -
tsunamix schrieb:
Obj-C hat keine Optionals, und das Konzept hat da auch nichts verloren.
„Meine Komplikation hatte eine Komplikation.“ -
macmoonshine schrieb:
Markus Müller schrieb:
Na zumindest nativer swift-code würde das dann nicht zulassen beim kompilieren. Die jetzige Übergangszeit mit den obj-c Cocoa-API's bereitet diesbzgl. die einen oder anderen Schmerzen, richtig...
-
tsunamix schrieb:
gritsch schrieb:
tsunamix schrieb:
gritsch schrieb:
viel schlimmer sind solche ketten in swift: irgendwas!.nochwas!.irgendwasanderes
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es.
!
da – dann sollte man sich nicht beschweren. In C/Objetive-C kann man auch explizit casten und dann auf die Schnauze fallen....
meiner meinung nach braucht man in obj-c keine optionals da wir eh bereits optionals haben.
optionals wären manchmal praktisch für einfache typen und structs, aber das liegt ja nicht an obj-c sondern kommt von C.
Hier will Dir niemand etwas verbieten. Solche Prüfungen sind nötig, sie funktionieren in Obj-C und Swift nur oft anders.
Obj-C hat keine Optionals, und das Konzept hat da auch nichts verloren.
nur in C gibts keine optionals.
und warum soll man die rufezeichen in swift vermeiden, in obj-c aber keine if-abfragen machen?
du musst eben in beiden sprachen bestimmte sachen machen oder eben nicht machen dass es funktioniert.
ob man dann lieber ein fragezeichen und sonstige konstrukte verwendet oder eine gebräuchliches für jeden lesbares if-statement ist doch komplett egal! -
gritsch schrieb:
tsunamix schrieb:
gritsch schrieb:
tsunamix schrieb:
gritsch schrieb:
viel schlimmer sind solche ketten in swift: irgendwas!.nochwas!.irgendwasanderes
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es.
!
da – dann sollte man sich nicht beschweren. In C/Objetive-C kann man auch explizit casten und dann auf die Schnauze fallen....
optionals wären manchmal praktisch für einfache typen und structs, aber das liegt ja nicht an obj-c sondern kommt von C.
Obj-C hat keine Optionals, und das Konzept hat da auch nichts verloren.
und warum soll man die rufezeichen in swift vermeiden, in obj-c aber keine if-abfragen machen?
du musst eben in beiden sprachen bestimmte sachen machen oder eben nicht machen dass es funktioniert.
ob man dann lieber ein fragezeichen und sonstige konstrukte verwendet oder eine gebräuchliches für jeden lesbares if-statement ist doch komplett egal!
-
Markus Müller schrieb:
gritsch schrieb:
tsunamix schrieb:
gritsch schrieb:
tsunamix schrieb:
gritsch schrieb:
viel schlimmer sind solche ketten in swift: irgendwas!.nochwas!.irgendwasanderes
der compiler sagt da auch nix dazu und dann zur laufzeit knallt es.
!
da – dann sollte man sich nicht beschweren. In C/Objetive-C kann man auch explizit casten und dann auf die Schnauze fallen....
Obj-C hat keine Optionals, und das Konzept hat da auch nichts verloren.
und warum soll man die rufezeichen in swift vermeiden, in obj-c aber keine if-abfragen machen?
du musst eben in beiden sprachen bestimmte sachen machen oder eben nicht machen dass es funktioniert.
ob man dann lieber ein fragezeichen und sonstige konstrukte verwendet oder eine gebräuchliches für jeden lesbares if-statement ist doch komplett egal!
es gibt halt einige ausnahmen in denen man keine nil-pointer übergeben darf aber die kennt man ja bzw sind logisch und es steht in der doku und außerdem noch durch nonnull oder nullable gekennzeichnet. -
Markus Müller schrieb:
doch, denn Du kannst in swift angeben, ob Du optionale Werte verarbeitest oder eben nicht. Wenn Du optionals erwartest, musst Du den nil-Fall prüfen, genau das drückt der Code ja aus. Das meinte ich mit ausdrucksvollerem Code weiter oben. In obj hast Du immer nur Typ*
if let
finde ich auch nicht ausdrucksstärker als einen expliziten Vergleich aufnil
.„Meine Komplikation hatte eine Komplikation.“