5 Stimmen

Ist es falsch, die Punktsyntax als Getter zu verwenden?

Ich weiß, dass das . eine Abkürzung für einen Setter ist. Manchmal verwende ich diese Art von Code:

cell.textLabel.text = [NSString stringWithFormat:@"this is row %i", indexPath.row];

Dies funktioniert wie erwartet, aber ich habe mich gefragt, ob es besser (oder korrekter?) ist, zu schreiben

cell.textLabel.text = [NSString stringWithFormat:@"this is row %i", [indexPath row]];

Oder anders gesagt, sollte ich die Punktsyntax nur mit dem =-Operator verwenden, wie

aTextField.text = @"whatever";

Alle Links/Dokumente sind willkommen, danke :)

PS. Falls Sie das Tag nicht gesehen haben, ich spreche hier über iOS.

6voto

taskinoor Punkte 44745

Der Punkt (.) ist nicht nur eine Abkürzung für Setter, sondern auch für Getter. Sie können den Punkt auch für Getter verwenden. Es gibt kein Problem, noch ist dies eine schlechte Praxis. Von Obj-C 2.0 Programmierhandbuch Sie können die Punktsyntax verwenden, um Accessor-Methoden nach demselben Muster aufzurufen wie den Zugriff auf Strukturelemente. Die Punktsyntax ist lediglich ein "syntaktischer Zucker". Beachten Sie, dass es hier um Accessor-Methoden geht, nicht nur um Setter.

4voto

iljawascoding Punkte 1030

Das ist eine Frage des Geschmacks.

Ich ziehe es aus verschiedenen Gründen vor, die Punktsyntax nicht zu verwenden:

  • Wenn Sie die Punktsyntax verwenden, ist es viel schwieriger, nur die Stellen in Ihrem Code zu finden, an denen Sie einen Wert setzen. Die Suche nach setValue: ist viel einfacher als die Suche nach .value

  • Als langjähriger C-Programmierer ist mein Gehirn so verdrahtet, dass ich die Punktsyntax mit dem Zugriff auf Strukturmitglieder verbinde. Ich finde es ziemlich schwierig, mich an die Punktsyntax in einem anderen Bereich zu gewöhnen.

  • Die Syntax von setXY: folgt der natürlichen Sprache viel näher. Das macht das Lesen des Codes von jemand anderem so viel einfacher.

3voto

Costique Punkte 23644

"." ist eine Abkürzung für den Zugriff auf eine @property (das kann übrigens sein readonly ). Aus syntaktischer Sicht hängt es von der Position des Operanden ab, ob es sich um einen Getter oder einen Setter handelt:

self.enabled = NO; // setter
BOOL isEnabled = self.enabled; // getter
self.selected = self.enabled = NO; // this is OK too

1voto

mmmmmm Punkte 31394

Es geht um den Stil der Kodierung, also ist nichts davon besser.

Ich möchte jedoch zwei Dinge anmerken.

Als langjähriger Objektiv-C-Code bevorzuge ich [indexPath row], da es mit dem Rest des Codes konsistent ist und für einen Satz würde ich [aTextField setText:@"whatever"] verwenden.

Wenn Sie jedoch die Notation . für Tastaturpfade verwenden müssen, erscheint der Zugriff auf dieselbe Variable über die Methodennotation im selben Codestück merkwürdig.

Apple-Dokumentation sagt

Objective-C bietet einen Punkt (.) Operator, der eine kompakte und bequeme Syntax bietet, die Sie als Alternative zur Notation in eckigen Klammern ([]s) verwenden können, um Zugriffsmethoden aufzurufen.

und

myInstance.value = 10;
printf("myInstance value: %d", myInstance.value);

Die Punktsyntax ist rein "syntaktisch Zucker" - sie wird durch den Compiler in den Aufruf von Accessor Methoden umgewandelt (Sie greifen also nicht tatsächlich Zugriff auf eine Instanzvariable direkt zu). Das obige Codebeispiel ist genau gleichwertig mit dem folgenden:

[myInstance setValue:10]; printf("myInstance value: %d", [myInstance value]);

-2voto

PeyloW Punkte 36534

Die Verwendung der Punktsyntax ist keine Stil- oder Geschmacksfrage!

Die Punktsyntax ist für den Zugriff auf Eigenschaften gedacht. Die Syntax für das Senden von Nachrichten ist für das Versenden von Methoden. Es handelt sich konzeptionell um zwei verschiedene Dinge. Legacy und Rückwärtskompatibilität zu Objective-C 1.0 macht sie leider austauschbar, was zu viel Verwirrung geführt hat.

Ob Sie die Punkt-Syntax verwenden oder nicht, ist ganz einfach:

  • Wenn eine öffentliche Kopfzeile etwas als Eigenschaft und greifen Sie dann auf sie als Eigenschaft zu, indem Sie die Punkt-Syntax wie vom Autor der Schnittstelle ausdrücklich beabsichtigt!
  • Wenn eine öffentliche Kopfzeile etwas als Methode und greifen Sie dann mit der Option Syntax der Nachrichtenübermittlung wie vom Autor der Schnittstelle ausdrücklich beabsichtigt!
  • Machen Sie NO Ausnahmen.

Die schwierige Frage ist, sollten Sie etwas als Eigenschaft deklarieren und damit Ihren Kunden mitteilen, dass die doit-Syntax verwendet werden sollte, oder sollten Sie eine Methode deklarieren? Die einfache Antwort ist:

  • Verwenden Sie Eigenschaften für Staaten (ist etwas) .
  • Verwenden Sie Methoden für Verhaltensweisen (etwas tun/berechnen) .

Eine weitere Faustregel ist, dass Eigenschaften in sich geschlossen sein sollten. Es sollte keine andere Möglichkeit geben, den Wert der Eigenschaft zu ändern, als die Eigenschaft selbst zu setzen. Dies ist keine harte Regel, nutzen Sie Ihren gesunden Menschenverstand, es gibt viele sinnvolle Ausnahmen. Zum Beispiel eine hidden Eigenschaft, die sich mit setHidden:animated: Methode.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X