2009-06-20 12 views
10

Objective-C nie ma przestrzeni nazw, a wiele (takich jak CocoaDevCentral's Cocoa Style Guide) zaleca przedrostek nazw klas z inicjałami, aby uniknąć kolizji przestrzeni nazw.Czy kolizje przestrzeni nazw są naprawdę problemem w Objective-C?

Cytując z powyższego linku:

Objective-C nie mają nazw, więc poprzedzić swoje nazwy klas z inicjałami. Pozwala to uniknąć kolizji "przestrzeni nazw ", co jest sytuacją, w której dwie części kodu mają taką samą nazwę , ale robią różne rzeczy.

To ma sens, jak sądzę. Ale szczerze mówiąc, w kontekście stosunkowo niewielkiej aplikacji (powiedzmy, gry na iPhone'a) jest to naprawdę problem? Czy naprawdę powinienem zmienić nazwę MyViewController na ZPViewController? Jeśli nie, to w którym momencie kolizje przestrzeni nazw stają się problemem?

+0

"Objective-C nie ma przestrzeni nazw, dlatego przedrostkiem wpisz nazwy klas inicjałami." Wow, co za niesamowita pomoc dla zespołu. Chciałbym dostać się do Objective-C, ale brak przestrzeni nazw jest całkowicie głupi. –

+1

@Nick Od kiedy napisałem to prawie dwa lata temu opublikowałem pięć aplikacji w sklepie z aplikacjami i nigdy nie miałem tego problemu.Brak przestrzeni nazw naprawdę nie wydaje się być problemem, przynajmniej nie było to dla mnie (odpowiedzi poniżej również w przybliżeniu). – zpasternack

+0

Więc powiedzmy, że masz klasę, która koliduje z inną, czy mimo to możesz wybrać, który z nich chcesz, czy jesteś zmuszony do powrotu i zmiany nazwy? –

Odpowiedz

20

Jeśli piszesz aplikację, która korzysta z niektórych zestawów bibliotek, to już wiesz, jak wygląda twoja przestrzeń nazw i po prostu musisz wybrać nazwy, które nie są w konflikcie z istniejącymi dostępnymi funkcjami.

Jednak, jeśli piszesz bibliotekę do użytku przez inne osoby, powinieneś wybrać dość unikalny prefiks, aby uniknąć kolizji nazw z innymi bibliotekami. Tylko z dwoma znakami nadal mogą występować kolizje nazw, ale częstotliwość zostanie zmniejszona.

+0

"Dwuliterowe prefiksy, takie jak te, są zarezerwowane przez firmę Apple do użytku w klasach frameworka." –

2

Małe aplikacje nie powinny używać wszystkich dobrych nazw, więc nie będą miały problemu z obszarami nazw.

Ale dobrze jest przyzwyczaić się do stylu, w którym języki są na ogół pisane. Ułatwia to czytanie kodu innych osób, a innym czytanie.

Np., Używać zmiennych CamelCase w Javie, ale CamelCase vars w C#, hyphen_separated_names w C, itd

To sprawi, że łatwiej jest uczyć się na dłuższą metę.

0

Przeczytałem (ale nie zweryfikowałem), że Apple ma prywatne klasy w swoich frameworkach, które nie zawierają żadnych prefiksów na nazwach. Jeśli więc nazwy klas aplikacji nie mają prefiksów, ryzykujesz kolizję z nimi.

0

Pracowałem z repozytoriami, w których klasy nie były poprzedzone prefiksem. (Lub tylko niektóre klasy zostały poprzedzone prefiksem).

Jedną z rzeczy, które uważałem za bolesne, jest czasami trudno stwierdzić, czy kod został napisany przez kogoś w firmie lub poza nią. Używanie spójnego prefiksu sprawia, że ​​od razu staje się oczywiste dla kogoś czytającego kod po raz pierwszy.

Należy pamiętać, że kod będzie czytany wielokrotnie częściej niż na piśmie.

Co więcej, może się przydać przy korzystaniu z narzędzi takich jak grep i sed.

Powiązane problemy