Tipovi dokumenata i uputstva za autore
| Privremena stranica za svakojako eksperimentisanje. Biće obrisana uskoro. |
15:11, 17 November 2025 (UTC)
12:36, 17 November 2025 (UTC)
Prusac (talk) 12:36, 17 November 2025 (UTC)
Prusac (talk)
Press F1 to continue
Press F1 to continue
Press F1 to continue
Please press Ctrl + Shift + R to re-render an MDN page.
help my-command
Ctrl+N keyboard shortcut.
⇧ Shift
⌘ Command
⌥ Option
Tab ↹
⊞
Please press Ctrl + Shift + R to re-render an MDN page.
help my-command
Ctrl+N keyboard shortcut.
⇧ Shift
⌘ Command
⌥ Option
Tab ↹
⊞
Enter ↵
Alt
← ↓ ↑ →
Esc
public final class UnitManager
{
private final static UnitManager instance_ = new UnitManager();
private UnitManager()
{
:
}
public static UnitManager getInstance() // NOT: get() or instance() or unitManager() etc.
{
return instance_;
}
}
Google Java Style Guide (5 Naming)
1 Imenovanje
1.1 Pravila zajednička za sve identifikatore
Identifikatori koriste samo ASCII slova i cifre, a u malom broju slučajeva navedenih ispod, donje crte. Dakle, svaki važeći naziv identifikatora odgovara regularnom izrazu \w+.
U Google stilu, ne koriste se posebni prefiksi ili sufiksi. Na primer, sledeći nazivi nisu u Google stilu: name_, mName, s_name i kName.
1.2 Pravila prema tipu identifikatora
1.2.1 Nazivi paketa i modula
Nazivi paketa i modula koriste samo mala slova i cifre (bez donjih crti). Uzastopne reči se jednostavno spajaju. Na primer, com.example.deepspace, a ne com.example.deepSpace ili com.example.deep_space.
1.2.2 Nazivi klasa
Nazivi klasa pišu se u UpperCamelCase stilu.
Nazivi klasa su obično imenice ili imenske fraze. Na primer, Character ili ImmutableList. Nazivi interfejsa mogu takođe biti imenice ili imenske fraze (na primer, List), ali mogu ponekad biti i pridevi ili prislovne fraze (na primer, Readable).
Ne postoje specifična pravila ili čak utvrđene konvencije za imenovanje tipova anotacija.
Test klasa ima naziv koji se završava sa Test, na primer, HashIntegrationTest. Ako obuhvata jednu klasu, njen naziv je naziv te klase plus Test, na primer, HashImplTest.
1.2.3 Nazivi metoda
Nazivi metoda pišu se u lowerCamelCase stilu.
Nazivi metoda su obično glagoli ili glagolske fraze. Na primer, sendMessage ili stop.
Donje crte mogu se pojaviti u nazivima JUnit test metoda kako bi se razdvojile logičke komponente naziva, pri čemu je svaka komponenta napisana u lowerCamelCase stilu, na primer, transferMoney_deductsFromSource. Ne postoji jedan ispravan način za imenovanje test metoda.
1.2.4 Nazivi konstanti
Nazivi konstanti koriste UPPER_SNAKE_CASE: sva slova su velika, a svaka reč je odvojena od sledeće jednonom donjom crtom. Ali, šta je tačno konstanta?
Konstante su static final polja čiji je sadržaj duboko nepromenljiv i čije metode nemaju uočljive sporedne efekte. Primeri uključuju primitive, stringove, klase nepromenljivih vrednosti i sve što je postavljeno na null. Ako se bilo koje uočljivo stanje instance može promeniti, to nije konstanta. Sama namera da se objekat nikada ne menja nije dovoljna. Primeri:
```java // Konstante static final int NUMBER = 5; static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann"); static final Map<String, Integer> AGES = ImmutableMap.of("Ed", 35, "Ann", 32); static final Joiner COMMA_JOINER = Joiner.on(','); // jer je Joiner nepromenljiv static final SomeMutableType[] EMPTY_ARRAY = {};
// Nisu konstante static String nonFinal = "non-final"; final String nonStatic = "non-static"; static final Set<String> mutableCollection = new HashSet<String>(); static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable); static final ImmutableMap<String, SomeMutableType> mutableValues =
ImmutableMap.of("Ed", mutableInstance, "Ann", mutableInstance2);
static final Logger logger = Logger.getLogger(MyClass.getName()); static final String[] nonEmptyArray = {"these", "can", "change"}; ```
Ovi nazivi su obično imenice ili imenske fraze.
1.2.5 Nazivi polja koja nisu konstante
Nazivi polja koja nisu konstante (static ili drugačija) pišu se u lowerCamelCase stilu.
Ovi nazivi su obično imenice ili imenske fraze. Na primer, computedValues ili index.
1.2.6 Nazivi parametara
Nazivi parametara pišu se u lowerCamelCase stilu.
Treba izbegavati nazive parametara sa jednim znakom u javnim metodama.
1.2.7 Nazivi lokalnih promenljivih
Nazivi lokalnih promenljivih pišu se u lowerCamelCase stilu.
Čak i kada su final i nepromenljive, lokalne promenljive se ne smatraju konstantama i ne treba ih oblikovati kao konstante.
1.2.8 Nazivi tipskih promenljivih
Svaka tipska promenljiva se imenuje na jedan od dva načina:
- Jedno veliko slovo, opciono praćeno jednom cifrom (kao što su E, T, X, T2)
- Naziv u obliku koji se koristi za klase (vidi odeljak 1.2.2, Nazivi klasa), praćen velikim slovom T (primeri: RequestT, FooBarT).
1.3 Camel case: definicija
Ponekad postoji više razumnih načina za pretvaranje engleske fraze u camel case, kao na primer kada su prisutni akronimi ili neobične konstrukcije poput "IPv6" ili "iOS". Da bi se poboljšala predvidljivost, Google Style određuje sledeću (gotovo) determinističku šemu.
Polazeći od proznog oblika naziva:
1. Pretvorite frazu u običan ASCII i uklonite sve apostrofe. Na primer, "Müller's algorithm" može postati "Muellers algorithm". 2. Podelite ovaj rezultat na reči, razdvajajući ih na razmake i preostale interpunkcijske znake (obično crtice).
* Preporuka: ako neka reč već ima uobičajen camel case izgled u opštoj upotrebi, podelite je na njene sastavne delove (npr. "AdWords" postaje "ad words"). Imajte na umu da reč kao što je "iOS" nije zaista u camel case stilu po sebi; ona se protivi svakoj konvenciji, tako da se ova preporuka ne primenjuje.
3. Sada sve napišite malim slovima (uključujući i akronime), zatim samo prvo slovo svake reči napišite velikim:
* ... svake reči, da biste dobili upper camel case, ili * ... svake reči osim prve, da biste dobili lower camel case
4. Konačno, spojite sve reči u jedan identifikator. Imajte na umu da se veliko/malo slovo originalnih reči gotovo u potpunosti zanemaruje.
U veoma retkim okolnostima (na primer, višedeone verzije), možda ćete morati da koristite donje crte za razdvajanje susednih brojeva, pošto brojevi nemaju varijante velikih i malih slova.
Primeri:
| Prozni oblik | Tačno | Netačno | |----------------------------|--------------------|---------------------| | "XML HTTP request" | XmlHttpRequest | XMLHTTPRequest | | "new customer ID" | newCustomerId | newCustomerID | | "inner stopwatch" | innerStopwatch | innerStopWatch | | "supports IPv6 on iOS?" | supportsIpv6OnIos | supportsIPv6OnIOS | | "YouTube importer" | YouTubeImporter | YoutubeImporter* | | "Turn on 2SV" | turnOn2sv | turnOn2Sv | | "Guava 33.4.6" | guava33_4_6 | guava3346 |
\* Prihvatljivo, ali se ne preporučuje.
Napomena: Neke reči su dvosmisleno napisane crticom u engleskom jeziku: na primer, "nonempty" i "non-empty" su oba tačna, tako da su i nazivi metoda checkNonempty i checkNonEmpty podjednako tačni.
1. Imena koja predstavljaju pakete pišu se isključivo malim slovima.
mypackage, com.company.application.ui
Konvencija imenovanja paketa koja se koristi u osnovnim paketima Jave. Početni naziv paketa koji predstavlja naziv domena mora biti malim slovima.
2. Imena koja predstavljaju tipove (types) moraju biti imenice napisana u PascalCase.
Line, AudioSystem
Uobičajena praksa u razvojnoj zajednici Jave i takođe konvencija imenovanja tipova koja se koristi u osnovnim paketima Jave.
3. Imena promenljivih (varijabli) moraju biti u camelCase.
line, audioSystem
Uobičajena praksa u razvojnoj zajednici Jave i takođe konvencija imenovanja promenljivih koja se koristi u osnovnim paketima Jave. Olakšava razlikovanje promenljivih od tipova i efikasno rešava potencijalni sukob imenovanja kao u deklaraciji
Line line;
4. Imena koja predstavljaju konstante (Static final konstante) pišu se velikim slovima u formatu SCREAMING_SNAKE_CASE.
MAX_ITERATIONS, COLOR_RED
Uobičajena praksa u razvojnoj zajednici Jave i takođe konvencija imenovanja koja se koristi u osnovnim paketima Jave.
Generalno, upotreba takvih konstanti treba da bude svedena na minimum.
5. Imena koja predstavljaju metode - glagol ili glagolska fraza u formatu camelCase.
getName(), computeTotalWidth()
Uobičajena praksa u razvojnoj zajednici Jave i takođe konvencija imenovanja koja se koristi u osnovnim paketima Jave. Ovo je identično imenovanju promenljivih, ali metode u Javi se već mogu razlikovati od promenljivih po njihovom specifičnom obliku.
6. Skraćenice i akronime ne treba pisati velikim slovima kada se koriste kao ime.
exportHtmlSource();
// Pogrešno: exportHTMLSource();
readJsonFile(); // Pogrešno: readJSONFile();
Korišćenje svih velikih slova za osnovni naziv će dovesti do sukoba sa gore navedenim konvencijama imenovanja. Promenljiva ovog tipa bi morala da se zove `jSON`, `hTML` itd., što očigledno nije veoma čitko. Još jedan problem je ilustrovan u gornjim primerima: kada je ime povezano sa drugim, čitkost je ozbiljno smanjena. Reč koja sledi nakon akronima ne ističe se kao što bi trebalo.
7. Privatni članovi klase treba da imaju sufiks donje crte.
class Person
{
private String name_;
:
}
Osim svog imena i tipa, opseg člana je njegova najvažnija karakteristika. Označavanje opsega klase korišćenjem donje crte olakšava razlikovanje članova klase od lokalnih privremenih promenljivih. Ovo je važno jer se članovi smatraju značajnijim od argumenata metoda i promenljivih i programer bi trebalo da im posvećuje posebnu pažnju.
Nus-pojava konvencije imenovanja sa donjom crtom je to što lepo rešava problem pronalaženja razumnih imena promenljivih za setter metode:
void setName(String name)
{
name_ = name;
}
Pitanje je da li donja crta treba da bude dodata kao prefiks ili kao sufiks. Obe prakse su uobičajene, ali se preporučuje druga jer najbolje održava čitkost imena.
Treba napomenuti da je identifikacija opsega u promenljivima bila kontroverzna. Međutim, praksa je dobila široko prihvatanje u profesionalnoj razvojnoj zajednici.
8. Generičke promenljive treba da imaju isto ime kao njihov tip.
void setTopic(Topic topic) // Pogrešno: void setTopic(Topic value)
// Pogrešno: void setTopic(Topic aTopic)
// Pogrešno: void setTopic(Topic t)
void connect(Database database) // Pogrešno: void connect(Database db)
// Pogrešno: void connect(Database postgresDB)
Smanjuje složenost smanjenjem broja korišćenih pojmova i imena. Takođe olakšava zaključivanje tipa na osnovu samo imena promenljive. Ako iz nekog razloga ova konvencija ne izgleda prikladna, to je jak pokazatelj da je ime tipa loše izabrano.
Ne-generičke promenljive imaju ulogu. Ove promenljive se često mogu nazvati kombinovanjem uloge i tipa:
Point startingPoint, centerPoint;
Name loginName;
9. Svi nazivi moraju biti na engleskom.
Korišćenje engleskog za imena pojednostavljuje globalnu saradnju, obezbeđuje doslednost između sistema, pojednostavljuje proces uključivanja novih članova, obezbeđuje održavanje i održava tehnički žargon.
10. Promenljive sa velikim opsegom treba da imaju duga imena, promenljive sa malim opsegom mogu imati kratka imena.
Privremene promenljive koje se koriste za privremeno skladištenje ili indekse najbolje je držati kratkim. Programer koji čita takve promenljive treba da može da pretpostavi da se njena vrednost ne koristi van nekoliko linija koda. Uobičajene privremene promenljive za cele brojeve su `i`, `j`, `k`, `m`, `n` a za karaktere `c` i `d`.
11. Ime objekta je implicitno i treba ga izbegavati u nazivu metode.
line.getLength(); // Pogrešno: line.getLineLength();
Ovo drugo može izgledati prirodno u deklaraciji klase, ali se u upotrebi pokazalo suvišnim, kao što je prikazano u primeru.
12. Termini get/set moraju se koristiti gde se atributu direktno pristupa.
employee.getName();
employee.setName(name);
matrix.getElement(2, 4);
matrix.setElement(2, 4, value);
Uobičajena praksa u Java zajednici i konvencija koja se koristi u osnovnim paketima Jave.
13. is- prefiks treba koristiti za logičke (boolean) promenljive i metode.
isSet, isVisible, isFinished, isFound, isOpen
Ovo je konvencija imenovanja za logičke metode i promenljive koja se koristi u osnovnim paketima Jave. Korišćenje is- prefiksa rešava uobičajeni problem odabira loših logičkih imena kao što su status ili flag. isStatus ili isFlag jednostavno ne odgovara, i programer je primoran da izabere smislenija imena.
Setter metode za logičke promenljive moraju imati set- prefiks kao u:
void setFound(boolean isFound);
Postoji nekoliko alternativa is- prefiksu koje bolje odgovaraju u nekim situacijama. To su has-, can- i should- prefiksi:
boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;
valueSet.computeAverage();
matrix.computeInverse();
Daje čitaocu odmah naznaku da je ovo potencijalno dugotrajna operacija, i ako se koristi ponavljano, on može razmotriti keširanje rezultata. Dosledna upotreba termina poboljšava čitkost.
15. Termin find može se koristiti u metodima gde se nešto traži.
vertex.findNearestVertex();
matrix.findSmallestElement();
node.findShortestPath(Node destinationNode);
Daje čitaocu odmah naznaku da je ovo jednostavna metoda pretrage sa minimumom proračuna. Dosledna upotreba termina poboljšava čitkost.
16. Termin initialize može se koristiti gde se uspostavlja objekat ili koncept.
document.initializeFontSet();
Američki oblik initialize treba da bude preferiran u odnosu na engleski initialise. Skraćenica init se mora izbeći.
17. Imena komponenti korisničkog interfejsa treba da imaju sufiks tipa elementa.
widthScale, nameTextField, leftScrollbar, mainPanel, fileToggle, minLabel, printerDialog
Poboljšava čitkost jer ime daje korisniku odmah naznaku tipa promenljive i time dostupnih resursa objekta.
18. Oblik množine treba koristiti za imena koja predstavljaju kolekciju objekata.
Collection<Point> points;
int[] values;
Poboljšava čitkost jer ime daje korisniku odmah naznaku tipa promenljive i operacija koje se mogu izvršiti na njenim elementima.
19. n- prefiks treba koristiti za promenljive koje predstavljaju više objekata.
nPoints, nTables
Ova notacija je preuzeta iz matematike gde je uspostavljena konvencija za označavanje broja objekata.
Imajte u vidu da se num prefiks koristi u osnovnim paketima Jave za ove promenljive. Ovo je verovatno trebalo da bude skraćenica za number of, ali pošto više liči na number to čini ime promenljive čudnim i pogrešnim. Ako je "number of" preferirani izraz, numberOf prefiks može se koristiti umesto samo n. num prefiks se ne sme koristiti.
20. Nikakav sufiks ne treba koristiti za promenljive koje predstavljaju broj entiteta.
tableNo, employeeNo
Ova notacija je preuzeta iz matematike gde je uspostavljena konvencija za označavanje broja entiteta.
Elegantna alternativa je da se takve promenljive prefiksuju sa i: iTable, iEmployee. Ovo ih efikasno čini imenovanim iteratorima.
21. Promenljive iteratora treba nazvati `i`, `j`, `k` itd.
for (Iterator i = points.iterator(); i.hasNext()) {
:
}
for (int i = 0; i < nTables; i++) {
:
}
Ova notacija je preuzeta iz matematike gde je uspostavljena konvencija za označavanje iteratora.
Promenljive imenovane `j`, `k` itd. treba koristiti samo za ugnežđene petlje.
22. Imena komplemenata moraju se koristiti za komplementarne entitete.
get/set, add/remove, create/destroy, start/stop, insert/delete,
increment/decrement, old/new, begin/end, first/last, up/down, min/max,
next/previous, open/close, show/hide, suspend/resume, etc.
Smanjuje složenost simetrijom.
23. Skraćenice u imenima treba izbegavati.
computeAverage(); // Pogrešno: compAvg();
ActionEvent event; // Pogrešno: ActionEvent e;
catch (Exception exception) { // Pogrešno: catch (Exception e) {
Postoje dve vrste reči za razmatranje. Prvo su uobičajene reči navedene u rečniku jezika. One se nikada ne smeju skraćivati. Nikada ne pišite:
cmd umesto command
comp umesto compute
cp umesto copy
e umesto exception
init umesto initialize
pt umesto point
itd.
Zatim postoje fraze specifične za domen koje su prirodnije poznate kroz svoje akronime ili skraćenice. Ove fraze treba držati skraćenim. Nikada ne pišite:
HypertextMarkupLanguage umesto html
CentralProcessingUnit umesto cpu
PriceEarningRatio umesto pe
itd.
24. Negirana imena logičkih promenljivih moraju se izbegavati.
bool isError; // Pogrešno: isNoError
bool isFound; // Pogrešno: isNotFound
Problem nastaje kada se koristi logički operator not i pojavi dvostruka negacija. Nije odmah očigledno šta !isNotError znači.
25. Povezane konstante (final promenljive) treba da imaju zajednički prefiks imena tipa.
final int COLOR_RED = 1;
final int COLOR_GREEN = 2;
final int COLOR_BLUE = 3;
Ovo ukazuje da konstante pripadaju zajedno i koji koncept konstante predstavljaju. Alternativa ovom pristupu je da se konstante stave u interfejs, efektivno prefiksujući njihova imena imenom interfejsa:
interface Color
{
int RED = 1;
int GREEN = 2;
int BLUE = 3;
}
26. Klase izuzetaka treba da imaju sufiks Exception.
class AccessException extends Exception
{
:
}
Klase izuzetaka zaista nisu deo glavnog dizajna programa, i imenovanje ih na ovaj način ih ističe u odnosu na druge klase. Ovaj standard se koristi u osnovnim paketima Jave.
27. Podrazumevane implementacije interfejsa mogu se prefiksovati sa Default.
class DefaultTableCellRenderer
implements TableCellRenderer
{
:
}
Nije neuobičajeno kreirati jednostavnu klasnu implementaciju interfejsa koja pruža podrazumevano ponašanje za metode interfejsa. Konvencija prefiksovanja ovih klasa sa Default je usvojena od strane osnovnih paketa Jave.
28. Singleton klase treba da vraćaju svoju jedinu instancu kroz metodu getInstance.
public final class UnitManager
{
private final static UnitManager instance_ = new UnitManager();
private UnitManager()
{
:
}
public static UnitManager getInstance() // NOT: get() or instance() or unitManager() etc.
{
return instance_;
}
}
Uobičajena praksa u Java zajednici, mada je jezgro Jave paketa ne primenjuje dosledno. Gornji raspored je preporučeni šablon.
29. Klase koje kreiraju instance u ime drugih (fabrike) to mogu učiniti kroz metodu new[ClassName]
public class PointFactory
{
public Point newPoint(...)
{
...
}
}
Ukazuje da je instanca kreirana pomoću new unutar fabričke metode i da je konstrukt kontrolisana zamena za new Point().
30. Funkcije (metode koje vraćaju objekat) treba imenovati prema onome što vraćaju, a procedure (void metode) prema onome što rade.
Povećava čitkost. Čini jasnim šta jedinica treba da uradi, a posebno sve stvari koje ne bi trebalo da uradi. Ovo opet olakšava održavanje koda čistim od nuspojava.
> 20 min |
Јавно комунално предузеће „Београдски водовод и канализација" саопштило је да ће данас без воде бити део потрошача у градским општинама Стари град и Сурчин, а сутра, 4. новембра, без воде ће остати део потрошача у градској општини Савски венац. |
☐
➔✔✓✘✖✗
➔✔✓✘✖✗
✅❎
Vreme? |
Obavezno dodati kratki opis sadržaja i vreme {{abstract|txt=vaš tekst|min=koliko minuta}} |
| Element | Idealno (cilj) | Gornja granica | Napomene |
|---|---|---|---|
| Naziv paketa | 1-3 kratka segmenta | 4-5 segmenata | com.balans.auth.services ✅; izbegavati dublje hijerarhije |
| Klasa/Interfejs | ≤ 20-25 karaktera | ≤ 40-50 | AuthenticationService ✅; CgaBulkOperationService ➜ CgaBulkService |
| Metoda | ≤ 20-30 karaktera | ≤ 50-60 | Glagol + objekat: findByUsername, issueFirmToken |
| Varijabla | ≤ 15-20 karaktera | ≤ 30 | Kratko i jasno: attemptCount, accessibleFirms |
| Konstanta | ≤ 25-30 karaktera | ≤ 40-50 | TOKEN_EXPIRY_DURATION, MAX_LOGIN_ATTEMPTS |
| Element | Idealno (cilj) | Gornja granica | Napomene |
|---|---|---|---|
| Naziv paketa | 1-3 kratka segmenta | 4-5 segmenata | com.balans.auth.services ✅; izbegavati dublje hijerarhije |
| Klasa/Interfejs | ≤ 20-25 karaktera | ≤ 40-50 | AuthenticationService ✅; CgaBulkOperationService ➜ CgaBulkService |
| Metoda | ≤ 20-30 karaktera | ≤ 50-60 | Glagol + objekat: findByUsername, issueFirmToken |
| Varijabla | ≤ 15-20 karaktera | ≤ 30 | Kratko i jasno: attemptCount, accessibleFirms |
| Konstanta | ≤ 25-30 karaktera | ≤ 40-50 | TOKEN_EXPIRY_DURATION, MAX_LOGIN_ATTEMPTS |
| Element | Idealno (cilj) | Gornja granica | Napomene |
|---|---|---|---|
| Naziv paketa | 1-3 kratka segmenta | 4-5 segmenata | com.balans.auth.services ✅; izbegavati dublje hijerarhije |
| Klasa/Interfejs | ≤ 20-25 karaktera | ≤ 40-50 | AuthenticationService ✅; CgaBulkOperationService ➜ CgaBulkService |
| Metoda | ≤ 20-30 karaktera | ≤ 50-60 | Glagol + objekat: findByUsername, issueFirmToken |
| Varijabla | ≤ 15-20 karaktera | ≤ 30 | Kratko i jasno: attemptCount, accessibleFirms |
| Konstanta | ≤ 25-30 karaktera | ≤ 40-50 | TOKEN_EXPIRY_DURATION, MAX_LOGIN_ATTEMPTS |
| Element | Idealno (cilj) | Gornja granica | Napomene |
|---|---|---|---|
| Naziv paketa | 1-3 kratka segmenta | 4-5 segmenata | com.balans.auth.services ✅; izbegavati dublje hijerarhije |
| Klasa/Interfejs | ≤ 20-25 karaktera | ≤ 40-50 | AuthenticationService ✅; CgaBulkOperationService ➜ CgaBulkService |
| Metoda | ≤ 20-30 karaktera | ≤ 50-60 | Glagol + objekat: findByUsername, issueFirmToken |
| Varijabla | ≤ 15-20 karaktera | ≤ 30 | Kratko i jasno: attemptCount, accessibleFirms |
| Konstanta | ≤ 25-30 karaktera | ≤ 40-50 | TOKEN_EXPIRY_DURATION, MAX_LOGIN_ATTEMPTS |
| Element | Idealno (cilj) | Gornja granica | Napomene |
|---|---|---|---|
| Naziv paketa | 1-3 kratka segmenta | 4-5 segmenata | com.balans.auth.services ✅; izbegavati dublje hijerarhije |
| Klasa/Interfejs | ≤ 20-25 karaktera | ≤ 40-50 | AuthenticationService ✅; CgaBulkOperationService ➜ CgaBulkService |
| Metoda | ≤ 20-30 karaktera | ≤ 50-60 | Glagol + objekat: findByUsername, issueFirmToken |
| Varijabla | ≤ 15-20 karaktera | ≤ 30 | Kratko i jasno: attemptCount, accessibleFirms |
| Konstanta | ≤ 25-30 karaktera | ≤ 40-50 | TOKEN_EXPIRY_DURATION, MAX_LOGIN_ATTEMPTS |
neki tekst <code> pa opet </code>
| Dodajte naslov prethodne strane | Nepostojeci naslov |