4 Stimmen

Probleme mit der korrekten Bezeichnung dieser Methode

Lange Zeit c#/java/c++ Programmierer, brand spankin neu zu objectivce C. Lesen Sie die Leitlinien, sah api's, aber nicht ganz da noch auf die Benennung Konvention.

Beispiel: Nehmen wir an, ich habe eine Cars-Klasse, die ein Array mit allen Autos enthält, und Sie möchten, dass die Methoden eine Teilmenge des Arrays zurückgeben.

Ich sehe NSArray hat eine Methode: getObjects, aber in den meisten Fällen sehe ich nicht die "get". Also was bevorzugen Sie?

Alle Anregungen sind willkommen! Ich habe viel zu viel Zeit damit verbracht, darüber nachzudenken.

Option A) -(NSArray *) getCarsWithColor:(NSString *)color;

Option B) -(NSArray *) getCars:(NSString *)withColor;

Optoin C) -(NSArray *) carsWithColor:(NSString *)color;

OPtion D) -(NSArray *) cars:(NSString *)withColor;

Option E) keine der oben genannten, nennen Sie sie xxxxxxxxxxxx....

Gracias.

5voto

kennytm Punkte 488916

Objective-C-Methoden werden nur selten mit get . Die getObjects: Methode hat get nur deshalb, weil das Ergebnis in einem Puffer in einem Eingabeargument abgelegt wird.

-(void)getObjects:(id*)aBuffer;
  ^^^^                 ^^^^^^^

während Ihre Methode keinen Puffer füllt, sondern ein Array zurückgibt. Die Optionen (A) und (B) sind ausgeschlossen.

Außerdem ist die Art des Arguments normalerweise Teil des Selektornamens (vor : ), z.B.

-(UIView*)viewWithTag:(NSInteger)tag
              ^^^^^^^
// not view:(NSInteger)withTag

-(CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view
// not convert:(CGPoint)point from:(UIView*)view;

daher wird von Option (D) abgeraten.

Ein detaillierter Leitfaden für die Benennung von Methoden findet sich in Kodierungsrichtlinien für Kakao: Benennung von Methoden . Dieser Leitfaden enthält auch andere Konventionen, die für Sie von Interesse sein könnten.

1voto

Joshua Nozzi Punkte 60200

Option C ist die beste. Verwenden Sie niemals "get", es sei denn, Sie erhalten Zeiger in ein C-Array und die Argumente sollten nur für die Methodensignatur benannt werden, die auf sie verweist.

Auf diese Weise sind längere Methoden mit mehreren Argumenten übersichtlicher:

-(NSArray *)carsWithColor:(NSColor *)color 
                   wheels:(NSInteger)wheels 
                    seats:(NSInteger)seats 
          premiumInterior:(BOOL)premiumInterior ...

...was man abkürzen kann zu: -carsWithColor:wheels:seats:premiumInterior:... wenn Sie es anderen beschreiben.

1voto

kubi Punkte 46128

"C" ist die Standardmethode für diese Aufgabe. get wird sehr selten in Gettern verwendet und die ausführlichere carsWithColor bevorzugt wird.

1voto

jxpx777 Punkte 3616

Zusätzlich zu dem, was alle anderen gesagt haben, würde ich neugierig sein, warum Sie ein NSArray von Objekten in der Klasse Cars speichern. Es klingt für mich wie Autos ist ein NS[Mutable]Array ivar irgendwo mit Instanzen der Car-Klasse. Dann brauchen Sie diese Methode überhaupt nicht. Wenn Sie Core Data verwenden, dann würden Sie ein fetch tun und wenn Sie nur die NSArray selbst behandeln, könnten Sie ein Prädikat verwenden, um die Objekte des Arrays zu filtern. Ich denke, das ist der Teil, der mir als der un-Cocoa-Aspekt Ihrer Frage am meisten auffällt. Wenn Sie diese Methode benötigen, dann würde sie auf dem Objekt definiert werden, das das NSArray ivar wie enthält:

NSArray *cars = [NSArray arrayWithObjects:car1, car2, car3, nil];
(NSArray *)carsWithColor:(NSString *)color{
    return [cars filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"color == %@", color]];
}

Dieser Code ist ungetestet, aber so würde ich das Problem angehen. Die Methode ist wirklich ein Controller-Typ-Methode und sollte nicht Teil Ihres Modells Logik sein. Nachdem die Cars-Klasse klingt wie verwirrt MVC zu mir.

0voto

Alex Reynolds Punkte 93906

Objective-C-Methodennamen verwenden nicht das get Vorwahl. Daher ist Option C am ehesten richtig, mit dem Vorbehalt, dass die aWithB Konstruktion impliziert die NSArray * die zurückkommt, ist autorelease -d.

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