2013-10-04 27 views
13

uderzę ten mały smakołyk podczas przeglądania konwencje kod Java:„Stałe ANSI” Java

Nazwy zmiennych zadeklarowanych stałych klas i stałych ANSI powinny być wielkie litery ze słów oddzielonych podkreślenia („_”). (ANSI stałe należy unikać, w celu ułatwienia debugowania.)

(Od here.)

Jakie są te "Stałe ANSI" Ten dokument mówi? I jak utrudniają debugowanie?

Tekst sprawia, że ​​brzmi to tak, jakby istniała dychotomia między "zmiennymi zadeklarowanymi stałymi klas" (które interpretuję jako zwykłe zmienne static final) i tymi "stałymi ANSI", ale nie jestem świadomy żadnego sposobu deklarowania stałych w Javie, inny niż uczynienie ich zmiennymi static final.

+1

to interesujące pytanie. Ciekawi mnie twoja myśl o mojej odpowiedzi. Poza tym zdarzyło mi się pracować w Oracle i mogłem sprawdzić, czy któryś z oryginalnych autorów wciąż tu jest, jeśli szukasz bardziej wiarygodnej odpowiedzi. – aioobe

Odpowiedz

5

Jedynymi odniesieniami w Internecie na temat stałych ANSI są fora, na których ludzie, którzy przeczytali konwencje nazewnictwa, zadają to samo pytanie. Wydaje się, że termin ten został wymyślony przez osobę, która napisała dokument, i musiałbyś zapytać ich, co mieli na myśli.

ANSI jest krajowym organem normalizacyjnym w Stanach Zjednoczonych, znanym na przykład ze standardu zestawu znaków ASCII i standardu języka ANSI C. ANSI jest również tym, co Microsoft Windows nazywa domyślnym kodowaniem znaków ASCII w regionie. Możliwe, że autor odwoływał się do literałów ciągów.

+0

* "Możliwe, że autor odnosił się do literałów ciągów znaków." * - To mało prawdopodobne. Literały napisów w języku Java nie są kodami ASCII, lecz mają format UTF-16. – aioobe

0

bym go oczekiwać ma coś wspólnego z inicjalizatorów statycznych lub non-kompilacji stałe czasowe, ale ja naprawdę nie wiem (I został googling dla tego terminu w konwencjach kodowych i ten przyniósł mi tutaj :)

public class TestClass 
{ 
    final static Object ANSI_CONSTANT; 
    static { ANSI_CONSTANT = new Object(); 
} 
5

one najprawdopodobniej odnosi się do stałych ANSI C defined as follows

W stałych ANSI C można zdefiniować na dwa sposoby: poprzez zestawienie #define i poprzez zastosowanie modyfikatora const. Na przykład, poniższe dwa oświadczenia są równoważne:

#define LENGTH 10  /* Length of the square in inches */ 

const int length = 10; /* Length of the square in inches */ 

Teraz istnieją oczywiście żadne stałe C w Javie, ponieważ Java nie jest C :-) (nie jest to najdziwniejsza część oficjalnych standardy kodowania, ale dygoczę).

Dlaczego więc napisali stałe ANSI? Jest to najprawdopodobniej wygodny sposób na odnoszenie się do końcowych prymitywów i niezmiennych obiektów. Pamiętaj, że w C pola const struct nie mogą być aktualizowane po inicjalizacji i nie ma odpowiadającego Javy terminu dla takiej "stałej" (final nie wychwytuje bardzo dobrze pojęcia niezmienności).

+0

Dzięki za odpowiedź, ale tak naprawdę to tylko spekulacja; Miałem nadzieję na bardziej wiarygodną odpowiedź. Ponadto, wydaje mi się, że dość naciągnięto by powiedzieć, że ktoś mógłby nazywać "C" jako "ANSI", ale kto wie. :) – Dolda2000

+2

Dobrze. Znalazłem [starszą wersję dokumentu] (http://www.oracle.com/technetwork/java/codeconventions-150003.pdf), który (przypadkowo?) ma w sobie kod C (tuż nad częścią stałą ANSI). Więc nie powiedziałbym, że rozciągnięcie do C jest * to * daleko :-) Ale jestem też ciekawy tego i spróbuję skontaktować się z autorami. Zaktualizuję. – aioobe