java-jaã§ä¾å¤å¦çã®è©±ããã¦ãã¾ãã
ããã°ãæ¸ãã¾ã§ãjava-jaã§ãããããç ãã®ã§ã¨ãããã1è¡ã ãæ¸ãã¦ããã¨ã¯å¾ã ã«æ¸ã足ãã
ä¼å ´ãç¡ææä¾ãã¦ãããã°ãªã¼ããããããã¨ããããã¾ãï¼
誰ããæ¤æ»ä¾å¤ã®è©±ãããã ããã¨æã£ã¦æ¸ããªãã£ããçµå±èª°ãè¨åããªãã£ããJavaã®ã³ãã¥ããã£ãªã®ã«ã
ã£ã¦ãããè´è¡ã100人ãããã¨ãããããã¦ãããããæ¤æ»ä¾å¤ã£ã¦ãªã«ï¼ãã£ã¦äººãããããããªããï¼ãæ¤æ»ä¾å¤ãOCPãå£ããã¨ããLiskovã®ç½®æååã®Liskovãã¨ãéãã¦ããã ãããï¼ã¨ããããç´ååãéãã¦ãªããã¨ã ãã¯ã²ãã²ãã¨æããã
Twitterã®èªåã®çºè¨ã転è¼ãã¦ããã
ã¡ãªã¿ã«Zen of Pythonã§ããã¨ã©ã¼ãæ¡ãã¤ã¶ããªãã¨æ¸ãã¦ããã¾ã
ãä¾å¤ã¯ããããä½ã®ãããã£ã¦ã¨ããããã£ããçãããã ãã©ãããããã¨ããã®ã»ãããã¼ãºãã£ãããï¼ï¼
ãC#1.0ã®usingã«ãã£ã¨è¿½ãã¤ããã
é人ããã°ã©ãã¼ããã¹ã¦ã®ä¾å¤ãã³ãã©ãé¤å»ãã¦ããã®ããã°ã©ã ã¯åä½ã§ãããï¼ã
éå°é²è¡ã¯DRYã§ãªãã ãã§ãé²è¡ã足ããªããã¨ã«æ¯ã¹ãã°å®³ã¯å°ãªãã®ã§ã¯ã常ã«çãªæ¡ä»¶ãé¤å»ã§ããªãã³ã³ãã¤ã©ãã¿ã³ãªã ããããªããï¼å¾ ã¦
ãä¾å¤ã¯å¼ã³åºãå´ãå¥ç´æ¡ä»¶ãæºããããå¼ã³åºãããå´ãå¥ç´ãå±¥è¡ã§ããªãã£ãæã«æãããã®ã by t_wada ãªãã»ã©ãããã«ãã®è¦ç¹ã¯ãã£ãããã¦ãããª
ããã§ãã¯ä¾å¤ã®ä»£åã¯OCPã«åãããã¨ãã¯Clean codeã®ä¸ã§è¨ããã¦ãã®ãã
ããã¦ã³ããªã«é¢ããåé¡ãUIããããã¯ã¼ã¯IOãç²åº¦ã®å¤§ããã·ã¹ãã ééä¿¡ã»ã¢ã¸ã¥ã¼ã«éçµåãããããé¨åãåä½ãã¹ãã§ã¯æ¾ãã«ãããã°ã®æ¸©åºãªã®ã§ããã«ã»ã³ã·ãã£ããªãã°ç®¡çããã£ã¦ãããã¹ãã§ã¯ã
âå
·ä½çã«ã¯ããã°ã¬ãã«ã»ãã¼ã ã¹ãã¼ã¹ã®ä»ã«ããä¸è»¸è¶³ããããã¹ãï¼ãã°ã¯ããã£ã¨ç«ä½çã§ããã¹ããã - è¨è¨ã¨å®è£
ã®çéã§ã
tanakhãé¢æ°ãnullãè¿ããã©ããããããªããã太ä¸ãJavadocèªãã°ãããtanakhã人éãæ¸ããããã¥ã¡ã³ãã¨ãä¿¡ããããªãã
ãããã¥ã¡ã³ãèªãããã¯æ£è«ã ããç¾å®ã®åé¡ãè¦ãã¨ããã¥ã¡ã³ãèªãã§ãªããã¨ã«èµ·å ãã¦ãããã°ãå®å¨ããããã§ãããã¥ã¡ã³ããèªã¾ãªãã¨ã³ã¸ãã¢ããããã¨ããç¾è±¡ã¯ä¸å¯é¿ã
Eitherãè¶ ç°¡åã«èª¬æããã¨ãæ´æ°åãè¿ãé¢æ°ãã¨ã©ã¼ãæãããã¨ãã«ããããããæ´æ°ã¾ãã¯ã¨ã©ã¼ãåãè¿ãé¢æ°ã ãã£ã¦èããã¿ãããªã¼âEitherã®èª¬æãæ¸ãã¦ãããã¡ã«unwindã®èª¬æãæ±ãããããªã©ï½ï½ï½âHaskellããJavaã¸ã®åæé訳ã¨ãç¡çã ããï½ï½âç´ååã£ã¦è¨ããã¦åãããªã人ã«Maybeã説æãªãã§ãããã¨ãæããªãã®ã§è£è¶³ããã¨ããJustæ´æ°ã¾ãã¯Nothingãã¨ããåãâ¦â¦ã¨ãæ¸ãã¦ããåæé訳ã®ããã®ãã¤ã¯ã渡ãããã§ããã
Javaã§ãããã¯ã©ã¹ã®å¤(ä»®ã«Intã¨ãã)ãè¿ãé¢æ°ããã£ãããè¿ãå¤ãããããããnullãããããªãããå½ç¶ãã®é¢æ°ãnullãè¿ããããã©ããJavadocã§ç¢ºèªãã¦ãé©åã«nullãã§ãã¯ãããifæãããã¦ãã使ãã¹ããã太ä¸æ´¾ã§ãããã¥ã¡ã³ãã¯ä¿¡é ¼åºæ¥ãªããIntã£ã¦åã«Intã¨ãã¦ä½¿ããªãnullãå ¥ã£ã¦ãã®ãããããããããããJust Intã¾ãã¯Nothing(nullã¿ãããªãã®)ãã£ã¦ããæ°ããªåãä½ã£ã¦é¢æ°ã®è¿ãå¤ããã®åã«ããã°ãNothingãééãã¦Intã¨ãã¦ä½¿ããã¹ã¯çºçãå¾ãªãããç°ä¸æ´¾ããã®ãJust Intã¾ãã¯Nothingãã£ã¦åããMaybe Intãã ã
ã¡ãªã¿ã«ãééãæ¹æ³ãããã°å¿ ã誰ããééããnullãã§ãã¯ãå¿ãã人ã¯å¿ ãåºç¾ãããã¨ã©ã¼ã¯å¿ãããã¨ã®ã§ããªãæ¹æ³ã§éç¥ããå¿ è¦ããããç¾ç¶å¤§é¨åã®è¨èªã¯Maybeãæã£ã¦ãªãã¦ä¾å¤ãæã£ã¦ãããä¾å¤ã使ã£ã¦éç¥ããã®ããããã西尾派ã§ãã
ããã«è¨ãã°ãããã·ã¥ããå¤ãåãåºãæã«ããã¼ãåå¨ããããã§ãã¯ããæ¹æ³ãããã©ã«ãå¤ãæå®ãã¦åå¾ããæ¹æ³ãç¨æãã¦ããã«ããããããããããã使ããã«ã¢ã¯ã»ã¹ãã¦ããã®ã¯ããã°ã©ããããã®ãã¼ãåå¨ãããã¨ãã信念ãæã£ã¦ããç¶æ ã ããã®ãã¼ãåå¨ããªããªãããã¯èª¤ã£ã信念ãªã®ã§éããã«ä¾å¤ãæãã¦éã¡ã«æ°ã¥ãããã¹ãã§ãããnullã¨ãnilã¨ãundefinedãè¿ãã¦ãããããããã西尾派ã§ãã
太ä¸ã®ãä¾å¤ã¯ä½¿ãããªããã£ã¦è©±ã«åã¯ãä¾å¤ãç©æ¥µçã«ä½¿ãã¹ããã£ã¦åè«ãããã ãã©ããçµå±ã®ã¨ããå½¼ã®ä¸»å¼µã¯ãå¤äººæ°ã§ã³ã¼ããæ¸ãéã«ãå ¨å¡ãä¾å¤ã«ã¤ãã¦æ·±ãç¥ã£ã¦æ£ããè¨è¨ã§ä¾å¤ã使ããã¨ãè¦æ±ããã®ã¯ã³ã¹ããé«ããå¿ è¦ã§ããªããã ã£ãã®ã§ãã¾ããã®ãå¤äººæ°ã§ãã£ã¦æ¡ä»¶ãã¤ãããªãè³æã§ãããåã®ä¸»å¼µã¯ãä¸äººã§é£æ度ã®é«ãã³ã¼ããæ¸ãéã«ã¯ãèªåããªã«ãéã¡ãèµ·ããããããæ°ã¥ããã¨ãã§ããããã«æ³å®å¤ã®ç¶æ ãçºè¦ãããããã«ä¾å¤ãæããã¹ããã ã£ãã®ã§ãããã¯å¿ç¨åéã®éãã ãªã
ã¡ãªã¿ã«Linuxã«ã¼ãã«ã®ã³ã¼ãã£ã³ã°è¦ç´ã§ã¯gotoã使ã£ã¦ãªã½ã¼ã¹å¦çããããã¨ãè¦ãã¦ãã
http://linuxjf.sourceforge.jp/JFdocs/kernel-docs-2.6/CodingStyle.html
ããªããã³ãã§ãGCããããããããããã£ã¦è¨ã£ããã©ãããã¡ããã対ã«ãªããªãããããªãå¦çãã¯ã¡ã¢ãªç¢ºä¿ã¨è§£æ¾ã ãã§ã¯ãªããããã¯ã¨ã¢ã³ããã¯ãªã©ãéã§ä¾å¤ãé£ãã æã«ã©ããªãã¹ããèããå¿ è¦ãããã
ä¾å¤ãæãããããããªãé¢æ°ã使ãã¨ãããã¨ã¯ã対ã«ãªããªãã¨ãããªãå¦çã®çæ¹ããã£ã¦ãããçæ¹ãããåã«ä¾å¤ãæãããã¦ãéãã³ã³ããã¹ãã«ã¸ã£ã³ããã¦ãã¾ã£ãæã«ä½ãèµ·ããããèããªããã°ãªããªãã¨ãããã¨ã ããã®å¯¾ã«ãªãå¦çã®ä¾ã®ä¸ã¤ããã¡ã¢ãªã確ä¿ããã®å¾è§£æ¾ãã§ãã£ã¦ããã®åé¡ã«é¢ãã¦ã¯GCã解決ãã¦ããããããããããã¯ç²å¾ããã®å¾è§£æ¾ãã«é¢ãã¦ã¯GCã¯ä½ããã¦ãããªããã ããGCãããã°ä¾å¤å®å ¨æ§ã«é¢ãã¦ä½ãèããªãã§ããã£ã¦ããã®ã¯ééããRAIIã使ã£ã¦ãªã½ã¼ã¹ç®¡çã®åé¡ã«ããæ¿ããã¨ããSTMã解決ãã¦ããããããã¨ãã
ãGoogleã®ã³ã¼ãã£ã³ã°è¦ç´ã§ä¾å¤ãç¦æ¢ããã¦ãããã£ã¦ã®ã¯FUDã http://www.textdrop.net/google-styleguide-ja/cppguide.xml#%E4%BE%8B%E5%A4%96 ã«å訳ããã¦ããã®ã§ã¡ããã¨çç±ãèªããã¨ã
表é¢çã«ã¯ãä¾å¤ã使ãã¡ãªããã¯ãã®ã³ã¹ããä¸åãã¾ããæ°è¦ããã¸ã§ã¯ãã®å ´åã«ã¯ãªãããã§ãããããæ¢åã®ã³ã¼ãã«ä¾å¤ãå°å ¥ãããã¨ããã¨ãä¾åé¢ä¿ã®ããã³ã¼ããã¹ã¦ã«å½±é¿ãåã³ã¾ãã...
ã¯ã©ã¤ã¢ã³ãå´ã§æã¾ãã話ã¯ããã¨ã§çºè¡¨è³æãåèªããå¿ è¦æ§ãæããã
ã2åãã£ã¦ãã¡ã ã£ãå¦çã¯ã ããããããã¡ãä½åº¦ãä½åº¦ããªãã©ã¤ãã¦ãããããããåé¡ãåãåããããã®å¦çããããã¨ã®ä¸»å¼µã
ryopeko: ããããã°å®¶åºã¨ä¾å¤å¦çã£ã¦ããã¿ã¤ãã«ã§ @t_wada ã«åºèª¿è¬æ¼ããã®å¿ãã¦ã #java_ja
Fail-fastãéè¦ã§ãããã¾ãå¼ã³åºãå ãæå³çã«èªåãä¸å¿«ã«ãããã¨ããªãã¨ããè³æ¥µãã£ã¨ããªä»®å®ããããããã¨ãããèªåãä¸å¿«ã«ãªã£ããªãã°ããã¯ãåã®å®è£ ã«é¢ããå¼ã³åºãå ã®ç解ã«èª¤ããããããã§ããããããæ¹åããã«ã¯ä¾å¤ãæãã¦å¼ã³åºãå ã«åé¡ãéç¥ããå¿ è¦ãããã
ã¾ããã¡ããä¾å¤ãæããæã«é©åã«å¯¾å¦ã§ããè¨è¨ã«ãªã£ã¦ãããã©ããã¯ä¾å¤ãæããåã«ç¢ºèªãã¦ãããªãã¨ãå®å®¶ã«å¤§åè±åºãããæ»ãã ããããããããªãç¹ã«ã¯æ³¨æãå¿ è¦ã ã
#java_ja ã¨ããã§haskellã§ãå¼ã³åºãå´ãå¾ããå½¢ã§ã¨ã©ã¼ãéç¥ããããã£ã¦ã®ã¯ãè¿ãå¤ã ããç°ãªãé¢æ°ã®ãªã¼ãã¼ãã¼ããã§ãããã¨ããæ§è³ªã«ä¾ã£ã¦ããã®ã§ãjavaã ã¨å ¨é¨å ¥ããªã¯ã©ã¹ãä½ã£ã¦as_eitherã¨ãas_maybeã¿ãããªã¡ã½ããä½ããããªããããï¼
ã¨ã©ã¼å¦çãæ¸ãã¦ã¯ãããªã
å宣è¨ãããã©ãããã¦ãå宣è¨ããªãè¨èªãã¤ãã£ã¦ã¿ããã©ãã£ã±åã¯ãã£ãã»ããããã¦ãããã§åæ¨è«ã§ããã¨ããã¯æ¸ããªãã¦ãããããããã£ã¦ãªã£ãã®ã¨åãããã«ãJavaã®æ¤æ»ä¾å¤ãããã©ãããã¦ã大é¨åã®è¨èªãæ¤æ»ä¾å¤ãæ¨ã¦ã¦ãã¾ã£ãããå°æ¥çã«ã¯ä¾å¤æ¨è«ã¨ããå ¥ã£ã¦ããã°ã©ãã幸ãã«ããã¹ãã§ã¯ãªããã
ã§ããï¼ä¸¦åã»ä¸¦è¡ããã°ã©ãã³ã°
ãªãC++ã¯æ´æ°ãªã©ãä¾å¤ã¨ãã¦æããããã®ããããããæ¹ãããã£ãç©æ¥µçãªçç±ãããã®ããããã¨ãæãããããã®ã®éåãéå®ãããã¨ã«ä¾¡å¤ãè¦åºããªãã£ãã¨ããæ¶æ¥µçãªçç±ãªã®ãã
t_wadaã®ãä¾å¤ã¯ä»æ§ã§è¨è¿°ãããç¯å²ã®è£éåãã£ã¦è©±ãå°è±¡çã ã£ããæãåºããã®ã§ã¡ã¢ã¡ã¢ã