2010-01-25 8 views
10

Tutaj http://source.android.com/source/code-style.html#follow-field-naming-conventions stwierdza się, że:Wskazówki dotyczące prywatnego nazywania pól Android są w porządku?

polowe Nazwy

  • niepubliczne, nie-statyczne nazwy pól zacząć m.
  • Nazwy pól statycznych zaczynają się od s.
  • Inne pola rozpoczynają się od małej litery.
  • Publiczne statyczne pola końcowe (stałe) to ALL_CAPS_WITH_UNDERSCORES.

Stwierdza również, że:

Poniższe zasady nie są wytyczne lub zalecenia, ale surowe zasady. Nie wolno lekceważyć zasad, które wymieniamy poniżej, z wyjątkiem tych zatwierdzonych na podstawie potrzeby użycia.

Nie podoba mi się konwencja "m" przed polami prywatnymi lub pakietowymi w klasie. Naprawdę uważam to za mało inspirujące ... to znaczy, jeśli spróbujemy zastosować dobre projekty, niskie sprzężenie klas oznacza posiadanie kilku pól publicznych. właściwie, w moich programach zazwyczaj nie mam pól publicznych, nawet gdy potrzebuję trochę używam programów pobierających i ustawiających ...

Dlaczego więc powinienem być zmuszony do posiadania prawie wszystkich pól w programie z "m"? przed nimi? nie byłoby łatwiej mieć kilka pól publicznych, jeśli są jakieś, z pewnym "g" z przodu czy coś takiego? lub po prostu użyć ustawiających i pobierających, jak sugerują fasola? to sprawia, że ​​mój kod jest trudniejszy do odczytania ...

Ponadto, zgodnie z tymi wskazówkami, lokalne zmienne temp stosowane w tych metodach nie mają ograniczeń, więc można je łatwo pomylić z publicznymi globalnymi polami (również bez ograniczeń). to też uważam za błędne, ponieważ jest prawdopodobnym źródłem błędów ... Rozumiem, że mam sposób odróżniania od pól, ale prywatne/chronione pola członkowskie są najczęściej używane w aplikacji, nie powinny być mniej "czytelny".

Co myślisz? Czy powinienem przestrzegać wytycznych?

+0

Jednym z powodów, dla których prefiksy takie jak ten często obowiązują, jest zapobieganie ukrywaniu pól elementów. Na przykład często masz parametr konstruktora lub metody ustawiającej, która jest taka sama jak pole członka, jeśli nie masz żadnych prefiksów. W takich przypadkach musisz uzyskać dostęp do pola członka za pomocą "tego". przed nim, gdy jest ukryty. Programiści czasami zapominają "to", co prowadzi do błędów. Prefiks na polach publicznych nie jest tak użyteczny, ponieważ i tak nie ma potrzeby, aby osoba prowadząca znajdowała się na polu publicznym. –

+0

Właściwie wolę prefiks m_ na prywatnych polach, ponieważ ułatwia to czytanie klas. Konwencje te są używane, ponieważ kod jest czytany bardziej niż napisany ... Myślę, że to w Code Complete somwhere? ... –

+0

Zgadzam się z tobą .. Nie podoba mi się konwencja "m" i szczęśliwie jej nie używam – hendrix

Odpowiedz

10

Te wskazówki dotyczące kodowania dotyczą projektu Android Open Source, który jest podstawową platformą Android. Trzeba postępować zgodnie z tymi wytycznymi, jeśli chcesz, aby któryś z twoich kodów został zaakceptowany na platformę główną. Możesz robić, co chcesz w swoich własnych aplikacjach.
Co się tyczy samych wytycznych, uważam je za bardzo rozsądne i podobne do wielu standardów stosowanych w zastosowaniach komercyjnych. Zasadniczo chcesz używać obiektów pobierających i ustawiających w celu uzyskania publicznego dostępu do pola, a nie chcesz mieć globalnych zmiennych publicznych. Tylko globalne publiczne stałe są w porządku.
Więc krótka odpowiedź jest zgodna z nimi dla projektu Open Source, zdecyduj się na ich stosowanie w Twojej aplikacji.

1

Jeśli chodzi o getters \ setters, faktycznie nie zaleca się używania ich w systemie Android.

Znalazłem to na „Projektowanie dla wydajności” strony (sekcja: Unikaj Wewnętrzne pobierające/ustawiające): http://developer.android.com/guide/practices/design/performance.html

Konkluzja, to wnioskujemy, że wyszukiwania instancji pola są bardziej wydajne niż wirtualnych wywołań metod (z powodu optymalizacji w JIT).

Myślę, że będę nadal używać getters \ setters w moim kodzie, ale może to być łatwy sposób na zwiększenie wydajności (szczególnie w przypadku aplikacji, które wykonują wiele operacji na danych).

+3

Ty muszą użyć setter/getters, aby uzyskać dostęp do prywatnego pola obiektu innej klasy. Należy jednak ograniczyć korzystanie z tych metod wewnętrznie. Wewnętrznie, dlaczego miałbyś używać 'name = getName()', bezpośredni dostęp do zmiennej jest bardziej wydajny (name = mName) – Marqs

Powiązane problemy