GeoSoft - Java Programming Style Guidelines: Difference between revisions

14.11.2025 Prusac | 17.11.2025

No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{abstract|min=9|txt=DepSeek prevod ''Java Programming Style Guidelines'' sa sajta https://geosoft.no/javastyle.html}}
{{abstract|min=9|txt=DepSeek prevod ''Java Programming Style Guidelines'' sa sajta https://geosoft.no/javastyle.html
 
 
Ovde je 30 zapovesti od ukupno 97 - samo ono što se odnosi na '''Naming'''.}}


__NOTOC__
__NOTOC__


<div class="zapovesti">
<div class="zapovesti">
<h5>1. Imena koja predstavljaju pakete pišu se isključivo malim slovima.</h5>
<h4>1. Imena koja predstavljaju pakete pišu se isključivo malim slovima.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
mypackage, com.company.application.ui
mypackage, com.company.application.ui
Line 12: Line 15:


<div class="zapovesti">
<div class="zapovesti">
<h5>
<h4>
2. Imena koja predstavljaju tipove (types) moraju biti imenice napisana u PascalCase.
2. Imena koja predstavljaju tipove (types) moraju biti imenice napisana u PascalCase.
</h5>
</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
Line, AudioSystem
Line, AudioSystem
Line 46: Line 49:


<div class="zapovesti">
<div class="zapovesti">
<h5>
<h4>
5. Imena koja predstavljaju metode - glagol ili glagolska fraza u formatu camelCase.
5. Imena koja predstavljaju metode - glagol ili glagolska fraza u formatu camelCase.
</h5>
</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
getName(), computeTotalWidth()
getName(), computeTotalWidth()
Line 56: Line 59:


<div class="zapovesti">
<div class="zapovesti">
<h5>
<h4>
6. Skraćenice i akronime ne treba pisati velikim slovima kada se koriste kao ime.
6. Skraćenice i akronime ne treba pisati velikim slovima kada se koriste kao ime.
</h5>
</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
exportHtmlSource();
exportHtmlSource();
Line 69: Line 72:


<div class="zapovesti">
<div class="zapovesti">
<h5>
<h4>
7. Privatni članovi klase treba da imaju sufiks donje crte.  
7. Privatni članovi klase treba da imaju sufiks donje crte.  
</h5>
</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
class Person
class Person
Line 101: Line 104:


<div class="zapovesti">
<div class="zapovesti">
<h5>
<h4>
8. Generičke promenljive treba da imaju isto ime kao njihov tip.
8. Generičke promenljive treba da imaju isto ime kao njihov tip.
</h5>
</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">


Line 127: Line 130:


<div class="zapovesti">
<div class="zapovesti">
<h5>9. Svi nazivi moraju biti na engleskom.</h5>
<h4>9. Svi nazivi moraju biti na engleskom.</h4>


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.
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.
Line 133: Line 136:


<div class="zapovesti">
<div class="zapovesti">
<h5>10. Promenljive sa velikim opsegom treba da imaju duga imena, promenljive sa malim opsegom mogu imati kratka imena.</h5>
<h4>10. Promenljive sa velikim opsegom treba da imaju duga imena, promenljive sa malim opsegom mogu imati kratka imena.</h4>


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`.
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`.
Line 139: Line 142:


<div class="zapovesti">
<div class="zapovesti">
<h5>11. Ime objekta je implicitno i treba ga izbegavati u nazivu metode.</h5>
<h4>11. Ime objekta je implicitno i treba ga izbegavati u nazivu metode.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
line.getLength();  // <span class="pogresno">Pogrešno: line.getLineLength();</span>
line.getLength();  // <span class="pogresno">Pogrešno: line.getLineLength();</span>
Line 145: Line 148:
Ovo drugo može izgledati prirodno u deklaraciji klase, ali se u upotrebi pokazalo suvišnim, kao što je prikazano u primeru.
Ovo drugo može izgledati prirodno u deklaraciji klase, ali se u upotrebi pokazalo suvišnim, kao što je prikazano u primeru.
</div>
</div>


<div class="zapovesti">
<div class="zapovesti">
<h5>12. Termini get/set moraju se koristiti gde se atributu direktno pristupa.</h5>
<h4>12. Termini get/set moraju se koristiti gde se atributu direktno pristupa.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
employee.getName();<br>
employee.getName();<br>
Line 160: Line 162:


<div class="zapovesti">
<div class="zapovesti">
<h5>13. is- prefiks treba koristiti za logičke (boolean) promenljive i metode.</h5>
<h4>13. is- prefiks treba koristiti za logičke (boolean) promenljive i metode.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
isSet, isVisible, isFinished, isFound, isOpen
isSet, isVisible, isFinished, isFound, isOpen
Line 179: Line 181:


<div class="zapovesti">
<div class="zapovesti">
<h5>14. Termin ''compute'' može se koristiti u metodima gde se nešto izračunava.</h5>
<h4>14. Termin ''compute'' može se koristiti u metodima gde se nešto izračunava.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
valueSet.computeAverage();<br>
valueSet.computeAverage();<br>
Line 188: Line 190:


<div class="zapovesti">
<div class="zapovesti">
<h5>15. Termin ''find'' može se koristiti u metodima gde se nešto traži.</h5>
<h4>15. Termin ''find'' može se koristiti u metodima gde se nešto traži.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
vertex.findNearestVertex();<br>
vertex.findNearestVertex();<br>
Line 198: Line 200:


<div class="zapovesti">
<div class="zapovesti">
<h5>16. Termin ''initialize'' može se koristiti gde se uspostavlja objekat ili koncept.</h5>
<h4>16. Termin ''initialize'' može se koristiti gde se uspostavlja objekat ili koncept.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
document.initializeFontSet();
document.initializeFontSet();
Line 206: Line 208:


<div class="zapovesti">
<div class="zapovesti">
<h5>17. Imena komponenti korisničkog interfejsa treba da imaju sufiks tipa elementa.</h5>
<h4>17. Imena komponenti korisničkog interfejsa treba da imaju sufiks tipa elementa.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
widthScale, nameTextField, leftScrollbar, mainPanel, fileToggle, minLabel, printerDialog
widthScale, nameTextField, leftScrollbar, mainPanel, fileToggle, minLabel, printerDialog
Line 214: Line 216:


<div class="zapovesti">
<div class="zapovesti">
<h5>18. Oblik množine treba koristiti za imena koja predstavljaju kolekciju objekata.</h5>
<h4>18. Oblik množine treba koristiti za imena koja predstavljaju kolekciju objekata.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
Collection<Point> points;<br>
Collection<Point> points;<br>
Line 223: Line 225:


<div class="zapovesti">
<div class="zapovesti">
<h5>19. n- prefiks treba koristiti za promenljive koje predstavljaju više objekata.</h5>
<h4>19. n- prefiks treba koristiti za promenljive koje predstavljaju više objekata.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
nPoints, nTables
nPoints, nTables
Line 233: Line 235:


<div class="zapovesti">
<div class="zapovesti">
<h5>20. Nikakav sufiks ne treba koristiti za promenljive koje predstavljaju broj entiteta.</h5>
<h4>20. Nikakav sufiks ne treba koristiti za promenljive koje predstavljaju broj entiteta.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
tableNo, employeeNo
tableNo, employeeNo
Line 243: Line 245:


<div class="zapovesti">
<div class="zapovesti">
<h5>21. Promenljive iteratora treba nazvati `i`, `j`, `k` itd.</h5>
<h4>21. Promenljive iteratora treba nazvati `i`, `j`, `k` itd.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">


Line 264: Line 266:


<div class="zapovesti">
<div class="zapovesti">
<h5>22. Imena komplemenata moraju se koristiti za komplementarne entitete.</h5>
<h4>22. Imena komplemenata moraju se koristiti za komplementarne entitete.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
get/set, add/remove, create/destroy, start/stop, insert/delete,<br>
get/set, add/remove, create/destroy, start/stop, insert/delete,<br>
Line 274: Line 276:


<div class="zapovesti">
<div class="zapovesti">
<h5>23. Skraćenice u imenima treba izbegavati.</h5>
<h4>23. Skraćenice u imenima treba izbegavati.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
computeAverage();              // <span class="pogresno">Pogrešno: compAvg();</span><br>
computeAverage();              // <span class="pogresno">Pogrešno: compAvg();</span><br>
Line 303: Line 305:


<div class="zapovesti">
<div class="zapovesti">
<h5>24. Negirana imena logičkih promenljivih moraju se izbegavati. </h5>
<h4>24. Negirana imena logičkih promenljivih moraju se izbegavati. </h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
bool isError; // <span class="pogresno">Pogrešno: isNoError</span><br>
bool isError; // <span class="pogresno">Pogrešno: isNoError</span><br>
Line 312: Line 314:


<div class="zapovesti">
<div class="zapovesti">
<h5>25. Povezane konstante (final promenljive) treba da imaju zajednički prefiks imena tipa.</h5>
<h4>25. Povezane konstante (final promenljive) treba da imaju zajednički prefiks imena tipa.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
final int COLOR_RED  = 1;<br>
final int COLOR_RED  = 1;<br>
Line 334: Line 336:


<div class="zapovesti">
<div class="zapovesti">
<h5>26. Klase izuzetaka treba da imaju sufiks ''Exception''. </h5>
<h4>26. Klase izuzetaka treba da imaju sufiks ''Exception''. </h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
class AccessException extends Exception
class AccessException extends Exception
Line 348: Line 350:


<div class="zapovesti">
<div class="zapovesti">
<h5>27. Podrazumevane implementacije interfejsa mogu se prefiksovati sa ''Default''. </h5>
<h4>27. Podrazumevane implementacije interfejsa mogu se prefiksovati sa ''Default''. </h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
class DefaultTableCellRenderer
class DefaultTableCellRenderer
Line 364: Line 366:


<div class="zapovesti">
<div class="zapovesti">
<h5>28. Singleton klase treba da vraćaju svoju jedinu instancu kroz metodu ''getInstance''.</h5>
<h4>28. Singleton klase treba da vraćaju svoju jedinu instancu kroz metodu ''getInstance''.</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
public final class UnitManager
public final class UnitManager
Line 394: Line 396:


<div class="zapovesti">
<div class="zapovesti">
<h5>29. Klase koje kreiraju instance u ime drugih (fabrike) to mogu učiniti kroz metodu ''new[ClassName]''</h5>
<h4>29. Klase koje kreiraju instance u ime drugih (fabrike) to mogu učiniti kroz metodu ''new[ClassName]''</h4>
<div class="zapovesti-kod">
<div class="zapovesti-kod">
public class PointFactory
public class PointFactory
Line 414: Line 416:


<div class="zapovesti">
<div class="zapovesti">
<h5>30. Funkcije (metode koje vraćaju objekat) treba imenovati prema onome što vraćaju, a procedure (void metode) prema onome što rade.</h5>
<h4>30. Funkcije (metode koje vraćaju objekat) treba imenovati prema onome što vraćaju, a procedure (void metode) prema onome što rade.</h4>
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.
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.
</div>
</div>

Latest revision as of 08:17, 17 November 2025


9 min
DepSeek prevod Java Programming Style Guidelines sa sajta https://geosoft.no/javastyle.html


Ovde je 30 zapovesti od ukupno 97 - samo ono što se odnosi na Naming.


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;

14. Termin compute može se koristiti u metodima gde se nešto izračunava.

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.