2012-07-13 6 views
29

Czytam książkę - Big Nerd Ranch iOS Programming. Mówi, że notacja kropkowa nie jest zalecana, ponieważ zaciemnia kod. Oglądam jednocześnie kurs Stanforda dla programowania w systemie iOS, w którym on intensywnie używa notacji kropkowej. Co byś polecił? Osobiście opieram się na notacji nawiasów.Co jest preferowane w notacji kropkowej Objective-c lub notacji nawiasu kwadratowego?

Proszę wyjaśnić, jak ukryć ten kod w notacji nawiasów?

self.display.text = [self.display.text stringByAppendingString:digit]; 

Jak rozumiem powinno być:

[[self display] setText]:[[[self display] text] stringByAppendingString:digit]; 

Czy jest to prawidłowe?

+1

Jest to głównie kwestia osobistych preferencji. – omz

Odpowiedz

46

Jest to kwestia osobistego wyboru. Są tacy, którzy twierdzą, że notacja kropkowa sprawia, że ​​nie jest jasne, że wiadomości są wysyłane (metody są wywoływane), ponieważ wygląda to tak, jak dostęp do elementu struktury w stylu C. Inną argumentacją jest to, że notacja kropkowa jest łatwiejsza do wpisania, łatwiejsza do odczytania i bardziej zwięzła.

Jako osoba, która pisze Objective-C od czasów, gdy wprowadzono notację kropkową (w Objective-C 2.0), rozumiem argumenty po obu stronach, ale wolę sam używać notacji kropkowej. Mimo to uważam, że ważne jest, aby osoby zaczynające od Objective-C zrozumiały, że składnia notacji kropek jest konwertowana na standardowe wywołania metod dostępu podczas kompilacji. Myślę, że autorzy książki "Big Nerd Ranch" prawdopodobnie mają podobną postawę i to duża część dlaczego zdecydowali się na użycie notacji nawiasów w książce.

Krótko mówiąc, rób to, co lubisz najbardziej. Oba są ważne, a wybór między nimi jest zasadniczo kwestią stylu. Bez względu na to, który wybierzesz, upewnij się, że rozumiesz, że oba style tworzą równoważny skompilowany kod.

EDYCJA: Zapomniałem odpowiedzieć na pytanie dotyczące konwersji notacji kropek na składnię nawiasów. Jesteś blisko, ale to, co napisałeś, jest złe i nie skomplikuje się. Powinno to być: [[self display] setText:[[[self display] text] stringByAppendingString:digit]]. Gdybym pisania bym podzielić ją na dwie linie (dobrze, naprawdę bym użyć notacji kropka):

NSString *stringWithDigit = [[[self display] text] stringByAppendingString:digit]; 
[[self display] setText:stringWithDigit]; 

EDIT 2: Minęło ponad 3 lata odkąd napisał tę odpowiedź. Właśnie chciałem zauważyć, że w dzisiejszych czasach znacznie więcej klas klas Apple miało rzeczy, które wcześniej były zwykłymi metodami konwertowanymi na @properties (np. -[NSArray count]) prawdopodobnie dla lepszego interakcji Swift. Doprowadziło to do tego, że używam notacji kropkowej jeszcze bardziej liberalnie, niż kiedyś.

+7

+1, jako zwykły użytkownik Obj-C nie miałem pojęcia, że ​​mogę zastąpić 10 milionów nawiasów kilkoma punktami. W większości przypadków zakładałem, że mają dostęp do struct. – user7116

+0

@Andrew Madsen to kod, który zacytowałem poprawnie? Wspornik jeden. – Dvole

+0

Niestety, nie odpowiedziałem na tę część twojego pytania! Edytowałem swoją odpowiedź. –

8

Oto moja opinia:

Zawsze należy użyć notacji dot gdy masz do czynienia z właściwościami. Nie tylko jest to szybsze w pisaniu (self.foo ma mniej znaków niż [short foo]), ale co ważniejsze, ułatwia zrozumienie przykutych wiadomości. Na przykład:

self.myTextField.text.length

jest łatwiejsza do zrozumienia niż

[[[self myTextField] text] length]

Dodatkowo sprawia, że ​​mniej prawdopodobne, że będziesz bałagan interpunkcji (upewniając się, że masz prawidłową liczbę nawiasów jest często bólem).

Jednak, jak stwierdzili inni, ostatecznie jest to osobista opinia.

+12

Zabawne, jednak, 'length' nie jest' @ własnością' na 'NSString'. ;) – bbum

+3

Co ciekawe, ten sam przykład łańcuchowych właściwości jest zwykle używany do wskazania, że ​​notacja nawiasu daje lepszą widoczność tego, co naprawdę się dzieje. – Munhitsu

+2

Zgadzam się, ale wtedy musimy dowiedzieć się, która właściwie jest właściwością, która jest w rzeczywistości komunikatem – onmyway133

6

Wiem, że to stary post, ale chciałbym dodać bardziej nowoczesną odpowiedź.

Po wydaniu szybkiej i zbliżającej się śmierci naszego ulubionego języka, preferencja powinna skłaniać się ku notacji kropkowej. Wszystkie środowiska iOS zaktualizowały swój interfejs API, aby ułatwić notowanie kropek (preferując właściwości readonly w nagłówku do pobierających). To sprawia, że ​​ostateczne tłumaczenie staje się bardziej płynne.

Aby było jasne, preferuj właściwości dla instancji, w których ujawniasz programy pobierające i/lub ustawiające. Na szczęście Xcode modern objective-c migration tool zrobi to za ciebie.

+0

Można śmiało argumentować dokładnie odwrotnie: użycie nawiasów w Objective-C łatwiej rozróżnić dwa języki. Wciąż jest to w dużej mierze kwestia osobistego wyboru, ale nie widzę powodu, aby preferować notację kropkową w Obj-C tylko dlatego, że jest używany w Swift. Obj-C to inny język; nie przekształca się w Swifta i nie ma sensu, by twój kod Obj-C był bardziej Swift-y. – Caleb

+1

@ Calb, więc sugerujesz, że ignorujemy szybko i zachowujemy starą, nawiasową, ciężką składnię C celu? Pomimo faktu, że wszystkie struktury iOS przechodzą na właściwości kropek? –

+0

Nie widzę powodu, dla którego chciałbyś zrobić wszystko, aby "rozróżnić" kod –