2013-08-10 11 views
13

Mam mały konflikt ze skuteczną java. Z jednej strony zdecydowanie zachęca do używania ostatecznego modyfikatora. Zachęca również do korzystania z pętli foreach.użyj końcowego wewnątrz a dla każdej pętli

jednak nie widzę żadnego kawałka kodu w dowolnym miejscu, co kody takie jak ten:

for (final element e : list) { 
    // do whatever. 
} 

Jeśli nie oczekuje elementem zmienić następnie za pomocą końcowy wydaje się być dobre. Dlaczego nie jest tak powszechne?

+1

Używam go przez cały czas. Inni nie używają tego, ponieważ mówią, że "zaśmieca kod". Ten typ pętli nazywa się "Enhanced for-loop". – Obicere

+0

Używam go cały czas. Ale zgadzam się z obydwoma obozami. Jeśli naprawdę nie chcesz, aby referencja została ponownie przypisana, użyj "final", kropka. Ale tak naprawdę * to * zaśmieca kod. Widziałem duże fragmenty kodu napisane w sposób * dobry *, ale niestety wygląda zbyt verbose. Niestety nie ma prostej rzeczy, która mogłaby zadowolić oba obozy, o ile oczywiście nie jesteś gotów przenieść się do Scali ...;) –

Odpowiedz

5

Nie jest używany z powodu "szumu kodu".

Ostateczne słowo kluczowe powinno być używane do wszystkich parametrów metod, itp. Itd., Ale tak nie jest, ponieważ podczas gdy jest ono "poprawne", jest ono mniej czytelne.

0

Zasadniczo element byłby ostateczny wewnątrz zakresu pętli for. Nie wiele można tam zyskać.

+0

Jest to całkiem użyteczne w przypadku 'Runnable' i pomaga uniknąć błędów logicznych spowodowanych przez nadpisanie niewłaściwa zmienna. – chrylis

+0

, zwłaszcza w przypadku, gdy "końcowa" zmienna jest używana w pętli "for-each" jako klucz dostępu do kolekcji, do której można zapisać w tym samym czasie w innym wątku. –

7

Zazwyczaj programista opuszcza ustawienia domyślne i dodaje kod tylko wtedy, gdy jest to konieczne. tj. jaki jest najkrótszy kod do napisania jest łatwiejszy. Pomyśl o teatrze wykładowym i proszą cię o podniesienie ręki, jeśli coś zrobisz, a potem poprosią cię o podniesienie ręki, jeśli tego nie zrobisz, połowa pokoju w ogóle nie będzie głosować.

IMHO Wartość domyślna powinna być ostateczna, a dla wartości, które mogą ulec zmianie, potrzebne jest słowo kluczowe var. W ten sposób znacznie więcej pól będzie ostatecznych.

W tym konkretnym przypadku nie dokonuję ostatecznych zmiennych lokalnych, ponieważ metody powinny być na tyle krótkie, aby można było uzasadnić, czy zmienna została zmieniona, czy też nie. Jeśli nie możesz tego łatwo wykonać, twoja pętla/metoda jest zbyt skomplikowana.

W przypadku pól zalecam jednak, aby były one ostateczne, w miarę możliwości, szczególnie jeśli nie są one prywatne, ponieważ nie jest tak łatwo odczytać cały kod, w którym może być używany.

2

Istnieje wiele miejsc, w których można - niektórzy twierdzą, że powinni umieścić ostateczne słowo kluczowe. Typowym przykładem są parametry metody. Spójrz na te fragmenty kodu:

public static long pow_mod(final long base, final long exponent, final long mod) { 
    // body 
} 

Istnieje kolejna konwencja polegająca na łamaniu linii kodu po 80 znakach. Ta deklaracja jeszcze nie jest wcięta (musi być wewnątrz klasy) i jest już dłuższa niż ta kwota. Java jest językiem bardzo gadatliwym, nie ma potrzeby zaśmiecania kodu jeszcze bardziej; zwłaszcza, że ​​nie ma nic do zyskania, dzięki czemu zmienne lokalne są ostateczne.