Ergebnis 1 bis 18 von 18

Thema: Wie das T in Delphi - von Ungarischer Notation, Designfehlern und Construktoren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Ruby hat auch keinen new-Operator und kann ohne Präfixe auskommen. ^^
    Du kämpfst auf verlorenem Posten, weil du einen Designfehler zu verteidigen versuchst.
    Methodennamen (sowie Prozeduren/-Funktionsnamen) müssen immer das wiedergeben, was sie tun (eine der wichtigsten Regel in der Programmierung) und bei einer Methode, die Create heißt und auf ein Objekt des Typs Object angewendet wird, erwarte ich die Erzeugung einer neuen Instanz des Typs Object. Das wird bei einem Objekt vom Typ ObjectManager auch nicht mehrdeutig. Sollte eine Methode etwas anderes machen, als eine neue Instanz des Typs zurückzugeben, auf dem sie angewendet wird, darf sie nicht Create oder New oder ähnlich heißen. Im Falle, dass ObjectManager eine neue Instanz vom Typ Object zurückgeben soll, muss die Methode auch entsprechend aussehen, also z.B. CreateObject oder CreateNewObject oder ähnlich.

  2. #2
    Dito mit kyuu. Objective-C hat auch keinen new-Operator und Klassen haben oft mehrere Konstruktoren mit verschiedenen Namen. Konventionen helfen hier.

    Grundlegenderweise allokiert man ein Objekt so: NSString* foo = [NSString alloc]; (Der NS-Präfix identifiziert die Klasse als Teil der Standardbibliothek und ist kurz für "NeXTStep".)
    Die so erzeugte Instanz muß man dann noch initialisieren. Im einfachsten Fall sieht das so aus: [foo init];
    Wenn man mit Parametern initialisieren will, dann muß man eine entsprechende Funktion dafür bereitstellen: [foo initWithString:someString];

    Jetzt ist es umständlich, immer NSString* foo = [[NSString alloc] initWithString:someString]; zu schreiben, also gibt es für so etwas statische Wrapper. Mit denen sieht das dann so aus: NSString* foo = [NSString stringWithString:someString];

    Jeder Obj-C-Entwickler erkennt sofort, daß initWithFoo:bar: das Objekt mit einem foo und einem bar initialisiert oder daß [Foo foo] eine statische Methode ist, die ein Foo allokiert und initialisiert. Schlicht, weil die Stilrichtlinien der Sprache und alle sinnvollen Codebeispiele (vor Allem natürlich die ganze API) einem genau das vorleben.

    Letztenendes ist das auch nur eine Konvention, aber es ist eine, die den Code schön lesbar hält.

  3. #3
    Zitat Zitat von Kyuu Beitrag anzeigen
    Ruby hat auch keinen new-Operator und kann ohne Präfixe auskommen. ^^
    Du kämpfst auf verlorenem Posten, weil du einen Designfehler zu verteidigen versuchst.
    Verloren ja, aber Designfehler? Ansichtssache. z.B. erkenne ich bei Objectiv-C nicht im geringsten was passiert, da es für meine Verhältnise oder Vorstellungen einfach viel zu kryptisch ist.

    Zitat Zitat von Jesus_666
    Jeder Obj-C-Entwickler erkennt sofort, daß initWithFoo:bar: das Objekt mit einem foo und einem bar initialisiert oder daß [Foo foo] eine statische Methode ist, die ein Foo allokiert und initialisiert.
    Aber eben nur die erkennen es. Wenn man mal ganz ehrlich ist, so kann man nicht darauf schließen wenn man [[NSString alloc] initWithString:someString]; sieht, dass dort etwas erzeugt wird. Designfehler? Eben Ansichtssache.

    Zitat Zitat von Kyuu
    Ja, es wäre besser lesbar. ^^ Ob es vernachläsigbar ist, oder nicht, soll jeder selbst entscheiden, aber einen Buchstaben weniger lesen zu müssen, auf den man sowieso verzichten kann, ist definitiv ein Gewinn.
    Ein Buchstabe?

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •