Effective Javaã®ååšããªãäžçããããIneffective Javaã
æè¿ã¯Javaã§éçºãããšãªããšSpringBootãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãå€ããšæããŸãã
SpringBootã¯æ¬åœã«ããã§ããŠããŸããDIããAutoConfigureãªã©ã³ãŒãã®èšè¿°éãæžããçŽ æŽãããä»çµã¿ãããããçšæãããŠããŸãã
Javaãããç¥ã£ãŠããããã°ã©ããŒã¯ã¢ãŒããã¯ããšããŠãã¬ãŒã ã¯ãŒã¯åšãã®èšèšãå®è£ ãè¡ãããšãå€ãã§ãããããã³ãã¬ãŒãã¡ãœãããã¿ãŒã³ãªã©ã䜿çšããŠã倧éçç£ããããã¢ãŒããã¯ãã£ãäœãäžããŸããããšã¯ãåæ©èœãå®è£ ããããã°ã©ããŒã«ããã³ã¿ããããç»é¢ãæ¥ååŠçããã¬ãŒã ã¯ãŒã¯ã«æ²¿ã圢ã§äœãäžããããŠãããŸãã
ããããæ¥ååŠçã¯åœç¶å¿
èŠã§ããã¿ãªããã®çŸå Žã«ãããŠãããã£ã倧éãã€äžŠè¡ã§æžãããã³ãŒãã®å質ã¯ãããã§ããããïŒ
ç§ã®åšãã§ããã®ãããã®åé¡ãæ±ããŠããŠãããã¯éçºçŸå Žã§æ£ããæ°ã¥ãããšã³ãžãã¢ãå¿
èŠã ãšèãã瀟å
åãã«Javaæè²ãå§ããŸãããæ¬èšäºã¯ãã®æè²äžã®ã³ãŒãã¬ãã¥ãŒã§æ°ã¥ããã**ããã£ããããããããšãçè§£ããŠããªããã ã**ãšããããšããŸãšããŠã¿ãŸããããã°ãèŠã€ãããšãã«ãããã¡ãªãããªãã§ãããªã¯ãœã³ãŒãæžããŠããã®ïŒããšãã管çè
ã®çããã«æè²ãã¬ãã¥ãŒã®å€§åãã«æ°ã¥ããŠè²°ããã°ãšæããŸãããããããããããè·å Žã«ã¯Effective Java/Readable Codeãªã©ã®æžç±ã¯ãªããããã³ãªã被ã£ãŠããŸããããæè²ã¯ãšãŠã倧äºãªã®ã§ãã
ãªãã§ãããã§ããHashMapã䜿ã£ãããããžãã¯äžã«ãã°ãåãã®ã¯ããããããšãç¥ããªãã®ãçç±ã ã£ããããŸãã
Javaæè²ã£ãŠã©ããªã®
2ã¯ãŒã«éå¬ãã
- 2018幎6æ-9æã26åãé±1åãå š16å
- 2018幎11æ-2019幎2æ 15åãé±1åãå š8å
æ¯é±è¬çŸ©ïŒ2æéïŒããŠãæŒç¿ãåºããŠããã«ãªã¯ãšã¹ããããã£ãŠãã¬ãã¥ãŒããŠè¿ããšããæãã§ããè¬çŸ©ã®éã¯Slackã§ãã©ããŒããŠãŸããã
ææã¯ã«ãµã¬ã¢ã«ããã®ææã賌å
¥ããŠå®æœããŸãããäžè¬çãªæžç±è²·ããããã¯é«é¡ã§ãã解説ããé åºãããŸãçµã¿ç«ãŠãããŠããã®ããšãŠãè¯ãã§ããåžžã«ãã¢ãããšãã§ããç°å¢ãªããããã¹ãã¯ãããªããšæããŸãããä»åã®ãããªç€Ÿå
æè²ã ãšããŸãããã£ããšæã£ãŠããŸãã
察象è ã¯ãããªäºº
- Javaãæ¥åã§æžãå§ãã1幎ç®
- å®ã¯JavaãæžããŠãããã©ãšãã3-4幎ç®ããã
- å¥ã®èšèªããJavaã«è»¢åããŠãã10幎ç®ãªã©æ§ã ã§ãã
ããã§ã¯ãã«ãªã¯ãšã¹ãã§èŠããããããã¯ç¥ã£ãŠããã¹ããšããå
容ãäžæçŽ¹ä»ããŸããé äœã¯ç§ã®æèŠã§ãã
ããããªã絶察ç¥ã£ãŠãã§ããšãã人ã¯åšãã®Newbieã«ãã²èããŠã¿ãŠãã ãããããªãã®åšãã«ãå€åããã¯ãã§ããç¿ã£ãŠãªããã®ã¯ç¥ããªããã§ãã
Ineffective Java
é ç®1 toString()ã£ãŠãªã«ïŒ
ãã®ã¡ãœããã®åœ¹å²ãç¥ããªããšãã人ãå€ãã£ãã®ã¯é©ãã§ããã
ãã§ã«toString()ããªããžã§ã¯ãã«å®è£
æžã¿ã§ããã«ãé¢ãããã object.getXXX() + object.getYYY()ãšæžãããã³ãŒããèŠãããšã¯ãªãã§ããããïŒ
ããã¯toString()ã®æå³ãç¥ããªããšããç¶æ³ãè£ã«ãã£ãã®ã§ããçããã®åšãã®è¥æã«ãèããŠã¿ãŠãã ããã
é ç®2 巊蟺ã®åã®å®£èšãåžžã«å³èŸºã®åãšåã
ArrayList<String> list = new ArrayList<>();
ãã¡ããã巊蟺ã¯List<String>ãšããã¹ãã§ããããããããã€ã³ã¿ãŒãã§ãŒã¹ãšãããªã¢ãŒãã£ãºã ãšãããããèæ
®ããªããšå·ŠèŸºã¯å³èŸºãšåãåã§å®£èšããŠããŸããŸãã
ããããç¶æ
ã®äººã«OCPãšããã£ãŠãã¡ãã·ãããã·ãã«ãªããŸãã®ã§ãç¶æ¿->ã€ã³ã¿ãŒãã§ãŒã¹->ã³ã¬ã¯ã·ã§ã³->ããªã¢ãŒãã£ãºã ãšãã颚ã«é ã远ã£ãŠèª¬æããŠãããããšãå¿
èŠã§ãã
ããã ãã§ãå·ŠèŸºãæ£ããèªåã§èããŠå®çŸ©ããããã«ãªãã§ãããã
(巊蟺ãšãå³èŸºãšããšããçšèªãæ£ããã®ãã¯äžæ)
é ç®3 ãšã«ããã©ãããŒã«å€æ
Long.valueOf(Files.size(pathA)).equals(Long.valueOf(Files.size(pathB)));
ã©ããã§ã³ãã£ãŠãããã§ããããããããã¯ãã©ãããŒã«ãããšãªããå®å¿æãåºãã®ãããããŸãããããªããã£ããããªããã£ãã®ãŸãŸæ±ãããšãæ£ããçè§£ããå¿
èŠããããŸãã
ãããçè§£ããããšã§ããªããžã§ã¯ããç¡é§ã«çæããããšãæªæã§ããããšããããããšåŠã¶ããšãã§ããã§ãããã
é ç®4 äžå¿ èŠãªã³ã¡ã³ã
ãããªã³ãŒãèŠãããšãããŸããããEclipseã®èªåçæã³ã¡ã³ããæ®ã£ãŠããã倿°ã®èª¬æãšãã©ãã§ãããã³ã¡ã³ã
åè
ã®ã±ãŒã¹ã¯ããããã³ãŒããæžãã®ã«å¿
æ»éããŠãã³ã¡ã³ããç®ã«å
¥ããªããåŸè
ã¯ã³ã¡ã³ãã¯å€§äºãšããæè²ã ãåããŠæŸçœ®ãããŠè²ã£ãäŸã§ãããã
ããã¯ãã¢ãããªã©ãããŠãããšäžç¬ã§æ°ã¥ããã®ã§ãããããã§ãªãå Žåã¯èª°ã«ãåŠã°ãªãã®ã§ããããã£ãšç¶ããŠãããŸããæ£ããæããŠãããŸããããåºæ¬ãã³ã¡ã³ãã¯èŠããªãããæ¥åçã«ã€ã¬ã®ã¥ã©ãŒãªããšãããå Žåã¯å¿ èŠã ããããããªããšåŸã®ä¿å®ãã§ãŒãºã§ã³ã¡ã³ããããšã§ãã°åºããããããªããããšã
é ç®5 ããifæãããªãã
public boolean isLessThan1KB(String file) throws Exception {
// Pathãªããžã§ã¯ãçæ
Path path = Paths.get(file);
if (Files.size(path) < 1024) {
return true;
} else {
return false;
}
}
ããã¯ãšãŠãå€ãã§ããifæä»¥éã¯ã return Files.size(path) < 1024;ã§æžãæããããŸãã
äžåæžããã³ãŒãã¯åãã°ããã§çµãããšèããå Žåã«ããããæžãæ¹ãå€ãã§ãããªããåé·ã ãªãšæããããã«ã¯ãäžäœè
ã®ã³ãŒãã¬ãã¥ãŒãå¿
é ã§ãã
é ç®6 ãªããæ»ãå€ãèŠãªã
public void delLine(String line) {
lines.remove(lines.indexOf(line));
}
List #removeã¡ãœããã«ã¯æ»ãå€ããããŸããæ»ãå€ãç¡èŠããŠãã®ãŸãŸäœ¿çšããã±ãŒã¹ãæ£èŠãããŸããããã¯ãããäžã®ã©ããã«ããããæžãæ¹ãããã®ãããããŸããã
ãã®è£ã«ã¯åå¿è
ã¯ãšã©ãŒåŠçãèŠæã ãšããããšã倧ãã«ãããŸããäŸå€ããšã©ãŒãã³ããªã³ã°ãªã©ããã®ããããçè§£ãããšèªç¶ãšè§£æ¶ãããŠããã§ãããã
é ç®7 try-with-resourcesã«éŠŽæããªã
ä»ã§ãçŸå Žã®JDKã¯6ã ãšããæ¹ã«å€ãã§ãããã€ãŸã§æã®æžãæ¹ãç¶ãããã§ããããããã¯twrã«é¢ããããforæãStreamãlambdaãªã©å
šãŠã«åãç¶æ³ã§ãããã
Java8ããã¡ããšå匷ãçŽãããšãããããããŸããããJava11ããå§ããæ°äººã«ãšã£ãŠããã®äººéã¯è
åšã§ãããããŸããã
é ç®8 ãã¹ããããã
if(xxx == true) {
//åŠç
} else {
//åŠç
}
å¿
ãããããé¢šã«æžããŠããŸãççé¢ç®ãªããã°ã©ããŒãäžçã«ã¯ã¬ãŒãç¯ãšãããã®ããããã ããšæããŠãããããã¬ãŒãç¯ã䜿ããšãã£ãšãã£ãšã¹ãããªããããšãã»ãšãã©ã
ãã¹ãã ããã®ã³ãŒãã«æ®æ®µãããŸã¿ããŠããããšãåå ã®ïŒã€ãããããäžåãã¹ãæžãããŠãéãããããªããããã§ããããã¯ãã¡ããšã¬ãã¥ãŒããŠããããšäžçºã§çè§£ããŠããããã®ã§ãå³å¹æ§ã¯æ¥µããŠé«ãã
é ç®9 equals()ã®æå³ãããããªã
ããã¯ããããéåžžã«é£ãããJavaäžçŽè
ã§ããšã£ãã«èª¬æãããšèšãããŠãé£ãããããããªãããããã§ããããããããããªããšæããŠãTreeMapãšã䜿ããªãã®ã§ããã ã£ãŠãä»»æã®ãªããžã§ã¯ããæ£ãããœãŒãããããããããªãã®ã§ããããã ããããã€ãHashMapééã«ãªã£ãŠããŸã£ãŠãget()ããŠããããããåããŠããŸãã
equals()ãå®è£
ãããšåœç¶hashCode()ãå®è£
ãããã ããããããªããšãªããããããäºè±¡ãããããçºçãããããã®ããšãæ£ããçè§£ã§ãããšããã®ç解以äžã«ã³ãŒãã¯ããæŽç·Žãããã®ã§ãããããããŸãã« Effective Javaãªã®ã§ãã
é ç®10 ã€ãã¥ãŒã¿ãã«ïŒïŒ
äžå€ãªããžã§ã¯ããç¥ããªããããã¯åçŽããäžçŽãžäžããã®ã«ãšãŠã倧åãªç¥èã§ãããã€ã®ãŸã«ãæœããã°ãæ ¹çµ¶ããããã«ãªããžã§ã¯ãã®ç¶æ ãæšéã§ããèœåããããJavaäžçŽè ãªã®ã ãããšæããŸããã©ãããã°äžå€ãªããžã§ã¯ããäœããã®ãïŒããã¯ã©ããããšãã«äœ¿ãã®ããããããããã°ã¯ã©ã¹èšèšã®å¹ ã倧ããåºããã§ããããéã«ããããããªããšãã€ãŸã§ãéãäžéã®èšèšããã§ããªãã
ããšãã€ãã¥ãŒã¿ãã«ãšçŽæ¥é¢ä¿ãªãã§ãããfinal List<String> stringList; ã®ãããªListãªã®ã«finalãšã¯ã©ãããæå³ããæ£ãã説æã§ããªãã±ãŒã¹ãããã®ã§ãããæ£ããçè§£ããããšã¯è¶
倧äºã
Ineffective JavaããEffective Javaã®ããäžçãž
åçŽããäžçŽãžã®æ¶ãæ©ã®ãããªå
容ãå€ãç»å ŽããŠããŸãããããããã£ãããšã®å€ãã¯Effective Javaãèªãããšã§æé·ããããšãã§ããŸããåçŽè
ã®äººã¯äžçŽè
ã®äººã«ããããªãããšã質åããŸããããäžçŽè
ã®äººã¯åçŽè
ã®äººãèªã£ãŠèŒªèªäŒãéå¬ããŸãããã
Effective Java 3rd Edition
Java8ãåŠã³çŽããªããã¡ãããããã
Javaããã°ã©ããŒãªãç¿åŸããŠãããã Java SE 8 å®è·µããã°ã©ãã³ã°