Punkt Notation

  • Punkt Notation

    Hallo Entwickler,

    ich habe festgestellt, dass man die Punkt Notation bei allen Methoden verwenden kann, die etwas zurückgeben und keine Argumente enthalten.
    So sind zum Beispiel solche Ausdrücke möglich:

    Quellcode

    1. MyClass *Object = MyClass.alloc.init;
    2. MyClass *Object = [MyClass.alloc initWithName:@"iOS"];


    Wieso steht das in keinem Buch? Die Dot Notation wird da nur in Verbindung mit @property erwähnt.
    Ich finde diese Methode besser, da man zwei Zeichen spart.
  • Die Punkt Notation sollte nur für Properties verwendet werden.

    Klar könnte man diese auch bei Methoden ohne Argument verwenden, da sich ein -(id)alloc vom Grundaufbau nicht wirklich von z.B. einem -(NSString*)getText unterscheidet. Man könnte jedoch nicht mehr erkennen ob über die Punkt Notation auf ein Property zugetriffen wird oder eine "normale" Methode aufgerufen wird.

    Ich würde zumindest von der Verwendung der Punkt Notation für "normale" Methoden, also nicht Properties, abraten, da so Properties und Methoden klar voneinander zu unterscheiden sind.
  • Vyax schrieb:

    Wieso steht das in keinem Buch? Die Dot Notation wird da nur in Verbindung mit @property erwähnt.

    Weil die Punktnotation eben nur für den Zugriff auf Properties eingeführt wurde. Das man damit auch Methoden ohne Parameter ansprechen kann ist eher Zufall.

    Vyax schrieb:

    Ich finde diese Methode besser, da man zwei Zeichen spart.

    Zeichen sparen ist für mich kein Argument, zumal mir Xcode das Tippen der zusätzlichen Zeichen eh abnimmt. Lesbarkeit ist mir wichtiger.

    Michael
  • Ob Klammer oder Punkt macht für mich keinen große unterschied. Unter Lesbarkeit fällt aber eben nicht nur das Optische, sondern vor allem der „Inhalt“. Wie MCDan schon sagte, man erkennt sofort, ob auf eine Property zugegriffen oder eine Methode aufgerufen wird. Da spart man sich dann den Blick in die Headerdatei, um diesen Unterschied zu erkennen.

    Michael
  • Die Punktnotation lehnt an die Schreibweise des KVC an und Apple sieht die Punktnotation nicht nur für Property-Zugriffe sondern für beliebige Accessormethoden, also auch für Methoden, die nicht über Propertys deklariert wurden: developer.apple.com/library/io…/uid/TP30001163-CH11-SW17

    Die Methode alloc ist allerdings eindeutig kein Accessor, weswegen ich dafür auch keine Punktnotation verwenden würde.
    „Meine Komplikation hatte eine Komplikation.“
  • Vyax schrieb:

    Hallo Entwickler,

    ich habe festgestellt, dass man die Punkt Notation bei allen Methoden verwenden kann, die etwas zurückgeben und keine Argumente enthalten.
    So sind zum Beispiel solche Ausdrücke möglich:

    Quellcode

    1. MyClass *Object = MyClass.alloc.init;
    2. MyClass *Object = [MyClass.alloc initWithName:@"iOS"];


    Wieso steht das in keinem Buch? Die Dot Notation wird da nur in Verbindung mit @property erwähnt.
    Ich finde diese Methode besser, da man zwei Zeichen spart.

    Wie kommst du darauf, dass das in keinem Buch steht? Hast du alle gelesen?

    Aber man soll es nicht machen. Daher stellt sich für einen Autor die Frage, ob er es überhaupt anspricht.
    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"?
  • gritsch schrieb:

    naja, auch "properties" sind methoden die aufgerufen werden.

    ich frag mich also warum man unterscheiden sollte. ich verwende für alles die eckigen klammern.
    will ja merken dass ich nicht in java, c oder c++ bin, vor allem weil man letztere 2 ja mit obj-c mischen kann.

    Semantik macht den Unterschied.
    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"?
  • macmoonshine schrieb:

    gritsch schrieb:

    irgend eine methode steckt immer dahinter.

    Latürnich; vielleicht hätte ich lieber Da liegt keine eigene Methode für jede Property dahinter. schreiben sollen. ;) :D


    jup, was hat das aber damit zu tun dass man die dinger anders behandeln sollte? ob das jetzt ein getter ist den man selbst geschrieben hat, ein getter von apple, oder sonst eine methode (ohne parameter) finde ich nicht dass man sie anders behandeln sollte. vor allem weil mans ja schon am namen erkennt.
  • gritsch schrieb:

    macmoonshine schrieb:

    gritsch schrieb:

    irgend eine methode steckt immer dahinter.

    Latürnich; vielleicht hätte ich lieber Da liegt keine eigene Methode für jede Property dahinter. schreiben sollen. ;) :D


    jup, was hat das aber damit zu tun dass man die dinger anders behandeln sollte? ob das jetzt ein getter ist den man selbst geschrieben hat, ein getter von apple, oder sonst eine methode (ohne parameter) finde ich nicht dass man sie anders behandeln sollte. vor allem weil mans ja schon am namen erkennt.

    Es ist kürzer. Es ist prägnanter. Es entspricht KV. Oder schreibs du @"[[[person father] father] name]"?

    Und ja, der Vergleich stimmt sehr gut. Man kann auch KVC dazu missbrauchen, Methoden auszuführen. Das machst du aber doch auch nicht, 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"?
  • Amin Negm-Awad schrieb:

    gritsch schrieb:

    macmoonshine schrieb:

    gritsch schrieb:

    irgend eine methode steckt immer dahinter.

    Latürnich; vielleicht hätte ich lieber Da liegt keine eigene Methode für jede Property dahinter. schreiben sollen. ;) :D


    jup, was hat das aber damit zu tun dass man die dinger anders behandeln sollte? ob das jetzt ein getter ist den man selbst geschrieben hat, ein getter von apple, oder sonst eine methode (ohne parameter) finde ich nicht dass man sie anders behandeln sollte. vor allem weil mans ja schon am namen erkennt.

    Es ist kürzer. Es ist prägnanter. Es entspricht KV. Oder schreibs du @"[[[person father] father] name]"?

    Und ja, der Vergleich stimmt sehr gut. Man kann auch KVC dazu missbrauchen, Methoden auszuführen. Das machst du aber doch auch nicht, oder?


    ist klar, wollts aber gesagt haben da der fragesteller ja auch nicht wusste warum/wann und warum nicht verwenden.
  • gritsch schrieb:

    Vyax schrieb:

    Aber Klammern machen etwas doch erst unlesbar.


    eigentlivh umgekehrt...

    Finde ich auch. Erst die Mischung aus Klammer- und Punktnotation macht es unlesbar. Ich schreibe übrigens alle Getter und Setter immer noch mit Klammern....
    Wegen der systematischen Lesbarkeit. Siehe z.B.:

    Quellcode

    1. self.selectedNetwork = [self.scanResults objectAtIndex:index];
    2. [joinNetworkNameField setStringValue:self.selectedNetwork.ssid];
    3. m.E. systematischer und daher lesbarer (weil man weniger Leseregeln kennen muß):
    4. [self setSelectedNetwork:[[self scanResults] objectAtIndex:index]];
    5. [joinNetworkNameField setStringValue:[[self selectedNetwork] ssid]];

    Die ist mir viel wichtiger als Geschwindigkeit beim Tippen.

    Und noch ein Vorteil: wenn irgendwann ein Setter mit 2 Argumenten dazukommt, dann muss man die .-Ketten nicht nachträglich umbauen. Gibts sowieso nicht meint Ihr? Doch: MKMapView hat z.B. setVisibleMapRect: als @property und setVisibleMapRect:animated: Ersteren kann man als mapView.visibleMapRect= schreiben, den zweiten nicht.
  • Vyax schrieb:

    Wieso steht das in keinem Buch?

    Weil die gesamte Dot-Notation reiner Schwachsinn ist.
    Wer so etwas benutzt, der frisst auch kleine Kinder.
    Wenn du so auf Dot-Notation stehst, dann programmier doch einfach für Android oder Windows Phone. Die eckigen Klammern bist du dann zusätzlich auch noch los.
    Geil, wa?


    Dank dieses self.bla Blödsinns überlegt doch heute niemand mehr, ob er wirklich den Umweg über die Getter nehmen sollte oder ein Direktzugriff auf die Instanzvariable nicht doch sinnvoller wäre.

    C-Quellcode

    1. [self setSelectedNetwork:[scanResults_ objectAtIndex:index]];
    2. [joinNetworkNameField setStringValue:[selectedNetwork_ ssid]];


    Eine Notwendigkeit einen Getter auf self zu nutzen sehe ich bei vielen Klassen schlicht nicht.
    Nur den 'Erfolg' eine zusätzliche Nachricht in den Äther gejagt zu haben.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P