ãã¯ãifæããããã¢ã³ã¹ã¿ã¼ãããªããï¼
id:aroundthedistance ã«å¬éããããã
http://d.hatena.ne.jp/aroundthedistance/20100727/1280227851
â¦ãã®æãªã¼ãSeasar Conferenceã§ãããªãã®ã³ã¼ãããnewã¨ifãæ¶ãã¾ããéæ³ã®DIãã¿ãããªã»ãã·ã§ã³ããããä»æãåºãã¦ãé£ããããããµã¼ã»ã³ãã¨ããæ°åã«ãªã£ããã¨ãã¾ãæºæãã¦ããã
ãã® doBusinessãä¸ã®ifãelse ifããªãã¨ããããã
ポリモーフィズムの例をもうちっと実用的に書いてみた。 - 都元ダイスケ IT-PRESS
â¦ï¼ä¸ç¥ï¼â¦
ã¡ãã£ã¨ãã£ããããããã©ã¾ã ifãæ®ã£ã¦ãããã
ã©ãã ãifææªè ãªãã ãããã¾ã§å«ãªãã°ãä¸åº¦ãifæãæ¸ããã«ã³ã¼ããæ¸ãã°ãããç¡çã ããªï½ ã¨èªå²ã
ifæã«éãããåé¡ã«ãªãã®ã¯æ¿«ç¨ãªã®ã ã"ããç¥è"ãããæ£ããã£ã¦ãã¨ãè²ã ãªä¸å ·åãåºã¦æ¥ãã
ããããã¶ã¤ã³ãã¿ã¼ã³ãé©ç¨ãã¦ãå ¬éããã¤ã³ã¿ã¼ãã§ã¤ã¹ãå©ãå ´åã¯ãã©ã®ã¤ã³ã¹ã¿ã³ã¹ãªã®ããæ確ã«ããå¿ è¦ãããæ°ããã¦ããããªãã¨ããªããã¼ã®ã£ã¦æã£ã¦ãã
http://d.hatena.ne.jp/aroundthedistance/20100727/1280227851
çµè«ããè¨ãã°ããªãã¨ããªããã¼ãããªãã¨ãããå¿
è¦ãå®ã¯ç¡ããã¨ããã®ã解ã ã¨æãã
å
æ¥ ArrayList
俺ããªããªãä¸æã説æãåºæ¥ãªãã¨ãããªã®ã ãããªãã¸ã§ã¯ãæåã§ã¯ãã°ãã°ãââãÃÃãç¥ã£ã¦ãããã¨ãã表ç¾ãããããã®è¡¨ç¾ã使ãã¨ãã誰ããListã®å®è£ ãArrayListã§ãããã¨ãç¥ã£ã¦ãããã®ãåé¡ãªã®ã§ã¯ãªããã誰ãListã®å®è£ ãç¥ã£ã¦ããã¹ããããèããã®ã ãããããã¨ãèªãã¨newãã¹ãå ´æã決ã¾ãã®ã§ã¯ãªããã
ãã¦ã
if (formatId == CSV) { // ... (A) } else if (formatId == XML) { // ... (B) }
ãã®æ§ãªåå²ããç¥èãã®ä¸ç¨®ã§ãããããã«ã¤ãã¦ããã¢ããªã±ã¼ã·ã§ã³ã®åæã«æ£ãã°ã£ã¦ãã¾ããã¨ãåé¡ãªã®ã§ãã£ã¦ãifæèªä½ãæªè ãªè¨³ã§ã¯ãªãããã®ã³ã¼ããæ¸ããæç¹ã§ã¯ããã¼ã¿ã®ãã©ã¼ãããã¯CSVã¨XMLã®äºæã ã£ãã®ã ãããããããä»æ§å¤æ´ã«ãããYAMLãæ±ããããã«ããªãããããªããã¨ãªã£ãæã«å°é£ãå§ã¾ããåå²ã®ç¥èãåæã«æ£ãã°ã£ã¦ããå ´åãå ¨ã¦ã®ifæãæ¼ããªãä¿®æ£ããã®ã¯å¤§å¤ã ããã ã
ç¥èãããæ£ããã£ã¦ãããããã«ãä¿®æ£æ¼ããèµ·ããå¯è½æ§ããããããããã¨ããAãBã®ã©ã¡ããã®å¦çã絶対ã«å®è¡ããããã¨ããåæã§å¾ç¶ã®ã³ã¼ããæ¸ããã¦ããå ´åããã°ã¨ãªã*1ããã ã
åããã¸ãã¯ï¼çå±ï¼ã§åå²ããå ´æãä¸ã«æã«éä¸ããã¦ãããã¤ã¾ããç¥èã®å ±éåãããã¦ããã°ããã®ä¸ã«æãå¤æ´ããã ãã§ãä»ã®å ¨ã¦ã®é¨åãèªåçã«è¿½å¾ãããããããå ç¢ãªã³ã¼ããã£ã¦å¥´ãªã®ã ããã
ä¸çªåºç¤çãªå ±éåã¯ä»¥ä¸ã®ãããªæããããã¯beforeã¯System.out.println ãæªã訳ã§ãã "(" + ... + ")" ãæªãããã§ããªããåãå¦çãªã®ã«å ±éåãã¦ããªãã®ãåé¡ãªã®ã ãã ãããafterã§ããSystem.out.println 㨠"(" + ... + ")" ã¯æ¶ããªããã®ã ãå ±éåãããä¸ã«æã ãããæ®ããã誰ãããåºåå ã¯æ¨æºåºåã§ãããã¨ãã¨ãæ¬å¼§ã§ããããã¨ãã¨ããç¥èãç¥ããªãããããªãã®ã ããã
// before System.out.println("(" + foo + ")"); System.out.println("(" + bar + ")"); System.out.println("(" + baz + ")"); // after printWithBrackets(foo); printWithBrackets(bar); printWithBrackets(baz); void printWithBrackets(String str) { System.out.println("(" + str + ")"); }
ãå¦çãã¡ã½ããã¨ãã¦åãåºããã¨ãããªãã¡ã¯ã¿ãªã³ã°ã¯ãå ±éåãã¯ããã¯ã®ä¸ç¨®ã§ãããä»ã«ãå ±éåã®ãã¯ããã¯ã¯ãã¤ãããã£ã¦ããã®ä¸ã¤ãç¶æ¿ã ã£ããããªã¢ã¼ãã£ãºã ã ã£ããããã
// before public class American { private int name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String greeting() { return "Hello, my name is " + getName() + "."; } } public class Japanese { private int name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String greeting() { return "ããã«ã¡ã¯ãç§ã®ååã¯" + getName() + "ã§ãã"; } } // after public abstract class Person { private int name; public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract String greeting(); } public class American extends Person { public String greeting() { return "Hello, my name is " + getName() + "."; } } public class Japanese extends Person { public String greeting() { return "ããã«ã¡ã¯ãç§ã®ååã¯" + getName() + "ã§ãã"; } }
ããã¯ãç¶æ¿ã使ã£ã¦ãnameãã£ã¼ã«ãã®ç®¡çãPersonã¨ããåºåºã¯ã©ã¹ã«ç§»åãã¦å ±éåããä¾ããã¯ãããã£ã¼ã«ããã¢ã¯ã»ãµãæªãããã§ã¯ãªããå ±éåããã¦ããªãã®ãåé¡ã ãã¨ããããã§ããã£ã¼ã«ããã¢ã¯ã»ãµãæ¶ãã¯ããªãã1ã¤ã ãæ®ãã®ã ãååã¯èª°ãç¥ã£ã¦ããã¹ããªã®ããã«åºã¥ãã¦ãã
ããã¾ã§ã¯ãå ±éåãã¨è¨ã£ã¦ããããå¦çãå ±éåã§ããå¾ã¯ããã®ç¶æ¿ããªã¼ãä¸æ¹ã«ãã©ã£ã¦è¡ãäºã§ããã¸ãã¯ãæ¸ãå ´æã移åã§ãããããã«ãªããPersonã®ä¸ã«ãããã«æ½è±¡çãªã¯ã©ã¹ããã£ãå ´åããã®ãªãã¸ã§ã¯ãããååããæã£ã¦ããå ´åã¯ãnameãã£ã¼ã«ãã¨ãã®ã¢ã¯ã»ãµããã®æ½è±¡ã¯ã©ã¹ã«ç§»åããããã¨ãã§ããããã ã移åããããã¨ãé©åãªã®ãã©ããã¯æèã«ä¾åããããã§ãä¸æ¦ã«å¤æã§ããªããè²ã èããæ«ããã©ãã«æ¸ãã®ãé©åãªã®ãããå¤æããå¿ è¦ããããã³ã¼ããæ¸ãå ´æãé©åã«é¸ã¶ãã¨ã«ãã£ã¦ãããã«å ç¢ãªã³ã¼ãã¨ãã奴ã«è¿ã¥ãã¦ããã
ãã¦ãå æ¥ãè¯ã¨ã³ããªãããã©ããé ããã®ã§ãç´¹ä»ãããã
ã¯ã©ã¹ã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ï¼ä½¿ãæ¹ï¼ã¯ããã©ã³ã¹ãã ã¨ãã使ãåæãã ã¨ãããæªãããªãã®ãåºæºã«ãã¦æ±ºããã¹ãã§ã¯ãªãã¦ãã¯ã©ã¹åä½ã§è¦ãã¨ãã«ã©ããã¦ãããªã£ã¦ããããè«ççã«
ã説æãã§ãããã©ãããéè¦ã
クラス設計の話 - 虚飾の王
ãã®éãã§ãããä¸è¨ã®ä¾ã§è¨ãã°ããªãnameãPersonã«æ¸ããã®ããã説æã§ããªãããããªãã
DIのお話を書いてみる。 - 都元ダイスケ IT-PRESS ã§æ¸ããDIã®ä¾ã¯ãå ´ååããã¸ãã¯ãä¸ã¸ä¸ã¸ã¨æ¼ãä¸ãã¾ãã£ãçµæãæçµçã«Javaã®ä¸çãé£ã³åºãã¦ãXMLã®ä¸çã«è¡ã£ã¦ãã¾ã£ãããã®ã¨ã³ããªã§ã¯ãDIã説æãããã¨ãããçºã«ããªãããç½®ãå»ãã«ãã¦ãã¨ã«ãããXMLã®ä¸çã«ã¶ã£ã¨ã°ãããã¨ãããã¨ã ãã説æããã ããªã®ã ããã®å ´ååããã¸ãã¯ãJavaã§ã¯ãªãXMLã§è¡¨ç¾ãããã¨ãã¯ããã¦é©åãªã®ãï¼ã¨ãããã¨ããå®ã¯ãã£ããèããªããã°ãªããªãã
ã¾ã¨ã
ã¡ã½ããåãåºããç¶æ¿ãªã©ã®ãã¯ããã¯ã使ããã¨ã«ãã£ã¦ããããç¥èãã«ã¤ãã¦è¨è¿°ããå ´æãã³ã³ããã¼ã«ã§ããããã«ãªãããç¥èãæããªããã¨ãã大äºãªã®ã§ã¯ãªããç¥ããªãã¦è¯ãç¥èãç¡é§ã«æããªããã¨ããã®ç¥èãè¨è¿°ããæé©ãªå ´æãé©åã«é¸ã¶ããã®ã大äºãªãã ã
ã¨ããããã ãããªããæç« ã¾ã¨ã¾ã£ã¦ãã¼ãªã¼ãã¨æãã¤ã¤ãæ稿ã
*1:ãããªãã°ã«ãã¡æ©ãæ°ã¥ããããèªåã¯ãã®ifæã®æå¾ã«elseå¥ãä»ãã¦ãä¾å¤ãã¶ã£ã¨ã°ãã®ã好ãã ãä½è«ã ãã