ãã®äººãããã¯ãã¼ã¯ãã¦ããこの「Rubyを仕事に使うべし!」という記事ã§æ¸ããã¦ããRubyã®åªããç¹å¾´ã¯ãå®éã®ã¨ãããã©ã®é¨åããã©ãã¾ã§æ¬å½ãªã®ã§ããããï¼ å°ãæ¤è¨¼ãã¦ã¿ããã¨æãã¾ãã
ãRubyãã¹ã´ã¤ãã¨ãããç¹ã®ã©ãããã³ãã§ã©ããã¦ã½ï¼
ãRubyãä»äºã«ä½¿ãã¹ããã§ã¯ãã¾ããRubyã®ç¹å¾´ã¨ãã¦ã
(1)ããããªè¨èªã®ããã¨ãåã
(2)æ§æãå¼·å
(3)楽ããããã°ã©ãã³ã°
(4)åé¡ãèµ·ããã«ããããã«è¨è¨ããã¦ãã
ã¨ããç¹ãåé ã§æ²ãã¦ãã¾ãã
ã¾ããããããã©ã®ããã«æ¤è¨¼ããã°ããããèãã¦ã¿ã¾ãã
ã¾ãã(1)ã®ããã¨ãåãã«ã¤ãã¦ã¯ãããã¨ãåãããç¶ããªãããã¤ãé²åãã¦ããã®ã¯ãæè¿ã®è¨èªã¯ã¿ããªããã§ãããã¯Rubyç¬èªã®ç¹å¾´ã§ããªãã§ãããã¾ããã
ãã¨ãã°ãC#ã¯ããã®å
¸åã§ãVMãèªåã¡ã¢ãªç®¡çãããã±ã¼ã¸ã«ããåå空é管çããã«ãã¹ã¬ãããããªãã¡ã¤ã¢ã¯JavaãããGenericsã¯C++ãããå¼·åãªæ£è¦è¡¨ç¾ã¯Perlãããã¢ãããã¹ã¡ã½ããã¯LISPã®ã©ã ããã¯ãã¼ã¸ã£ã¼ã®ãã¯ãã§ãããã
ããã¦ããã®ãã¯ããå
ã§ããJavaãC++ãPerlããªãªã¸ãã«ãããªããããã«å¥è¨èªãããã¯ãã¾ãã£ã¦ãã¦ãã¾ãã*1
ãªã®ã§ããããã¨ãåãããªã©ã¨ããæ½è±¡çãªãã¨ãè¨ã£ã¦ãã¦ããã¡ã§ãå ·ä½çã«ãã©ã®ãããªæ©è½(ã®çµã¿åãã)ãçã¿åºãã©ã®ãããªå ·ä½çã¡ãªãããä»ã®è¨èªã«ç¡ãã£ã¦ãRubyã«ããã®ããããããå ·ä½çãªé¨åããã¢ãªããã§ãã
ããã¦ãããã¯(2)ã(4)ã«ã¤ãã¦ãåãã§ãä»ã®è¨èªã ã£ã¦ãå¼·åãªæ§æã¯ããããããæ¹ãã ãã§æ¥½ããããã°ã©ãã³ã°åºæ¥ãããåé¡ãèµ·ããã«ããããã«è¨è¨ãããã¦ããããã§ããã¹ã¦ãåã ã®å ·ä½çãªæ©è½ãçã¿åºããå ·ä½çãªã¡ãªããã«ã¤ãã¦ãRubyç¬èªã®ãã®ããããã©ãããã¨ããè£ä»ãã®ãããã®ã ãããå¯ä¸æå³ã®ããRubyã®ç¹å¾´ã¨è¨ããã®ã§ã¯ãªãã§ããããï¼
ããã¦ããã¨è¨äºã®ä½è ã®æ¹ãå½ç¶ããã®ã¨ãããåãã£ã¦ããã®ã§ã
(A)ã¡ã¿ããã°ã©ãã³ã°
(B)ãããã¯æ§æ
ã®ï¼ã¤ãRubyã®åã®æºæ³ã¨ãã¦ããã¦ãã¾ãã
ããããå¤ãã®ã±ã¼ã¹ã§ãRubyã®ãã¡ã¿ããã°ã©ãã³ã°ãã¨ããããã¯æ§æãã¨åæ§ã®ãã¨ãå®ç¾ã§ããæ©è½ã¯ãä»ã®è¨èªã«ãããã¾ãããããã¨å
·ä½çã«ã©ã®ããã«ã¡ãªããã®éããããã®ãããå
·ä½çã«æ¯è¼ããªããã°ããã¡ãã¨ããæ¯è¼ã«ãªãã¾ããã
ããããã¯æ§æãããããRubyãçç£æ§ãé«ããã¨ããã®ã¯ã©ãã¾ã§æ¬å½ãï¼
ãã¨ãã°ããããã¯æ§æã«ã¤ãã¦ã¯ãC#ã§ãããç¹å®ãããã¯ã ãå¥ã¹ã¬ããã§å®è¡ãããã£ããã以ä¸ã®ããã«è¨è¿°ã§ãã¾ãã
string cmd = "LiveForever"; if (cmd != null) { f.th(delegate { // ãããããããã¯éå§ f.sleep(300); processCommand(cmd); // ããããããã¯ã®çµãã }); }
ãã®ã³ã¼ãã§é¢ç½ãã®ã¯ãå¥ã¹ã¬ããã§å®è¡ããããããã¯ã®ä¸ãããå
ã®ã¹ã¬ããã§ä½¿ããã¦ããcmdã¨ããä¸æå¤æ°ã«ããã®ã¾ã¾ã¢ã¯ã»ã¹ã§ãã¦ãããã¨ã§ããããããã¯ãã¼ã¸ã£ãã©ãã§ãããLISPããã°ã©ãããã¯ãã20å¹´åããç¥ã£ã¨ãããã¨ãè¨ãããã§ããããã©ã
ã¡ãªã¿ã«ããã®ãf.thã¨ããã¡ã½ããã¯ã.NETã®ã¯ã©ã¹ã©ã¤ãã©ãªã«ããã©ã«ãã§çµã¿è¾¼ã¾ãã¦ãããã®ã«ãã·ã³ãã«ãªæ±ç¨ã©ããããã¶ãããã®ã§ããã¡ãªã¿ã«ããã®æ±ç¨ã©ããã¯ãä¸è¡ã§å®è£
ã§ãã¾ã(ç¬)ã
ãã¡ãããããã¯ãã¹ã¬ããã«ãã使ããªãæ§æã§ããªãã§ããªãã£ã¦ãæ®éã«ãã³ã¼ããããã¯ãå¼æ°ã¿ããã«ä»ã®ã¡ã½ããã«æ¸¡ããã¨ãã§ãã¾ãã
ãã¨ãã°ããåå¾ãããã¨ããã¡ã½ããã«ã種å¥ã¨ããååã®å¤æ°ã¨ãä»»æã®ã³ã¼ããããã¯ãå¼æ°ã¨ãã¦æ¸¡ãã¦å®è¡ããã«ã¯ã以ä¸ã®ããã«è¨è¿°ãã¾ãã
åå¾ãã(種å¥, delegate{ //ãããããããã¯éå§ string id = getID(tr_text, éè¤); if (rssid != null){ MM cell_m = y.hm(tr_text, @"(]*>(? \s*){11}"); if (cell_m.æå) { try{ MyItem item = new MyItem(); item.ID = id; CaptureCollection cells = cell_m.m.Groups["val"].Captures; string str; str = cells[5].ToString(); item.CurrentVal = int.Parse(str, NumberStyles.Any); } catch (Exception ex) { print(ex); print("tr_text:"+tr_text); } } } // ããã§ãããã¯çµäº });.+?)
ãã ãããã¯ããã¤ãããã¯è¨èªã®ããã«ãå®éã«ã³ã¼ããããã¯ãå¼æ°ã§æ¸¡ãã¦ãããããããªãã§ãã
è¦ããä¸ãã³ã¼ããããã¯ãå¼æ°æ¸¡ããã¦ãããã®ããã«ãã½ã¼ã¹ã³ã¼ããè¨è¿°ã§ããã ããªãã§ããã
å®éã«ã¯ãC#ã®ã³ã³ãã¤ã©ããã³ã¼ããããã¯ãã¡ã½ããã«å¤æããã¡ã½ããã¸ã®ãã¤ã³ã¿ãããªã²ã¼ããªãã¸ã§ã¯ãã§ã©ãããã¦æ¸¡ãã¦ãããã§ããã
ã¤ã¾ããå®éã«ã³ã¼ããããã¯ã¨ãããã¡ã¿ãªãã¸ã§ã¯ãããã©ã¡ã¼ã¿ã¨ãã¦æ¸¡ãã¦ãããããããªããã§ãã
ããããããã§èããªãããªããªããã¨ã¯ãããã°ã©ãã¼ã®ãçç£æ§ãã¨ãæ°æã¡ãããã§ãã
ã¡ã½ããã«ã³ã¼ããããã¯ãå¼æ°ã¨ãã¦æ¸¡ãã¦ããããã«è¨è¿°ããåãã½ã¼ã¹ã³ã¼ãããã³ã³ãã¤ã«æã«ã¡ã½ããã«å¤æããããããå®è¡æã«å®éã«ã³ã¼ããããã¯ã¨ããã¡ã¿ãªãã¸ã§ã¯ãã¨ãã¦æ¸¡ããããããããã°ã©ãã«ã¨ã£ã¦ã¯ãã©ã¡ãã§ãè¯ãã®ã§ã¯ãªãã®ãï¼ã¨ããç¹ãéè¦ãªã®ã§ã¯ãªãã®ã§ããããï¼
ã½ã¼ã¹ã³ã¼ãã®çç£æ§ã¨ä¿å®æ§ã¨æ°æã¡ãããå¤ãããªãã®ã ã£ããããããå
é¨çã«ã©ã®ããã«å®è¡ãããããªã©ãã©ãã§ããããã¨ã§ã¯ãªãã§ããããï¼
ããããC#ã®ããã«ãåä»ãã®å¼·ãè¨èªã®å ´åãã³ã³ãã¤ã«æã«å¤ãã®é¨åã解決ãããã¨ãåæã¨ããæ¹ããã³ã³ãã¤ã©ãããããæ½å¨çã«åé¡ã®ããã³ã¼ããèªåãã§ãã¯ãã¦ãããããã¾ããéçºç°å¢ãåã解æãã¦ãã¤ã³ããªã»ã³ã¹ããªãã¡ã¯ã¿æ©è½ãªã©ã®ãã³ã¼ãã£ã³ã°çç£æ§ãåä¸ãããæ©è½ãæä¾ãã¦ãããã¨ããã¡ãªãããããã¾ãã*2
çµå±ããå
·ä½çãªã¡ãªãããã¨ãããã®ã¡ãªãããå
·ä½çã«ã©ã®ç¨åº¦ã®é »åº¦ã§çãããããã¨ãããã¨ãåå³ããã¨ãå°ãªãã¨ããããããã¯æ§æãããããRubyãçç£æ§ãé«ãããã©ããã¯ãこの「Rubyを仕事に使うべし!」ã¨ããè¨äºã§ã¯ãã¾ãã§æããã«ããã¦ããªãã®ã§ãã
ããããã¡ã¿ããã°ã©ãã³ã°ã¨ã¯ä½ãï¼
ã¡ã¿ããã°ã©ãã³ã°ã¨ã¯ãè¦ã¯ãããã°ã©ã èªä½ãæä½ããããã°ã©ãã³ã°ã§ãã
ãã¨ãã°ãã¯ã©ã¹ãã¡ã½ãããã³ã¼ããããã¯ã¨ãã£ãããã°ã©ã ã®æ§æè¦ç´ ãæä½ããããã§ãã
åç´ãªãã®ã ã¨ãããã¯ã©ã¹ã®ã¯ã©ã¹åãæååã¨ãã¦åå¾ããããã°ã©ã ããããåå§çãªã¡ã¿ããã°ã©ãã³ã°ã¨è¨ãã¾ãã
ããã¦ãã¡ã¿ããã°ã©ãã³ã°æ©è½ã¯ããããã£ã±ã«ãèªã¿åºãç³»ã¨æ¸ãè¾¼ã¿ç³»ã«åãããã¾ãã
ãã¨ãã°ãèªã¿åºãç³»ã®ä¾ã§ã¯ãå®è¡æã«å¤é¨ããèªã¿è¾¼ãã XMLãã¡ã¤ã«ã®ä¸ã«è¨è¿°ãããã¯ã©ã¹åã®ã¯ã©ã¹ã®ãªãã¸ã§ã¯ããçæããéä¿¡ã§ãµã¼ãããéããã¦ããã¡ã½ããåã®ã¡ã½ãããå®è¡ããã¨ãã£ãã±ã¼ã¹ããããã«å½ããã¾ãã
ã¾ãããã¨ãã°ãRDBã®ãã¼ãã«åã¨åãååã®ã¯ã©ã¹ãåã£ã¦ãã¦ããã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ããã®ãã¼ãã«ã«æ ¼ç´ããã¦ããã¬ã³ã¼ãã®æ°ã ãçæãããã®ã¬ã³ã¼ãã®ãã£ã¼ã«ãåã¨åãååã®ã¤ã³ã¹ã¿ã³ã¹ãã£ã¼ã«ãã«ããã¼ã¿ãæ ¼ç´ãããã¨ããããã°ã©ã ãæ¸ãã¾ãã
ããããã®èªã¿åºãç³»ã¡ã¿ããã°ã©ãã³ã°æ©è½ããªãã£ãããRDBã®ãã¼ãã«ãã¨ã«ããã®ãã¼ã¿ãèªã¿åºãã¦ãªãã¸ã§ã¯ãã«ããã«ã¼ãã³ãå¥ã ã«ç¨æããªããã°ãªããªãã®ã§ãããèªã¿åºãç³»ã¡ã¿ããã°ã©ãã³ã°æ©è½ã®ãããã§ã1åæ¸ãã°ãããã使ãåãã¾ãã
ããã§ã®ãã½ã¯ãããã°ã©ãã³ã°æã«ã¯ããããã©ããªã¯ã©ã¹ã§ãã©ããªã¡ã½ãããæã¤ãåãããªãã®ã«ãã¨ã«ãããã®ã¤ã³ã¹ã¿ã³ã¹ãçæãã¦ããã®ã¡ã½ãããå®è¡ãããã¨ããããã°ã©ã ãæ¸ãã¦ãã¾ããã¨ã§ããã½ã¼ã¹ã³ã¼ãå ã«ãåé¢ã¨ãã¦ç¾ããªãã¯ã©ã¹ãã¡ã½ãããå®è¡ã§ãããã¨ããã½ãªããã§ãã
ä¸æ¹ã§ãæ¸ãè¾¼ã¿ç³»ã®ã¡ã¿ããã°ã©ãã³ã°ã¯ããã¨ãã°ãå®è¡æã«æ°ããã¯ã©ã¹ãã¡ã½ããèªä½ãåæããããæ¸ãæãããããæä½ã§ãã
ããã使ãã°ããã¨ãã°ãè¤æ°ã®ã¯ã©ã¹ãå®è¡æã«è¶³ãåããããããªãã¨ãåºæ¥ã¾ãããªã®ã§ãå¤éç¶æ¿ã許ããªãè¨èªå¦çç³»ã§ãå¤éç¶æ¿ãã©ãã®ãã¨ãã§ããããã¾ãã
ãããã¯ãç¶æ¿ã®ã»ãã³ãã£ãã¯ã¹ãæ¡å¼µãã¦ããã£ã¼ã«ãã®åæå¤ãéåæ¼ç®ã®unionãåãããã«ãããã¨ãã§ãã¾ãããã¨ãã°ãã¯ã©ã¹Aã®ã使ããè²ãã¨ããå®æ°ãã£ã¼ã«ãã®å¤ããã赤,éãã ã£ãã¨ãã¦ããã®ã¯ã©ã¹ãç¶æ¿ããã¯ã©ã¹Bã§ãã使ããè²ãã¨ãããã£ã¼ã«ãã®å¤ããé,ç·ãã«ãã¦ããã¨ãç¶æ¿æã«éåæ¼ç®ããã¦ã赤,é,ç·ãã¨ãããã£ã¼ã«ãå¤ã«ãªãã¾ãã
ã¡ã½ããã®ä¾ã§ã¯ããã¨ãã°ãã¢ã¹ãã¯ãå¿åããã°ã©ãã³ã°ã®ããã«ãæ¢åã®ã³ã¼ããããããã«ãå®è¡æã«ãããç¹å¾´ããã£ãã¡ã½ãããå®è¡ãããåã«ãå®è¡ããããããã®ã¡ã½ããã®åä½ãã°ãã¨ãã¨ãã£ããããªä½¿ãæ¹ãåºæ¥ã¾ãã
ãããã®ã¡ã¿ããã°ã©ãã³ã°æ©è½ããã©ãã¾ã§ãµãã¼ããã¦ãããã¯ãè¨èªã«ãã£ã¦ãããããç°ãªãã¾ãããå°ãªãã¨ããèªã¿åºãç³»ã«ã¤ãã¦ã¯ãC#ãJavaã«ãããããVisualBasicãªã©ãæè¿ã®ã¡ã¸ã£ã¼ãªè¨èªã®å¤ãã§ã¯ãµãã¼ãããã¦ãã¾ãã
ãã¡ã¿ããã°ã©ãã³ã°ãå¼·åã ããRubyãçç£æ§ãé«ããã¨ããã®ã¯ã©ãã¾ã§æ¬å½ãï¼
ãã¢ã¯ããããã®ã¡ã¿ããã°ã©ãã³ã°æ©è½ã®å
·ä½çã¡ãªããã¨ããã®ã¡ãªãããçããé »åº¦ã§ãã
ããã¦ãããã¯ãèªã¿åºãç³»ã¨æ¸ãè¾¼ã¿ç³»ã«åãã¦èããã¹ãã§ãããã
ã¾ããèªã¿åºãç³»ã«ã¤ãã¦ã§ããã確ãã«ãèªã¿åºãç³»ã®ã¡ã¿ããã°ã©ãã³ã°ã¯ãå ·ä½çãªçç£æ§ãæ°æã¡ããã«ã¯ããªãè²¢ç®ããã®ã§ããã©ãèªã¿åºãç³»ã¡ã¿ããã°ã©ãã³ã°æ©è½ã¯ãJavaãC#ãVisualBasicãªã©ä»ã®è¨èªã«ãããã¾ãã
ãªã®ã§ãRubyã®èªã¿åºãç³»ã¡ã¿ããã°ã©ãã³ã°æ©è½ã¨ä»ã®è¨èªã®èªã¿åºãç³»ã¡ã¿ããã°ã©ãã³ã°æ©è½ã§ãå ·ä½çã«ã©ã®ãããªå¹ç¨ã®å·®ãããã®ããã¨ãããã¨ã§ãã
ã¡ãã£ã¨å·éã«èãã¦ã¿ãã°åããã¨æãã¾ãããèªã¿åºãç³»ã¡ã¿ããã°ã©ãã³ã°ã§æ±ããªãã¸ã§ã¯ããªãã¦ãã¯ã©ã¹ãã¡ã½ããããã£ã¼ã«ããããããã£ãªã©ãã©ã®è¨èªã«ããããµãããéå±ãªã»ã©åããããããªãã¸ã§ã¯ãã§ããããã¾ãããã¯ã©ã¹ãªãã¸ã§ã¯ãããã¡ã½ãããªãã¸ã§ã¯ããåãåºãAPIã¯ãããã¯ãåã«ã¡ã½ããåãã¡ã½ãã種å¥ãå¼æ°ã¨ãã¦æå®ãã¦åãåºãã ãã§ãã©ãè¦ã¦ããè¨èªã«é¢ä¿ãªããè¤éãªæä½ã«ã¯ãªãå¾ã¾ããã
ãã¨ãã°ãC#ã§ãããç¹å®ã®ãªãã¸ã§ã¯ãã®ã¯ã©ã¹ã®ããã£ã¼ã«ããªãã¸ã§ã¯ãã®é åããã¤ã³ã¹ã¿ã³ã¹ãã£ã¼ã«ãéå®ã§ãåãåºãã«ã¯ã次ã®ä¸è¡ã§æ¸ã¿ã¾ãã
FieldInfo[] fa = o.GetType().GetFields(BindingFlags.Instance);
ã¡ã½ãããåæ§ã§ãã
MethodInfo[] fa = o.GetType().GetMedhods(BindingFlags.Instance);
ã¾ããåãåºããã¡ã½ãããªãã¸ã§ã¯ãã®ä¸ãããããç¹å®ã®ååã®ã¡ã½ãããæ¢ããããã°ã
foreach (MethodInfo m in ma) if (m.Name == name) return m;
ã§äºè¶³ãã¾ãã
ãã¡ãããããããã«ã¼ããåããªãã¦ããã¡ã½ããåã¨ç¨®å¥ãæå®ãã¦ãä¸çºã§ã¡ã½ãããªãã¸ã§ã¯ããåãåºãAPIãå¦çç³»ãç¨æãã¦ãã¾ãã
ã¾ããåãåºããã¡ã½ãããªãã¸ã§ã¯ãã«å¼æ°ã渡ãã¦å®è¡ããã«ã¯ã
object å¼æ°ãªã¹ã = new object{7,"å®è¡ããããã"}; meth.Invoke(o,å¼æ°ãªã¹ã);
ã¨ããã ãã§ãã
ã©ã®æä½ãããªãããããããããã¨ã¯ããã¾ããã
ãã®ç¨åº¦ã®ãã¨ãããã®ã«ãRubyã¨ä»ã®è¨èªã§çç£æ§ã«ããã»ã©å¤§ããªå·®ãåºããã¨ã¯ãã¨ã¦ãèãã«ããã§ãã
ãªã®ã§ãå è¨äºã®ãRubyãä»äºã«ä½¿ãã¹ãï¼ãã§ã¯ã
ãJavaã§ã®ã¡ã¿ããã°ã©ãã³ã°ã¯ï¼ãªãã¬ã¯ã·ã§ã³APIããã¤ãã³ã¼ãæä½ï¼3ãç¨ãï¼ã¨ãã«ã¯Javaä»®æ³ãã·ã³ï¼Java VMï¼ã®ä»æ§ã®ç¥èã¾ã§è¦æ±ãããé£æ度ã®é«ããã®ã§ãã
ã¨æ¸ãã¦ããã¾ããã©ãããã¯ãå°ãªãã¨ããèªã¿åºãç³»ã«ã¯å½ã¦ã¯ã¾ãããã«ããã¾ããã
次ã«ãæ¸ãè¾¼ã¿ç³»ã®ã¡ã¿ããã°ã©ãã³ã°æ©è½ã§ãããå®ã¯ãæ¸ãè¾¼ã¿ç³»ã®ã¡ã¿ããã°ã©ãã³ã°æ©è½ã¯ãèªã¿åºãç³»ã¡ã¿ããã°ã©ãã³ã°æ©è½ã¨æè»ãªã¯ã©ã¹ã©ã¤ãã©ãªã®çµã¿åããã§ãç½®ãæãå¯è½ãªãã¨ãã»ã¨ãã©ãªã®ã§ãã
ã¨ãã«ãC#ã®ã«ã¹ã¿ã å±æ§ã¨èªã¿åºãç³»ã®ã¡ã¿ããã°ã©ãã³ã°æ©è½ãçµã¿åãããã°ãããã¦ã®ãã®ã¯ãããªãã¨ã¬ã¬ã³ãã«å®è£ åºæ¥ã¦ãã¾ãã¾ãããã¡ãããåæ§ã®æ©è½ã¯Javaã«ãããã¾ãã
ãã¨ãã°ãå ã»ã©ã®ããã£ã¼ã«ãã®åæå¤ãéåæ¼ç®ã§ç¶æ¿ããã¨ããããã«ãç¶æ¿ã®ã»ãã³ãã£ã¯ã¹ãæ¡å¼µããã¯ã©ã¹ãã©ãå®è£ ãããã¨ããã¨ãåã«ãã«ã¹ã¿ã å±æ§(ãã¨ãã°ãUnionç¶æ¿ããªã©)ã§ãã¼ã¯ãããã¯ã©ã¹ãããã°ã©ã ä¸ãããªã¹ãã¢ãããã¦ããã®ã¯ã©ã¹ãªãã¸ã§ã¯ãã®ç¶æ¿é¢ä¿ãããã®ã¼ã£ã¦ãã£ã¦ããã¯ããããã«ã¹ã¿ã å±æ§ã§ãã¼ã¯ããããã£ã¼ã«ãããªã¹ãã¢ãããã¦ããã®åæå¤ãåãåºãã¦ãéåæ¼ç®ãã¦ãæ ¼ç´ãç´ããã¨ããå¦çãããã°ããã ãã§ãã
ã¾ããã©ããã¦ããå®è¡æã«ãäºã¤ä»¥ä¸ã®ã¯ã©ã¹ãåæãã¦ãå¤éç¶æ¿ã®ãããªãã¨ãããããã¨ããå ´åãåã«ãããã·ã¥ãã¼ãã«ã«ã¡ã½ãããæ ¼ç´ãã¦ããªãã¸ã§ã¯ãã®ä»£ç¨ã¨ãã¦ä½¿ãã°ãå®ç¨ä¸ã¯ãããã§äºè¶³ãã¡ãã£ãããããã§ãããã
ã¤ã¾ããè¤æ°ã®ã¯ã©ã¹ããããããããã¡ã½ããä¸è¦§ãåãåºãããã®ã¡ã½ããä¸è¦§ã¨ããã®æå±ã¤ã³ã¹ã¿ã³ã¹ããã¢ã«ãã¦ãã¡ã½ããåããã¼ã«ãã¦ãããã·ã¥ãã¼ãã«ã«æ ¼ç´ãã¦ããã¨ãã
ãã®ãå¤éç¶æ¿ãªãã¸ã§ã¯ãã®ã¡ã½ãããå¼ã³åºãã¨ãããã¡ãã¡æååã§è¨è¿°ããã®ãã¦ã¶ã¤ããã¿ã¤ããã¹ãèµ·ããã®ãã¤ã¤ã ã¨ããã®ãªããC#ã®enumã使ãã°ãããå ´åã«ãã£ã¦ã¯ãç¹å®ã®å¦çã ããå¤é¨ã®ãã©ã¡ã¼ã¿ãã¡ã¤ã«ã§è¨è¿°ãã¦ããããã
ãã¡ãããæ¸ãè¾¼ã¿ç³»ã®ã¡ã¿ããã°ã©ãã³ã°æ©è½ã使ã£ãæ¹ãããããã¯ãã¨ã¬ã¬ã³ãã«ããã¾ãããã§ããå§åçå¤æ°ã®ããã°ã©ããæ¥ã æ ¼éãã¦ãããå§åçå¤æ°ã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãçç£æ§ãæ°æã¡ããããå®éã«ã¯ãããã»ã©ããããã§ããã
ãã¡ãããã¾ã£ããæ°ããããã°ã©ãã³ã°ãã©ãã¤ã ã®è¦æ±ãããã·ã¹ãã ã¨ããããããç 究室ã¬ãã«ã®ããã°ã©ãã³ã°ã¯å¥ã§ãããæ¸ãè¾¼ã¿ç³»ã®ã¡ã¿ããã°ã©ãã³ã°ãã§ããã¨ã§ããªãã¨ã§ã大ããªå·®ãã§ãã±ã¼ã¹ãããããããã¾ãããã§ããããããããã°ã©ã ã¯ãããããRubyãªãããããªããRubyãªãããããããã£ã¨ãã£ã¨æ¬æ ¼çãªã¡ã¿ããã°ã©ãã³ã°ã®ã§ããCLOSã¨ãã§æ¸ãã¹ãã§ãããã
ãããã¦ã¿ãã¨ãèªã¿åºãç³»ã«ãããæ¸ãè¾¼ã¿ç³»ã«ããããã¡ã¿ããã°ã©ãã³ã°ãå¼·åã ããRubyãçç£æ§ãé«ããã¨ããã®ã¯ãå°ãªãã¨ãããã®è¨äºããã¯ãèªã¿åããªãã¨ãããã¨ãåããã¾ãã
ãã®ä»ãç´°ã ã¨ããé¨å
ã¾ããJavaã®ã«ã¼ããããããã«ã¦ã³ã¿ãåããªã©ãåé·ãªæ¸ãæ¹ã«ãã¦ãã·ã³ãã«ãªRubyã®ã«ã¼ãè¨è¿°ã¨æ¯è¼ãã¦ãã¾ãããããã¯ãã§ã¢ã§ã¯ããã¾ãããå®éã«ã¯ãJavaã§ã¯ã以ä¸ã®ããã«ã«ã¦ã³ã¿ã使ããªããã·ã³ãã«ãªã«ã¼ãè¨è¿°ãã§ãã¾ãã
for (int i : integers) { System.out.println(i); }
ããã ã¨ãRubyã®ã·ã³ãã«ãªã«ã¼ãè¨è¿°ã¨ããã»ã©å¤§ããªå·®ã¯ããã¾ããã
ãã¡ãããC#ã§ãåæ§ã«ãã·ã³ãã«ãªã«ã¼ãè¨è¿°ãã§ãã¾ãã
ã¾ããRubyã®ã·ã³ãã«ãªããããã£å®ç¾©ã¨ãã¦ã以ä¸ã®ãããªãµã³ãã«ããããsetterã¨getterãããããè¨è¿°ããªããã°ãªããªãJavaã®åé·ãã¨æ¯è¼ãã¦ãã¾ãããããããã§ã¢ã§ã¯ããã¾ããã
class Foo # ã¯ã©ã¹Fooãå®ç¾© attr_accessor :bar # ããããã£barãå®ç¾© attr_reader :baz # ããããã£bazãå®ç¾© end foo = Foo.new # Fooãªãã¸ã§ã¯ããä½æ foo.bar = 23 # ããããã£barã«å¤ãè¨å® puts foo.baz # ããããã£bazããå¤ãåå¾ãã¦åºå foo.baz = 42 # ã¨ã©ã¼ãbazã«ã¯setterãå®ç¾©ãã
ããããããã£ã¼ã«ãã§ãªããããããããããã£ã«ããã®ã¯ãèªã¿åºãã¨æ¸ãè¾¼ã¿ã®éã«ããªãããã®å¦çãå¶éãå ãããããã§ãã
åç´ã«èªã¿åºãã¨æ¸ãè¾¼ã¿ã®ä¸¡æ¹ã許å¯ããã ãã®ããããã£ãªãã°ãããã¯ãåãªããã£ã¼ã«ãã¨ãªããå¤ããã¾ããã®ã§ãèªã¿åºãã¨æ¸ãè¾¼ã¿ã®ä¸¡æ¹ãåºæ¥ãã ãã®ããããã£ãã·ã³ãã«ã«è¨è¿°ã§ãããã¨ãªã©ãã¡ãªããã§ã¯ããã¾ããã
ããã¦ããããèªã¿åºãã¨æ¸ãè¾¼ã¿ã®éã«ãããã°ã©ã ã³ã¼ãã«ãã£ã¦å¦çãå¶éãå ãããã®ã§ããã°ãRubyã ããã¨Javaã ããã¨C#ã ããã¨ãè¨èªã«é¢ä¿ãªããsetterã¨getterã«ç¸å½ããã¡ã½ããã¯è¨è¿°ããªããã°ãªãã¾ããã
ãã¡ãããsetter/getterã®è¨è¿°ãç
©éãã©ãããã¨ãã話ã§ããããã¨ãã°ãC#ã®setterã¨getterã®è¨è¿°ã¯ãããªãã·ã³ãã«ã«ãªã£ã¦ãã¾ãããããããããç
©éãªJavaã¨æ¯è¼ãã¦ãRubyã®è¨è¿°ãã·ã³ãã«ã§ããã¨ãã¦ããããã¯ãRubyãã·ã³ãã«ãªã®ã§ã¯ãªããRubyãC#ã«æ¯ã¹ãã¨ãJavaã®è¨è¿°ãããç
©éã ã¨ããã ãã®è©±ã§ãã
ãã¡ãããããããsetterãgetterãè¨è¿°ããã¾ã§ããªããåã«ãèªã¿åºããæ¸ãè¾¼ã¿ã®ã©ã¡ããçæ¹ã ãã許å¯ãããå ´åãããã¾ãã
ãããããã¨ãã°ãä¸è¨ã®attr_readerã®ã±ã¼ã¹ã®ããã«ãåã«èªã¿åºãã ãã§ãæ¸ãè¾¼ã¿ãç¦æ¢ããããããã£ã¼ã®ã·ã³ãã«ãªè¨è¿°ããããå ´åã
ã¾ã第ä¸ã«ããã£ã¼ã«ããæå®ãã¦ããããã©ããããããããã£ã¼ãèªåçæãããã¤ããã®ãã£ã¼ã«ãã¸ã®å
¨ã¦ã®ã¢ã¯ã»ã¹ãããããã£ã¸ã®ã¢ã¯ã»ã¹ã«å¤æãã¦ããããªãã¡ã¯ã¿ãã¼ã«ã®ããéçºç°å¢ã使ã£ã¦ããã®ã¯ããããªãã¨ãç¾å¨ã§ã¯ãããµãã話ã§ãã®ã§ãããããã±ã¼ã¹ã§ã¯ãåã«èªåçæããsetterã®é¨åã®ã³ã¼ããåé¤ããã°ããã ããªã®ã§ãä»ã®è¨èªã¨ãçç£æ§ã«ããããå·®ãåºã¾ããããã¨ãã°ãC#ã®å ´åãVisualStudioã«ããããæ©è½ãããã¾ãã
第äºã«ããã¨ããéçºç°å¢ã®æ©è½ã使ãããå®å
¨ã«æã ãã§ãã³ãã³ã¼ãã£ã³ã°ããã¨ãã¦ããããã»ã©å¤§ããæéããããã¾ããã
ãã¨ãã°ãC#ã ã¨ãä¸è¨ã®bazããããã£ã¯ã次ã®ããã«ããã¾ãã
int _baz; int baz{ get{ return _baz;}}
ãã®ç¨åº¦ã®ããããªã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ã¼ã§ãããã»ã©çç£æ§ã«å¤§ããªéããã§ãã®ã§ããããï¼
æå¾ã«ãåé¡ãåºãªãããã«è¨è¨äºã
ã§ããããã¨ãã°ããªã½ã¼ã¹ã®è§£æ¾ãå¿ãã§ãã©ãã«ãèµ·ããªãããã«ããæ§æã¯ããã¨ãã°C#ã§ãusingã¨ãã¦ä½¿ãã¾ãããã£ã¨è¨ãã¨ãRubyã®ãããªåçè¨èªãããJavaãC#ã®æ¹ããå®è¡æã«åé¡ãå¼ãèµ·ããã³ã¼ããæ¸ããªãããã«ãå¶éããæ©è½ã«ã¤ãã¦ã¯ããã£ã¨å
å®ãã¦ããã¨ããè¦æ¹ããã§ãã¾ããç¹ã«ãé£æ度ã®é«ãé¨åã¨ä½ãé¨åãåãåããçµé¨ã®æµ
ãããã°ã©ãããããããªã³ã¼ããè¨è¿°ãã¦ã·ã¹ãã ãã©ãã«ãé²ããããªãã¬ã¼ã ã¯ã¼ã¯ãè¨è¿°ããè½åã«ã¤ãã¦JavaãC#ãRubyãããå£ã£ã¦ããã¨ããè°è«ã¯ãããªãã ãªãããã®ã§ã¯ãªãã§ããããã
çµè«
ã¨ããããã§ãå°ãªãã¨ãããRubyãä»äºã«ä½¿ãã¹ãï¼ãã§ã¯Rubyã®çç£æ§ãé£èºçã«é«ãã¨ãããã¨ã®ã説å¾åã®ãã説æã«ã¯ãªã£ã¦ããªããã¨ããããã¾ãã
ããã¦ãããã¯ãä»ã®Rubyã®è§£èª¬è¨äºãåæãã¦ããåæ§ã§ãRubyã®çç£æ§ã®é«ããå§ä¼ããè¨äºã¯ãå·éã«åå³ãã¦ã¿ãã¨ãã©ãã説å¾åã«æ¬ ãããã®ã°ããã§ãã
å°ãªãã¨ããç§ã¯èª¬å¾åã®ããRubyã®çç£æ§ã«ã¤ãã¦ã®è¨äºã«ãç®ã«ããã£ããã¨ãããã¾ããã
è¦ã¤ããæ¹ã¯ããã¯ãã³ã¡ã³ããããã©ãã§ãä¸å ±ããã ããã¨å¹¸ãã§ãã
追è¨:çæ³ã¨ç¾å®
ãã©ãã¯ããã¯ã§ããã©ã®è¨èªã§ãçç£æ§ã«ãããã¦éãããªããã¨ãªã©ãå½ããåã®ãã¨ã§ããªãã¨ããã¡ããã¡ã解説ããã¾ã§ããªãããã¨ããç¥ã£ã¨ããããã¨ãã趣æ¨ã®ããã³ãããè¤æ°å ¥ãã¾ããã®ã§ãã¡ãã£ã¨è£è¶³ãå ¥ãã¾ãã
ã¾ãã確ãã«ãä¸è¨ã®æç« ã¯ããå§åçå¤æ°ã®ã±ã¼ã¹ã§ã¯ãçç£æ§ã®éãã¯ãããã°ã©ãã³ã°è¨èªèªä½ããæ¥ããã®ã§ã¯ãªããã¨ãããããããªãããããããªãã¨ã«è¨ãããã§ãç¥ã£ã¨ããããã¨è¨ãããããªãå½ããåã®ãã¨ããã¡ããã¡ãè«è¨¼ãã¦ãã ãã§ã¯ããã¾ãã
ãã¼ã¿ã«ã®çç£æ§ã¯ã使ããã©ã¤ãã©ãªã ã¨ããå®è¡ç°å¢ã®ãµãã¼ãã ã¨ããã¬ã¬ã·ã¼ã³ã¼ãã¨ã®ç¸æ§ã ã¨ããéçºç°å¢ã¨ã®ç¸æ§ã ã¨ããéçºã¡ã³ãã®ã¹ãã«ã¨ã®ç¸æ§ã ã¨ãããããããéå¤ã§éå±ãªæèçãã¡ã¯ã¿ã¼ã§æ±ºã¾ã£ã¦ãããã®ã§ããæèããç¬ç«ãããããã°ã©ãã³ã°è¨èªèªä½ã®çç£æ§ãã¨ãããã®ãè°è«ãããã¨èªä½ããå¤ãã®å ´åãæºä¸ã®ç©ºè«ã§ãããªããªã£ã¦ãã¾ããã¨ãããã¨ã¦ã常èçã§ãå½ããåã§ãéå±ã§ç¡é£ãªçµè«ã§ããã¤ã¾ãã大人ãè¨ããããªãµã²ãµã²ãªçµè«ã§ãã
è¦ããã«ãã¶ã£ã¡ããã¦è¨ãã¨ãRailsãã¹ã´ã¤ã®ã§ãã£ã¦ãRubyãã¹ã´ã¤ãããããªããã¨ãããã¨ã§ãã
ãããã¡ããããã£ã¨åä¾çãªãå°å¹´ãç®ããã©ãã©ããã¦èªããããªããèªåã®åµé æ§ã¨çç£æ§ããã«ã«å¼ãåºãã¦ãããã究極ã«æ°æã¡ããè¨èªã¯ã©ããªã®ãï¼ãã¨ãããã¨ã«ãããã°ã©ãã¼ã¯èå³ãæã¤ãã®ãªãã§ãããã
ã§ããããããéå¤ãªãããã¿ãæèãä¸åç¡è¦ãã¦ãç´çç¡å¢ãªåä¾ã®ããã«ãç´ç²ã«èªç±åº¦ã¨çç£æ§ã¨æ°æã¡ããã追æ±ãã¦è¯ãã®ãªã(ãã¡ããããããªåææ¡ä»¶ã¯ãç¾å®ã«ã¯ã¾ãæç«ããªãã§ãã(ç¬))ããã¨ãã°ã
ã¨ããçµè«ã«ãªã人ããããªãã«ããã®ã§ã¯ãªããã¨ãæãã¾ããå°ãªãã¨ããLisp-CLOSãçç¥ãã¦ãã人ãªãã°ããã¨ãæ¬å¼§ã«ã¢ã¬ã«ã®ã¼ããªããã°(ç¬)ã
ã¨ãã«ãLispã®defmacroã¨CLOSã®ã³ã³ããã¼ã·ã§ã³ã¯ãã°ããããæ°æã¡ããããã°ã©ãã³ã°ãã¿ãã°ã§ãããã«æ
£ãã¡ããã¨ãç¾å¨åºã使ããã¦ããã¡ã¸ã£ã¼ãªè¨èªå¦çç³»ã¯ãã»ã¨ãã©å
¨ã¦ã ã«ã ã«ãããªãã¦äººãããããããªãã§ããããããããããã¯ãå¥ã«ãLispãããããããããªããdefmacroããããã ãã§ãdefmacroçæ©è½ãããã°ãå¥ã«ã©ããªè¨èªã§ããã¾ããªãã®ããããããæ¬å¼§ã ããã®Lisp風S-Expressionãªãã使ãããããç¹å®ã®ããæ¹ã§å®£è¨ãããããã¯å
ã§ã¯ãå
¨ãèªç±ãªã·ã³ã¿ãã¯ã¹ã¨ã»ãã³ãã£ãã¯ã¹ã§ããã°ã©ã ãè¨è¿°ã§ãã¦ãããããS-Expressionã«å¤æããã¦ãå¼æ°ã¨ãã¦åãåããèªç±ã«Rubyã®ã¡ã¿ãªãã¸ã§ã¯ãã«å¤æã§ãããããªdefmacroæ©è½ãRubyã«ããã¨ãããããã ãã©ã
ã¨ããããRubyã«ãdefmacroã¿ãããªæ©è½ã¯ãããã§ã«å
¥ã£ã¦ããããªãã®ããªï¼Lispã®defmacroã»ã©ã§ãªãã«ãããRubyã§ã¯DSLãå®ç¾©ã§ããããããããããã«è¿ããã¨ã¯ã§ããã¯ãã ã¨æããã ãã©ã
ã¡ãªã¿ã«ãdefmacroã¯ãå¼æ°ã¨ãã¦ã¹ã¿ãã£ãã¯ãªãã³ã¼ããããã¯ããåãåãã®ã§ã¯ãªããå¼æ°ã¨ãã¦ããã³ã¼ãã®ã·ã³ã¿ãã¯ã¹ããªã¼ã®çæ§é ããåãåã£ã¦ããã®çæ§é ãããã°ã©ã çã«å¤æããçæ§é ãè¿å¤ã¨ãã¦è¿ãããããå®è¡ãããããã«ã§ããä»çµã¿ãªãã§ããã
ããã¯ãããã¼ã¿ã¨ããã°ã©ã ã³ã¼ãã«åºå¥ããªãããã¼ã¿ãããã°ã©ã ãããã¹ã¦S-Expressionã¨ããå½¢å¼ã§è¡¨ããããã¨ããLispã®å¼·ã¿ããã«ã«æ´»ç¨ããæ©è½ã§ããããããããèªç±åº¦ã¯ã¨ã¦ã大ããã極端ãªè©±ãHaskellçæ©è½ã使ããããã«ããã©ã¤ãã©ãªã§ããä½ãã¾ãã
ã¨ããããããã¯ãdefmacroã®ãã¯ã¼ã¨ãããããS-Expressionã®ãã¯ã¼ããdefmacroã使ããªãã¦ããåã«ãã¢ãã ã«S-Expressionããã¼ã¿ã¨ãã¦ãã¤ã³ããã¦ããã ãã§ããããå®è¡æã«ããã°ã©ã ã«å¤æããªããå®è¡ãããªãã¦ãã¨ãåºæ¥ã¾ãããã
ã§ããã®èªç±åº¦ããè¶ å¼·åãªã¡ã¿ãªãã¸ã§ã¯ãã·ã¹ãã ã§ããCLOSã¨çµã³ã¤ãã¨ãããã«é¢ç½ããã¨ã«ãªãããã§ãã
ãã¡ããããã®defmacroæ©è½ã¯ãJavaãC#ã®ãããªã³ã³ãã¤ã©åè¨èªã«ããçè«ä¸ã¯è¿½å å¯è½ãããªããã¨ãã¯ã¯æã£ã¦ãã¦ãè¦ã¯ãã³ã³ãã¤ã«æã«ã½ã¼ã¹ã³ã¼ãå ã®æå®ãããã¯ãæå®ã®è¦å(BNFã ã®æ£è¦è¡¨ç¾ã ã®ã§æå®ããè¦å)ã«å¾ã£ã¦ç²ãparseãã¦S-Expressionãã©ãã®ããã°ã©ããã«ãªå½¢å¼ã«å¤æããå¼æ°ã¨ãã¦æ¸¡ããã¦ãããã°ã©ã ã®ASTã«å¤æãããããªãããªããã»ããµã¨ãã¦åä½ããã¡ã½ãããå®ç¾©ã§ããããã«ããã°ã¤ã¤ã ããªã®ãããªããã¨æãã¾ããã³ã³ãã¤ã«æã«ã ãå®è¡ãããã¡ã½ããã§ããã
ããã¦ãã¼ãã¯ãLispã¯ãJavaãC#ãå¤ãã®LLè¨èªã®éå»ã§ããã¨åæã«ãæªæ¥ã§ãããããããªããã¨æã£ã¦ã¾ãã
ããã°ã©ãã³ã°è¨èªã®é²åã®æ´å²ã¨ã¯ãæ½è±¡åã®æ´å²ã§ãããã¾ãã
ããã¦ãæ½è±¡åã®ç®çã¯ãï¼ã¤ã§ãã
ä¸ã¤ã¯ãå¦çç³»ã«ããèªåæé©åã§ããããã°ã©ã ã³ã¼ãã¯ãæ½è±¡åº¦ãé«ãã»ã©ãèªåçã«æé©åããããã©ã¼ãã³ã¹ãåºããããã®ã§ãã
ä»å¾ããå¦çç³»ãã¤ã³ããªã¸ã§ã³ãã«ãªã£ã¦æé©åè½åãé«ã¾ãã°é«ã¾ãã»ã©ãããã°ã©ãã³ã°è¨èªã¯ãæé©åã®ããã®æ½è±¡åãæ±ããããé«ç´åãã¦ããã¨æãã¾ãã
ããã¦ãããä¸ã¤ã¯ãèªç±åº¦ã¨çç£æ§ã§ãããããæã£ããã¨ãã縦横ç¡å°½ã«æ¸ããããã«ãããããããã°ã©ãã³ã°è¨èªã¯ãæ½è±¡åº¦ãé«ããªã£ã¦ããã¾ãã
ããã¦ãå¾è
ã®èªç±åº¦ã¨çç£æ§ãç®çã¨ããæ½è±¡åã®è¡ãçãå
ã«ã¯ãæ¬è³ªçã«ã¯ãLisp-CLOSã«ããããS-Expressionãã¡ã¿ãªãã¸ã§ã¯ããããã³ã«ã¨åæ§ã®ãã®ã«ãªã£ã¦ãã¾ãã®ã§ã¯ãªããã¨ããäºæãããã®ã§ãã
ãã¡ãããããã¯ãä»ç¾å¨ã®è©±ã§ã¯ãªããä»ç¾å¨ã®è©±ã¨ãã¦èããã¨ããã©ã¤ãã©ãªãéçºç°å¢ãæ®åçãç´ äººåããããããã·ã¹ãã ã®å¤æ®µãéãããã¬ã¬ã·ã¼ãªã©ã®ãæèãç¡è¦ããã°ãã¨ãããã§ã£ããIFãã¤ããã¨ãã¦ã®è©±ã«ãªã£ã¦ãã¾ãã®ã§ãç¾å®ã«ã¯ãLisp-CLOSã¿ãããªéããã¦ãã©ã¤ãã©ãªãå¼±ãã£ã¦ãæ¬å¼§ã¢ã¬ã«ã®ã¼ãå¼ãèµ·ãããæ®åãã¦ããªãè¨èªãªããã§ã·ã¹ãã éçºãããã®ã¯ãã¾ããã»ã¨ãã©ããå¾ãªãã§ããã©ã
ã¡ãªã¿ã«ãLisp-CLOSã¯åãªãç 究室ã®ä¸ã«ãããªãè¨èªã§ã¯ãªããåç¨ã®Webã¢ããªã±ã¼ã·ã§ã³ãCLOSã§å®è£ ãããéç¨ããã¦ããä¾ãããããã§ãã
*1:ãã¨ãã°ãJavaã¯C++ããããããããã¯ãã¾ãã£ã¦ããã©ãC++ã«ãªãã èªåã¡ã¢ãªç®¡ç(GCã)ããã«ãã¹ã¬ãããããã±ã¼ã¸ã«ããåå空é管çãªã©ã¯ãJavaãåºãã¯ããåãããCLOS(Common LISP Object System)ãå®è£ ããã¢ã¬ã°ãCommon Lispã§ã¯ãã«ã«ä½¿ãã¦ã¾ããããé²éª¨ã«ãããã¸ãããã®ãã¯ãã§ããããã¨ãããããããããCommon Lispä»æ§çå®ã¡ã³ãããJavaã®ä»æ§çå®ã¡ã³ãã«å ¥ã£ã¦ãªãã£ãã£ãï¼ Guy L Steel Jr.ã¨ããJavaãæåã«çºè¡¨ãããã¨ãããã§ã«ãCLOSãC++ãé·å¹´ããã¼ã«ä½¿ãè¾¼ãã ãã¨ã®ãã£ããªã¤ã©ã¯ããã®æ©è½ç¾¤ã«ããã²ãã¼ããªã¤ããã¼ããã¨æããã¤ã¶ããã¡ãã£ãã»ã©ãJavaã¯ãããã¨ãåããã ããã®è¨èªãªããã§ãã
*2:話ã¯è±ç·ãã¾ããã©ãåã«ã¤ãã¦ã¯ããã¡ãããã¢ããªã®ç¨®é¡ã«ãã£ã¦ã¯ãåä»ãããããéªéã§é¢åã«ãªã£ãããããã®ã§ãããéã«ãããã¡ãªããã«ãªããã¨ãããã®ã§ãåããããã¨èªä½ã¯ãåã«åãä¸åãã®åé¡ã«éãããããèªä½ã¯åã§ãæªã§ãããã¾ããããã ããåãããã¨ãæ°æã¡ãããã ãã¶ãã¡ã¼ã¸ãåãã¾ããåãããã¨ãã³ã³ãã¤ã©ãå°å¦æ ¡ã®å çã¨ãæ¯è¦ªã¿ããã«ããã¡ãã¡å°ãããããã¨ãè¨ãã®ã§(ã¡ãã£ã¨æ£ããããã ããªã®ã«ããã¡ãã¡ããçä»ããã¨ã)ãæ°åã害ãããã¨ãå¤ãã®ã§ãããã ãããããªãå°è¨ã«ãã£ã¦ãå±éºãªãã°ãæªç¶ã«é²ããããã¨ãå¤ãããããå®æããã¨ããå°è¨ããã¾ããããããªãã¨ãæã£ãããããã®ã§ãã