è¿ãå°æ¥ãJavaèšèªã§æ°ããæ©èœãç»å ŽããŸãããããã®æ©èœã¯ãçŸåšValhallaãPanamaãããã³Loomã®ãããžã§ã¯ãã§åãçµãã§ããŸãã èšèªã®æ¡åŒµã¯ç°¡åãªäœæ¥ã§ã¯ãããŸãããç¹ã«äžäœäºææ§ã«éç¹ã眮ããŠããèšèªã§ã¯ãããŸããã ãããã£ãŠãèšèªã¢ãŒããã¯ãã¯ãJavaãžã®çµ±åãåæ»ã«é²ããããã«ãèç©ãããåºæ¬çãªåé¡ã解決ããå¿
èŠããããŸãã
æšæ¥ïŒ1æ8æ¥ïŒãJavaèšèªã¢ãŒããã¯ããšããŠOracleã§åããŠããBrian Goetzã¯ã
ãããŒã¯ãŒãããã£ãšå¿
èŠã ããã£ããã³ïŒããšãã
æçŽã Project Amberã¡ãŒãªã³ã°ãªã¹ãã«å
¬éããŸãã
ãããã¯ãæ°ããããŒã¯ãŒããèšèªã«è¿œå ããåé¡ã解決ããæ¹æ³ãææ¡ããŸããã ãã®çµæãããŒã¯ãŒãã¯
éãã« ã
éãã¡ã€ãã« ã
æçµãã¡ã€ãã« ã
ãã®ãªã¿ãŒã³ãªã©ã®èšèªã§è¡šç€ºãããå Žåããã
ãŸã ïŒæçš¿ã®æåŸã®åãæãã®äžã«å®å
šãªãªã¹ããåŸ
ã£ãŠããŸãïŒã
éå»ã«ã¯ãã®åé¡ã¯ãã£ãã«èšèªã§çºçããªãã£ãã®ã§ã圌ãã¯éåžžããã«ã€ããŠããŸãèããããã§ããã ãæ©ãéŠãäžããããšãããã å°æ¥ã®æ¢åã®ã¢ãããŒãã®æ¬ ç¹ã«ããããããã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯åé¡ãããããã®ç¹ã§ãäºåã«æ©èœããããšã決å®ãããŸããã ææ¡ããã解決çïŒããŒã¯ãŒããšããŠäœ¿çšã§ããåå¥åœ¢åŒã®ç¯å²ãæ¡å€§ããŠã¿ãŠãã ããã1ã€ïŒãŸãã¯è€æ°ïŒã®æ¢åã®ããŒã¯ãŒããŸãã¯äºçŽæžã¿èå¥åã䜿çšãããã€ãã³ã§åºåãããããŒã¯ãŒããèš±å¯ããŸãã
éèŠãªã¡ã¢ïŒBrownã¯ãæ°ããããŒã¯ãŒãã¯èª¬æã®ããã®äŸãšããŠã®ã¿æäŸãããŠããããããã«çŠç¹ãåãããã¹ãã§ã¯ãªãããšã«æ³šæããŸãã ããããç§ãã¡ã®åã«ãèšèªã®æ§æãå°æ¥ã©ã®ããã«å€åããå¯èœæ§ããããã«ã€ããŠããèãããããã¢ã³ã¹ãã¬ãŒã·ã§ã³ãããããšã¯æããã§ã-æçŽã§ã¯ãèè
ã¯ãã®ã¢ã€ãã¢ãå€ãã®æãŸããæ¬ èœããèšèªã³ã³ã¹ãã©ã¯ããJavaã«è¿œå ããã®ã«åœ¹ç«ã€ãšè¿°ã¹ãŠããŸãã
ãå€ããã¡ãœãã
ãåãã®ãšããã仿¥ã®Javaèšèªã«ã¯50åã®ããŒã¯ãŒãïŒ
keyword ïŒãããã倿°ã®èå¥åãšããŠäœ¿çšããããšã¯çŠããããŠããŸãã å®å
šãªãªã¹ãã¯
ã3.9ç¯ã®JLSèšèªä»æ§ã«èšèŒãããŠããŸãã ãã®ãªã¹ãã¯ãèšèªã®æåã®ããŒãžã§ã³ããããŸã倿ŽãããŠããŸãã-ããŒãžã§ã³4ã§
ã¢ãµãŒãã®ã¿
ã远å ããã5ã§
åæ ã9ã§
_ã«å ããŠãããŒã¯ãŒããšåæ§ã«åäœãããäºçŽæžã¿èå¥åãïŒ
true ã
false ã
null ïŒããããŸãæ¹æ³ã
éçºè
ãèšèªã«æ°ããããŒã¯ãŒãã远å ããå¿
èŠãããå Žåãæ¬¡ã®ããããã®æ¹æ³ã䜿çšããå¿
èŠããããŸãã
- æææš©ã®åŒ·å¶è²æž¡ïŒä»¥åã¯èå¥åã§ãã£ãåèªãããŒã¯ãŒãã«å€æããŸãïŒäŸïŒ assert ïŒã
- 廿£ïŒæ¢åã®ããŒã¯ãŒãã¯ã䜿çšãããäºå®ããªãã£ãæ¹æ³ã§äœ¿çšããå§ããŸãïŒäŸã¯ã泚éå€ãŸãã¯ããã©ã«ãã¡ãœããã®ããã©ã«ãã®äœ¿çšã§ãïŒã
- ãããªãã§ïŒæ°ããããŒã¯ãŒããå¿
èŠãšããªãæ§æã䜿çšããæ¹æ³ãèŠã€ããŸã-ããšãã°ã泚éã®ä»£ããã«æ³šéçšã®ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããããæ©èœãå®å
šã«æŸæ£ããŸãã
- å¯èŠæ§ã®äœæïŒè±éçãªèšèªã®ææïŒ å¶éãããããŒã¯ãŒããäºçŽãããã¿ã€ãå ïŒã䜿çšããŠãç¶æ³äŸåããŒã¯ãŒãã®é¯èŠãäœæããŸãã
ååãšããŠããããã®æ¹æ³ã¯ããããéåžžé©çšã§ããŸãããããããã«æ¬ ç¹ããããèšèªã®æ¬æ Œçãªæ¬æ Œçãªæ¡åŒµã®ããã«ã¯ããããã®æ¹æ³ã ãã§ã¯æããã«ååã§ã¯ãããŸãã-å°æ¥ã®ã€ãããŒã·ã§ã³ã®ããã«ãèšèªæ§æã®å®å
šãªæ¡åŒµã®äžå¯èœæ§ãæé€ããå¿
èŠããããŸãã
æ°ããããŒã¯ãŒãã远å ãã
æ°ããåèªãããã ãåãã远å ããããšã«å¯ŸããŠã次ã®è°è«ããããŸãã
- éžæããããŒã¯ãŒãããã䟿å©ã§äººæ°ãããã»ã©ãããã°ã©ã ã®ãœãŒã¹ã³ãŒãã§é »ç¹ã«åºäŒããããèšèªã«éäºææ§ã远å ãããŸãïŒããšãã°ãJava SE 1.4ã§assertãšããåèªãç»å Žãããšããã¹ãŠã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãæ©èœããªããªããŸããïŒã
- éçºè
ããã®ãããªã³ãŒãã®éäºææ§ãæé€ããã³ã¹ãã¯ãå°èŠæš¡ïŒããŒã«ã«å€æ°ã®åå倿ŽïŒããèŽåœçãªïŒã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœãããŸãã¯ãããªãã¯ã¿ã€ããç¡å¹åãããå ŽåïŒãŸã§å€§ããç°ãªããŸãã
- èšèªéçºè
ã䜿çšããå¯èœæ§ãæãé«ãåèªã¯ãäžè¬çãªèå¥åã§ãïŒããšãã°ã value ã var ããŸãã¯method ïŒã
- ãœãŒã¹ã³ãŒãã§ãã£ãã«äœ¿çšããããè¡çªãå°ãªãåèªãéžæããå Žåã éåžžã¯èšèªã§åé¿ããããšãæãŸãããšæãããéåžžã¯but_not_always_finalã®ãããªæ§é ã䜿çšããå¿
èŠããããŸãã
- ããã§ããã£ãã«äœ¿çšãããªãåèªãéžæããããšã«é Œãå Žåããã®æ¹æ³ãããŸãé »ç¹ã«äœ¿çšããŠãæ©èœããŸãããäºææ§ãæãªãããšã¯ãããããŸããã
ãå€ããããŒã¯ãŒãã®åå©çš
ãããã®èšèãšãšãã«çãç¶ããããã ãã«ã€ããŠã¯ãããã€ãã®èæ
®äºé
ããããŸãã
- ããŸããŸãªã³ã³ããã¹ãã§ããŒã¯ãŒããåå©çšããããã®åäŸã¯ãå€ãã®ããã°ã©ãã³ã°èšèªã«èŠãããŸãïŒJavaã®äŸã¯ãã倿Žäžå¯ãããåå®çŸ©äžå¯ãããæ¡åŒµäžå¯ãã®æå®ã«ïŒ ïŒabïŒuse ïŒ finalã䜿çšããŠããŸã ïŒã
- ãã®ã¢ãããŒãã¯çã«ããªã£ãŠãããåç¬ã§å®è¡ãããå ŽåããããŸãããéåžžã¯åªå
äºé
ã§ã¯ãããŸããã
- æéãçµã€ã«ã€ããŠãããŒã¯ãŒãã®ã»ããã«å¯ŸããèŠä»¶ã®ã»ãããæ¡å€§ããããããªç¹ã«éããå¯èœæ§ããããŸããã³ãŒãã§null finalã䜿çšããã人ã¯ããŸããã
- åŸè
ãèªåŒµã§ãããšæãããå Žåã¯ã JEP 325ã§äœæ¥ããŠããéã æ°ããã¹ã€ããæ§æã䜿çšããŠç°ãªãã»ãã³ãã£ã¯ã¹ã§ã¹ã€ãããèšè¿°ããããšãçå£ã«ææ¡ããããšã«çæããŠãã ããã æ°ããæ°ããã¹ã€ãã ã
æ°ããããŒã¯ãŒããªãã§çããæ¹æ³ã¯ïŒ ãããããäžéšã®äººã瀺åããããã«ãèšèªã®é²åãžã®å¯ŸåŠãå®å
šã«ãããããšãã§ããŸãã ããããããã¯æ·±å»ã§ã¯ãªããéçºè
ããã®èšèªã®æ°ããæ©èœã«å¥å
šãªé¢å¿ããããããä»ã®äººã®æèŠã«ã¯é©åããŸããã
ã³ã³ããã¹ãããŒã¯ãŒã
ã³ãŒãã§ç¹å®ã®æå³ãæäŸããããã«äœ¿çšãããããäžèŠäºçŽèªïŒ
CïŒã§äœ¿çš ïŒã§ã¯ãªãã³ã³ããã¹ãããŒã¯ãŒãã¯ãåããéæ³ã®æãã®ããã«èŠããŸãããããã§ã¯ããã©ã€ã¢ã³ã¯ç·Žç¿ã«åºã¥ããŠãã®äœ¿çšã«ã€ããŠç¬èªã®èŠè§£ã瀺ããŠããŸãïŒããšãã°ãJava 10ã®
varå®è£
ã¯ããŒã¯ãŒãã§ã¯ãªãã
äºçŽãããååã§ã ïŒã æ¢åã®ããã°ã©ã ããå£ããããšãªãæ°ããããŒã¯ãŒãã远å ãããšããå¹»æ³ãšåŒãæãã«ãèšèªã®è€éããšæªã¿ãå¢å€§ããŸãã
ã³ã³ããã¹ãã®ããŒã¯ãŒãã¯ã仿§ã®äœæè
ãã³ã³ãã€ã©ãããã³IDEã«ãšã£ãŠå°é£ã§ãã 1ã€ãŸãã¯2ã€ã®ç¹æ®ãªã±ãŒã¹ã«é¢ããŠã¯ãããã¯åé¡ãåŒãèµ·ãããŸããããããããã©ãã§ã䜿çšããå§ãããšãã³ãŒããŸãã¯ãã°ããã®ããŒã«ããµããŒãããããã®ã¯ããã«é«ãã³ã¹ãã«å€æãããŸãã
ãããåŽäžããããšãã§ããŸã-圌ãã¯ãããã¯èšèªãŠãŒã¶ãŒã®åé¡ã§ã¯ãªãããã®äœæè
ãšã³ã³ãã€ã©ãšIDEãæžã人ã
ã®åé¡ã ãšèšããŸãã ãããå®éã«ã¯ã誰ããèŠããã§ããŸãã IDEã«ãšã£ãŠãããã¯é倧ãªåé¡ã«ãªãå¯èœæ§ããããŸããéçºè
ãå
¥åããŠããå
容ïŒã³ã³ããã¹ãããŒã¯ãŒããŸãã¯èå¥åïŒãæšæž¬ããã«ã¯ãããå€ãã®å
¥åãå¿
èŠã«ãªããŸãã ãã®çµæããŠãŒã¶ãŒã¯æ§æã®åŒ·èª¿è¡šç€ºããªãŒãã³ã³ããªãŒããããã³ãªãã¡ã¯ã¿ãªã³ã°æ©èœã®æ©èœãäœäžããŸãã
ãã®ããŒã«ã䜿çšã§ããŸãããæ
éã«è¡ã£ãŠãã ããã
èã®æªã¿
ãããã®ã¢ãããŒããåŒãèµ·ããåé¡-äžåšçšãªæ§æãçæŽ»ãšãã°ã®äžå¿
èŠãªè€éã-ååãšããŠãç§ãã¡ã¯åŠ¥åããããšãã§ããããã§ãã ããããæãæçœãªåé¡ã§ã¯ãªãå¥ã®åé¡ããããŸããããŒã¯ãŒãã䜿çšããããšã®ãã¥ã¢ã³ã¹ã¯ãèšèªèªäœã®ãã¶ã€ã³ãæªãããããšããäºå®ã«ã€ãªãããŸãã
Javaéçºè
ã«ãšã£ãŠã
ã¢ãããŒã·ã§ã³ã®ä»£ããã«
ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããšã¯ä»æ¥ã§ã¯ãããµããŠããŸããã@ãš "old"ããŒã¯ãŒãã®çµã¿åããã®ä»£ããã«ãã¬ã³ããªãŒãªçšèª
ã¢ãããŒã·ã§ã³ã䜿çšããæ¹ãã¯ããã«è«ççã§ããããšã«å
šå¡ãåæããã§ãããã
å¥ã®äŸïŒäœ¿çšå¯èœãªä¿®é£Ÿåã®ã»ããïŒpublicãprivateãstaticãfinalãªã©ïŒãcompleteãšåŒã¶ããšã¯ã§ããŸãã-finalã§ã
staticã§ã
ãªããã®
ã¯èšã
ãŸãã ã ããã¯ããã®ä¿®é£ŸåãæŸæ£ããããšãç€ºãæ¹æ³ããªããããããã©ã«ãã§ã¯å€æ°ãŸãã¯ã¯ã©ã¹ã
æçµç㪠ããŸãã¯ããã©ã«ãã§ã¡ã³ããŒã
éçãªæ©èœãäœæã§ããªãããšãæå³ããŸãã
ãã®åé¡ã¯ãèšèªã䜿çšãã人ã«ãšã£ãŠã¯ããã»ã©æçœã§ã¯ãããŸããããèšèªèªäœã®äœæè
ã¯ãèšèªãããã«éçºããããšããèŠæã®ããã«ãçµ¶ããééããç§ãã¡å
šå¡ããã®ãããªæ±ºå®ã«ãéãæããªããã°ãªããŸããïŒæç€ºçã«ãæé»çã«ïŒã
äžèšã®ãã¹ãŠããã®çµè«ã¯ãããèªäœã瀺åããŠããŸãïŒããŒã¯ãŒãã®å¥ã®ãœãŒã¹ãå¿
èŠã§ãã
ææ¡ããããœãªã¥ãŒã·ã§ã³
ãã®èšèªã®å®éšçãªæ©èœã§ã¯ãæ§æã䜿çšããŠæ°ããããŒã¯ãŒããäºåã«æå®ããŸãããã®å Žåãæ°ããããŒã¯ãŒãèªäœã®åã«2ã€ã®ã¢ã³ããŒã¹ã³ã¢ãä»ããŸãïŒããšãã°ããããã¿ã€ã
Project Valhallaã§ã¯
__ByValueã§ã ïŒã ãã®æ±ºå®ã®çç±ã¯çè§£ã§ããŸã-ããã¯äžæçãªçœ®æã§ãããå°æ¥çã«ã¯æçµçãªæ§æã«ã€ããŠæ±ºå®ããå¿
èŠããããåæã«æ¢åã®ã³ãŒããšã®ç«¶åãç°¡åã«åé¿ã§ããããšãææããå¿
èŠããããŸãã 1ã€ãŸãã¯2ã€ã®ã¢ã³ããŒã¹ã³ã¢ã§å§ãŸãæ°ããããŒã¯ãŒãã«åæ§ã®åœ¢åŒã䜿çšããããšããå§ãããŸããããã®ãœãªã¥ãŒã·ã§ã³ã¯çŸãããšã¯èšããŸããããã®å Žåãéåžžã®æ°ããããŒã¯ãŒããšæ··åãããããã§ãã
ãããã£ãŠã1ã€ä»¥äžã®ãå€ããããŒã¯ãŒããŸãã¯äºçŽæžã¿èå¥åã䜿çšãããã€ãã³ã䜿çšããŠäœæãããããŒã¯ãŒãã䜿çšããããšããå§ãããŸãã
å¶éãããããŒã¯ãŒããšã¯ç°ãªãããã®ã¢ãããŒãã§ã¯æ§æè§£æã®åé¡ãã¯ããã«å°ãªããªããŸããããã¯ïŒä»¥äž-äŸïŒ
not-nullãæžç®åŒãšæ··åããããšãã§ãããã¬ã¯ãµãŒã¯
abã 3ããŒã¯ã³ã1ããŒã¯ã³ããåžžã«å€æã§ããããã§ãã ããã«ãããæ¢åã®ãœãŒã¹ã³ãŒããŸãã¯äºãã«ç«¶åããå¯èœæ§ãã¯ããã«äœãããŒã¯ãŒããäœæããããã®æ°ããæ©äŒãéãããŠããŸãã ããã«ãèšèªã®äœæè
ãJavaã«è¿œå ããããã®ã®å€ãã¯ããã®äžã®æ¢åã®èšèªæ§æèŠçŽ ïŒããšãã°ã
énull ïŒã«åºã¥ããŠãããããæå³ã®ããååãæã€å¯èœæ§ãã¯ããã«é«ããªã
ãŸã ã
æ°ããããŒã¯ãŒãã®äŸãšããŠãæ°ããããŒã¯ãŒãã®å Žæã®åè£ãæããããŸãïŒèè
ã«ãããšãçŸæç¹ã§ã¯ãã®ãªã¹ãã¯çŽç²ã«äŸç€ºçãªãã®ã§ãïŒã
-
éãã« ;
-
éæçµ ;
-package-private ïŒããã©ã«ãã§ã¯ã¯ã©ã¹ã®ã¡ã³ããŒãžã®ã¢ã¯ã»ã¹ã¬ãã«ã®ä¿®é£ŸåãçŸåšã©ã®ãããªæ¹æ³ã§ã瀺ãããŠããŸããïŒã
-
ãããªãã¯ãªãŒã ïŒãããªãã¯ãªãŒãããã©ã€ããŒãã¬ã³ãŒãã£ã³ã°ïŒ;
-nullãã§ãã¯æžã¿ ;
-type -static ïŒ
Valhallaã«å¿
èŠãªæŠå¿µãã¯ã©ã¹èªäœã§ã¯ãªããã¯ã©ã¹ã®ç¹å®ã®ç¹æ®åã«é¢é£ããéçã瀺ããŸãïŒ;
-
ããã©ã«ãå€ ;
-
æçµçã«æçµ ïŒçŸåšã¯
å®å®ããæ³šéã䜿çšããŠè¡ãããããšã«ãªã£ãŠãããã®ïŒã
-
æºæ±ºå ïŒ
ã·ãŒã«ãã®ä»£ãããšããŠïŒ;
-
ç¶²çŸ
çã¹ã€ãã ;
-enum-class ã
annotation-class ã
record-class ïŒèšèªã®äœæè
ã¯ã
enumããã³
interfaceã®ä»£ããã«ãããã®ããŒã¯ãŒãã䜿çšã§ããŸãïŒããããæ©äŒãããå ŽåïŒã
-this-class ïŒçŸåšã®ã¯ã©ã¹ã®ã¯ã©ã¹ãªãã©ã«ãèšè¿°ããããïŒ;
-this-return ïŒå€ãã®å Žåãsetter / method-builderãåä¿¡è
ãè¿ãããã«ããŒã¯ããæ¹æ³ã远å ããããã«èŠæ±ãããŸãïŒã
確ãã«åå¥äœç³»ã«ã¯ä»ã®å€åœ¢ããããããã«åŸã£ãŠããã§ã«ãœãŒã¹ã³ãŒãã«æžãããŠãããã®ãšæå°éã«éè€ããããã«ããŒã¯ãŒããæ§æããããšãå¯èœã§ãã ææ¡ããããã€ãã³ã¯ãè»ãšäººéã®äž¡æ¹ã«ãšã£ãŠååã«èªã¿ãããã§ãã
ãã®ã¢ãããŒãã¯ã以åã«äœ¿çšããããã®ãšäžç·ã«äœ¿çšããå¯èœæ§ã決ããŠæé€ããªãããããããšäžç·ã«äœ¿çšãããããšãçè§£ãããã