Verwendung von Self-ivar beim direkten Zugriff auf Instanzvariablen

8

Ich habe festgestellt, dass die meisten Objective-C-Programmierer niemals die Syntax self->ivar verwenden, wenn sie direkt auf Instanzvariablen zugreifen. Der meiste Beispielcode, den ich sehe, verweist einfach auf die Instanzvariable ohne self-> . Ich denke, dass es ziemlich verwirrend ist, eine Instanzvariable zu referenzieren, ohne klar zu machen, dass es sich um eine Instanzvariable handelt und nicht einfach um eine Variable des aktuellen Bereichs.

Ich habe das Gefühl, ich möchte Sachen schreiben wie:

%Vor%

oder

%Vor%

Es gibt nicht viele Gelegenheiten, bei denen wir jemals auf unsere Instanzvariablen zugreifen sollten, ohne einen Accessor für die Kapselung zu verwenden, aber manchmal müssen wir dies beispielsweise in dealloc oder in benutzerdefinierten Gettern und Settors tun.

Bin ich ein schlechter Mensch / Programmierer dafür? Gibt es wirklich gute Gründe dafür, keinen solchen Code zu schreiben? Weil es sich so gut anfühlt.

    
Jonathan Sterling 21.08.2009, 20:53
quelle

4 Antworten

7

Chuck ist korrekt, weil es keinen technischen Grund gibt, warum Sie es nicht so schreiben sollten, es sei denn, Sie spiegeln ivars mit lokalen Variablen, was im Allgemeinen eine schlechte Idee ist. Es ist jedoch vertretbar, dass das weglassen von self-> stilistisch sauberer ist, und es führt sicherlich zu weniger ausführlichen Code. Persönlich würde ich die self-> als störend empfinden (besonders wenn der Code gut gestaltet ist und die Variablen gut benannt sind), aber wenn es die Dinge für Sie verständlicher macht, tun Sie es auf jeden Fall. Seien Sie sich jedoch bewusst, dass wenn Sie Ihren Code anderen Objective-C-Programmierern zeigen, sie wahrscheinlich eine widersprüchliche Meinung haben, also ist es gut, eine Denk-Skin zu haben. Außerdem stellen die meisten Programmierer fest, dass ihre Wahrnehmung dessen, was den Code "gut fühlen" verändert, sich im Laufe der Zeit und mit der Erfahrung ändert, und diese Meinungen werden oft mit dem Alter abgemildert. : -)

    
Quinn Taylor 21.08.2009, 23:45
quelle
7

Es gibt keinen Grund, warum du es nicht so schreiben solltest. Ich denke, die Leute neigen dazu, es auf die andere Art zu schreiben, weil sie sowieso vermeiden, ihre Ivars zu beschatten, also sollte es keine Unklarheit darüber geben, über welche Variable sie sprechen - und sie ist kürzer.

    
Chuck 21.08.2009 21:02
quelle
4

Kurze Antwort: Nein, dafür bist du kein schlechter Programmierer :) Es gibt auch keinen Grund, den Code nicht auf diese Weise zu schreiben; Die meisten Programmierer sind einfach faul oder haben nie eine anstrengende Methode in ihrem ganzen Leben geschrieben.

Lange Antwort: Technisch gesehen, wenn Sie auf eine Variable ohne "self & gt;" zugreifen, wird der Compiler zuerst nach einer Variablen dieses Namens im lokalen Bereich suchen und wenn er keine finden kann, wird er diese Suche mit Instanzvariablen wiederholen. Wenn es dort einen Treffer findet, erzeugt es tatsächlich Code, als ob "self & gt; ..." dort geschrieben worden wäre. Wenn es auch keine Übereinstimmung für Instanzvariablen gäbe, würde der Compiler innerhalb des globalen Gültigkeitsbereichs versuchen, BTW.

Die meisten Programmierer lesen nur ihren eigenen Code und sie wissen ziemlich genau, was eine Instanzvariable ist und was nicht. Sobald Sie jemals mit Code arbeiten mussten, den Sie selbst nicht geschrieben haben, wo die Methode 4 Bildschirmseiten lang ist (und ich einen Bigg-Bildschirm habe), sind Sie wirklich dankbar, wenn der Programmierer es bei jedem Variablenzugriff absolut klar gemacht hat: Ist diese Variable? ein dem Methodenaufruf zugeführter Parameter, eine lokale Variable dieser Methode, eine Instanzvariable des Objekts oder möglicherweise eine globale Variable (nur global für alle Instanzen dieser Klasse oder möglicherweise globale Anwendung). Sie sind dankbar, denn wenn es nur eine Reihe von Variablen mit ähnlichem Namen und ohne spezielle Benennungs- oder Zugriffsmuster gibt, jedoch alle unterschiedlichen Typs, verlieren Sie ziemlich schnell die Aufsicht. Und die Tatsache, dass die Xcode-Syntaxhervorhebung Instanzvariablen auf eine andere Weise als lokale Variablen hervorhebt, ist auch dumm, weil kein Programmierer Code in Xcode bearbeiten muss und selbst wenn er es tut, könnte er ein Farbschema haben, wo es heißt Variablen haben die gleiche Farbe wie lokale.

Zugriff auf Instanzvariablen über self & gt; ist vollkommen in Ordnung, aber bedenken Sie auch, dass Sie vielleicht ein Präfix / Suffix verwenden sollten, was auch offensichtlich macht, dass es sich um Instanzvariablen handelt und auch Namenskonflikte mit Methodenparametern oder lokalen Variablen vermieden werden.

    
Mecki 03.08.2010 13:21
quelle
1

Objective C hängt automatisch einen Unterstrich an den i-var-Namen an. Wenn Sie also "_someVar" sehen, ist dies implizit der Klassenbereich. Der Unterstrich ist genug eines visuellen Markers, um seinen Umfang klar zu machen, ohne selbst & gt; hinzuzufügen.

    
Sly_Boots 01.09.2017 15:00
quelle

Tags und Links