Objective-C "Nachrichten" - was ist der richtige Weg, es zu lesen?

7

Sie können eine Methode in objective-c deklarieren und jeden Parameter zweimal nennen.

Ich habe die Idee, dass das mächtig ist, aber ich bin mir nicht sicher, wie ich es noch benutzen soll ...

Wenn John Greets Kelly:

[ p Greet:"John" toPerson:"Kelly" greetWith:"hey babe" ] ;

Etwas davon liest sich nicht natürlich. Ich bin mir nicht sicher, ob ein erfahrener objective-c Programmierer diese "Nachricht" schreiben würde.

Kann jemand den Grund für zwei Namen für jeden Parameter erklären und möglicherweise ein nützlicheres Beispiel dafür, wie dies effektiv genutzt werden kann, um Bedeutung in das Programm zu bringen?

Auch etwas stört mich und das ist der Name des ersten Parameters ist im Grunde der gleiche wie der Name der ' Nachricht '. Wie lösen Sie das schriftlich sinnvolle und verständliche Methode / "Nachrichtennamen"?

%Vor%     
bobobobo 08.11.2009, 20:21
quelle

5 Antworten

20

Erste Dinge zuerst: als stilistische Note, bringen Sie Ihre Zahnspange zusammen:

%Vor%

sollte

sein %Vor%

Ich bemerke auch, dass Sie vergessen, Person beim Zuweisen zu initialisieren. Sie sollten Folgendes verwenden:

%Vor%

Es erfordert ein wenig Zeit, sich ein Gefühl dafür zu verschaffen, wie man Methoden deklariert. Untersuchen, wie das Framework seine Methoden benennt, ist nützlich. Für dein spezifisches Beispiel denke ich, dass du übertrieben bist. Sie suchen nach etwas wie diesem:

%Vor%

Beachten Sie, dass ich auch g in greetPerson nicht groß geschrieben habe. Das ist eine stilistische Konvention von Objective-C.

Vergessen Sie nicht, dass ein Objekt eine eigene Identität hat, so selten müssen Sie ein Objekt (das eine Person repräsentieren soll) anweisen, wer es ist, bevor es mit jemandem spricht. Wenn Sie eine Nachricht schreiben, sollte sie wie Englisch lesen. Wenn Sie auf mehrere Argumente stoßen - zugegebenermaßen selten - beginnen Sie, mit Kommas zu denken:

%Vor%

Sehen Sie, wie das fließt? Und selbst das lässt einiges zu wünschen übrig, das habe ich auch noch nicht gemeistert. Gib es Zeit.

Ein sehr nützliches Dokument dazu ist Apples Kodierungsrichtlinien für Kakao .

Bring dich auch aus der C-Falle. Hier ist, wie ich dein gesamtes Programm schreiben würde (ich stelle eine Bootsladung von Konzepten vor, also erwarte nicht, alles davon zu verstehen):

%Vor%

Dieser Code ist völlig ungetestet, also wenn er ohne Probleme funktioniert, werde ich gebührend beeindruckt sein.

    
Jed Smith 08.11.2009, 20:28
quelle
4

Andere Leute haben die wichtigsten Punkte behandelt, also werde ich nur einige der zusätzlichen Fragen berücksichtigen:

  

Auch etwas stört mich und das ist der Name des ersten Parameters ist im Grunde das gleiche wie der Name der "Nachricht". Wie lösen Sie das schriftlich sinnvolle und verständliche Methode / "Nachrichtennamen"?

Der gebräuchlichste Weg, um damit umzugehen, besteht darin, den Methodennamen zu einer Kombination aus "was es ist / tut" und der Bezeichnung für den ersten Parameter zu machen. Beispiel:

%Vor%
  

Kann jemand den Grund für zwei Namen für jeden Parameter erklären und möglicherweise ein nützlicheres Beispiel dafür, wie dies effektiv genutzt werden kann, um Bedeutung in das Programm zu bringen?

Die schnelle Antwort ist, dass die zwei Namen für verschiedene Zielgruppen gedacht sind; einer ist für den Benutzer der Methode, der andere ist für den Autor der Methode. Betrachten Sie das obige Beispiel noch einmal. Die Methodendeklaration sieht folgendermaßen aus:

%Vor%

Wenn ein Benutzer diese Methode aufruft, handelt es sich um die ersten Bezeichnungen (die vor dem Doppelpunkt). Sie können in meinem ersten Beispiel sehen, wo die Kanalwerte als numerische Konstanten übergeben werden, dass nur die Bezeichnungen im Code gesehen werden.

Die tatsächlichen Parameternamen (die Teile nach dem Typ), innerhalb der Methodendefinition, und als solche sind wirklich nur für den Programmierer da, der die Methode schreibt, da das die Variablen sind, die wird innerhalb des Methodenkörpers selbst verfügbar sein.

    
e.James 08.11.2009 20:43
quelle
2

Der erste "Teil" der Methode ist selector , für Ihr Beispiel ist dies -greet:toPerson:greetWith: , dies ist der tatsächliche Name der Methode.

Der zweite "Teil" sind die Parameter der Methode, in Ihrem Beispiel sollen sie grüßen.

Das ähnelt etwas wie C, wo Sie

hätten %Vor%

Ich sollte auch erwähnen, dass Sie wahrscheinlich mit NSString * anstelle von char * und NSLog() anstelle von printf() arbeiten möchten (keine Sorge, es funktioniert fast genau so).

    
jbrennan 08.11.2009 20:29
quelle
0

Wahrscheinlich wäre es:

%Vor%

Das Personenobjekt ist bereits John und er begrüßt ein anderes Personenobjekt, das ich nicht als Zeichenfolge definieren würde, sondern als eine andere Instanz der Klasse Person, und dann könnten Sie greetWithString ausführen.

%Vor%

Sie definieren die Parameter nicht zweimal, da sind Sie verwirrt. Wenn Sie C ++ kennen, haben Sie normalerweise:

%Vor%

zum Beispiel als Funktionsprototyp. Dann würdest du es so nennen:

%Vor%

Nun macht alles, was objective-c tut, es dir leichter zu machen, indem es selbstdokumentiert. Anstatt die Parameter einfach auf die Funktionen zu setzen, benennen Sie sie, bevor Sie sie angeben, also wäre der obige Aufruf:

%Vor%

bei dem oben beschriebenen Funktionsprototyp. Auf diese Weise wissen Sie, wenn Sie den Code lesen, was jeder Parameter tut, und er dokumentiert sich selbst. Es mag auf den ersten Blick langweilig erscheinen, aber die Lesbarkeit des Codes ist stark erhöht.

    
Jorge Israel Peña 08.11.2009 20:29
quelle
0

Der Name der oben beschriebenen Methode lautet "Greet: toPerson: greetWith:". Die Doppelpunkte sind Teil des Namens. Die Parameter (und ihre Typspezifizierer) sind nicht.

Stil Hinweis: Starten Sie keinen Methodennamen mit einem Großbuchstaben, es sei denn, Sie beziehen sich auf ein Akronym (wie "URL".)

    
NSResponder 08.11.2009 20:37
quelle