ãªããžã§ã¯ãæåã®å©ç¹
åŸæ¥ã®ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã®äŸ¡å€ã蚌æãããŠããåé¡ã®ã¬ãã¥ãŒããå§ããŸãããã
ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã¯ããªããžã§ã¯ãã®ç¶æ 管çã«åªããŠããããšã蚌æãããŠããŸãã ã¯ã©ã¹ããã£ãŒã«ããããã³ããããã£ã¯ãç¶æ ãå®çŸ©ããŠæäœã§ãã匷åãªããŒã«ã§ãã ç¶æ ã衚瀺ãããããã®æ段ãããã°ã©ãã³ã°èšèªã«çµã¿èŸŒãŸããŠãããããã³ã³ãã€ã«äžãšå®è¡äžã®äž¡æ¹ã§ç¶æ ã«ã€ããŠçµè«ãåºãããšãã§ããŸãã ã³ã³ãã€ã«äžã«ã¯ã©ã¹ãªããžã§ã¯ãã®å®çŸ©ã確èªããå®è¡æã«ãã®ãã£ãŒã«ãã«ã€ããŠãªããžã§ã¯ããããŒãªã³ã°ã§ããŸãã
ãã¹ãŠã®ãªããžã§ã¯ãæåèšèªã«ãã£ãŠéåžžã«ãã解決ãããå¥ã®åé¡ã¯ããªããžã§ã¯ãã®ç¶æ ã«é¢é£ããæäœã®è¡šç€ºã§ãã ãã®ãããªæäœã¯ããããªãçš®é¡ã®ã³ã©ãã¬ãŒã·ã§ã³ã«ãé¢äžããŸããã 圌ãã¯ææè ã«ããŒã«ã«ã§ãã ã¯ã©ã¹ã¡ãœãããå®çŸ©ããããšã«ãããããŒã«ã«æäœãè¡šçŸããŸãã ã¯ã©ã¹ã§ã¡ãœãããå®çŸ©ããŠã€ã³ã¹ã¿ã³ã¹åãããšããã®ã¡ãœãããæã€ããšãããããŸãã ããã¯ããªãæçœã§ãã
ããŒã«ã«æäœã®ã¿ãæã€ãªããžã§ã¯ãã®è¯ãäŸãšããŠãRuby Stringã¯ã©ã¹ã䜿çšã§ããŸãã åæååã«ã¯ããã€ããŸãã¯æåã®é åããããŸãã ãã¹ãŠã®æäœã¯ãã®é åã§æ©èœããŸãã ãã®ãªããžã§ã¯ãã¯ç¬ç«ããŠããŸã-ä»ã®ãªããžã§ã¯ããšå¯Ÿè©±ããå¿ èŠã¯ãããŸããã 誰ããStringã®äœ¿ãæ¹ãç解ã§ãããšã¯æããªãã ãã®ãããªåé¡ã解決ããããã«ãOOèšèªãæ§ç¯ãããŸããã
ãªããžã§ã¯ãæåã®æ¬ ç¹
ãªããžã§ã¯ãæåã¯ããªããžã§ã¯ãã®çžäºäœçšã衚瀺ããããšã§å€±ãããŸãã æå³ã瀺ãããã«ãåãã°ã«ãŒãã®ãªããžã§ã¯ããçžäºäœçšãã2ã€ã®ã·ã¹ãã æäœïŒ2ã€ã®äœ¿çšã·ããªãªïŒãèŠãŠã¿ãŸãããã
æåã®äœ¿çšäŸ
ãã®å³ã¯ãäºãã«éä¿¡ãã4ã€ã®ãªããžã§ã¯ãã®ã·ã¹ãã æäœã瀺ããŠããŸãã
第äºã®ãŠãŒã¹ã±ãŒã¹
ãããŠãããã§ã¯å¥ã®äœ¿çšã·ããªãªãåããªããžã§ã¯ãã®ã°ã«ãŒãã䜿çšããå¥ã®ã·ã¹ãã æäœã瀺ãããŠããŸãã ããããã芧ã®ãšããããªããžã§ã¯ããšã¡ãã»ãŒãžéã®çžäºäœçšã®ã¢ãã«ã¯ãã§ã«ç°ãªã£ãŠããŸãã
ã³ãŒãã¯ã·ã¹ãã æäœã衚瀺ããŸãã
ãŠãŒã¹ã±ãŒã¹1ãšãŠãŒã¹ã±ãŒã¹2ã§è¡šããã2ã€ã®ã·ã¹ãã æäœãèŠãŸããã ã³ãŒãã§ã©ã®ããã«è¡šç€ºããŸããïŒ çæ³çãªã±ãŒã¹ã§ã¯ã1ã€ã®ãã¡ã€ã«ãéããŠãäœæ¥äžã®ãŠãŒã¹ã±ãŒã¹ã®ãªããžã§ã¯ãã®çžäºäœçšã®ã¢ãã«ãç解ã§ããããã«ããããšæããŸãã ãŠãŒã¹ã±ãŒã¹1ã«åãçµãã§ããå Žåã ãŠãŒã¹ã±ãŒã¹2ã«ã€ããŠäœãç¥ããããããŸããã ããã¯ãã³ãŒãã§ã®ãŠãŒã¹ã±ãŒã¹ã®æåãã衚瀺ã§ãããšèãããã®ã§ãã
æ®å¿µãªãããåŸæ¥ã®ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã§ã¯ããããè¡ãæ©äŒã¯ãããŸããã ãªããžã§ã¯ãã®ç¶æ ã衚瀺ããããŒã«ã«åäœãå²ãåœãŠãããŒã«ãæäŸããŸãã ãããããŠãŒã¹ã±ãŒã¹ãå®è¡ããããã«ãå®è¡æã®ãªããžã§ã¯ãå士ã®çžäºäœçšãèšè¿°ããè¯ãæ¹æ³ã¯ãããŸããã ãããã£ãŠãã·ã¹ãã æäœã¯ã³ãŒãã«è¡šç€ºãããŸããã
ãœãŒã¹ã³ãŒãïŒ=ã©ã³ã¿ã€ã
æçµçã«ãã³ãŒããèšè¿°ããäœããã®æ¹æ³ã§ã·ã¹ãã æäœãããã°ã©ãã³ã°ããŸãã ãããã©ããã£ãŠããã®ïŒ ããããå€ãã®å°ããªã¡ãœããã«åå²ããããããããŸããŸãªãªããžã§ã¯ãã«å²ãåœãŠãŸãã
ããã§ã¯ããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã«å¿ èŠãªãã¹ãŠã®ã¡ãœããããããã®ãªããžã§ã¯ãã«ã¯ã©ã³ããããŠããããšãããããŸãã æåã®ã·ããªãªãå®è¡ããã¡ãœããã¯ç·è²ã§åŒ·èª¿è¡šç€ºããã2çªç®ã®ã·ããªãªã¯èµ€è²ã§åŒ·èª¿è¡šç€ºãããŸãã ããã«ããããã®ãªããžã§ã¯ãã«ã¯ããã€ãã®ããŒã«ã«ã¡ãœããããããŸãã ãããã¯éãšèµ€ã®æ¹æ³ã§äœ¿çšãããŸãã
å³ã«ç€ºãããŠããåé¡ã¯ããœãŒã¹ã³ãŒããã©ã³ã¿ã€ã ã§äœãèµ·ãã£ãŠãããã衚瀺ããªãããšã§ãã ãœãŒã¹ã³ãŒãã¯ã4ã€ã®åå¥ã®ãªããžã§ã¯ãã«ã€ããŠãããããã«å€æ°ã®ã¡ãœãããå«ãŸããŠããããšã瀺ããŠããŸãã Rantheimã¯ãçžäºã«éä¿¡ãã4ã€ã®ãªããžã§ã¯ããããããããã®ã¡ãœããã®ããäžéšã®ã¿ããã®ãŠãŒã¹ã±ãŒã¹ã«é¢é£ããŠããããšã瀺ããŠããŸãã ãã®ççŸã«ãããããã°ã©ã ã®ç解ãè€éã«ãªããŸãã ãœãŒã¹ã³ãŒãã¯1ã€ã®ã¹ããŒãªãŒã瀺ããã©ã³ã¿ã€ã ã¯ãŸã£ããç°ãªãã¹ããŒãªãŒã瀺ããŸãã
ãŸããã·ã¹ãã æäœïŒäœ¿çšã·ããªãªïŒãæ瀺çã«å®çŸ©ããæ¹æ³ããªãããããã¹ãŠã®ã¡ãœããåŒã³åºãã远跡ããŠãããã°ã©ã ã§äœãèµ·ãã£ãŠããã®ããææ¡ããå¿ èŠããããŸãã ãã®ãŠãŒã¹ã±ãŒã¹ãç解ããããã«éãããšãã§ãããã¡ã€ã«ããããŸããã ããã«æªãããšã«ããã¹ãŠã®ã¯ã©ã¹ã«ã¯å€æ°ã®äœ¿çšã·ããªãªã®ã¡ãœãããå«ãŸããŠãããããå¿ èŠãªã¡ãœããããã£ã«ã¿ãŒã§é€å€ããã®ã«å€ãã®æéãè²»ããå¿ èŠããããŸãã
DCIãå©ãã«ãªããŸãïŒ
DCIïŒããŒã¿ãã³ã³ããã¹ããçžäºäœçšïŒã¯ããããã®åé¡ã解決ããããã«Trygve ReenskaugïŒMVCãã³ãã¬ãŒãã®äœæè ïŒã«ãã£ãŠäœæããããã©ãã€ã ã§ãã
æåã®ãŠãŒã¹ã±ãŒã¹ïŒDCIïŒ
DCIã¹ã¿ã€ã«ã§è¡šçŸãããæåã®ãŠãŒã¹ã±ãŒã¹ãèŠãŠã¿ãŸãããã
ããã§ã¯ããã®ãŠãŒã¹ã±ãŒã¹ãããããŒã¿ãšããŒã«ã«ã¡ãœããã®ã¿ãå«ãã·ã¹ãã ã®äžå€éšåãåé¢ããŠããŸãã åŸæ¥ã®ãªããžã§ã¯ãæåã®ãã¯ããã¯ã¯ãã¹ãŠããã®äžå€éšåãã¢ãã«åããããã«äœ¿çšã§ããŸãã ç¹ã«ãéçŽããªããžããªãªã©ã®ãã¡ã€ã³é§ååã®èšèšææ³ã䜿çšããããšããå§ãããŸãããç¶æ³äŸåã®åäœãçžäºäœçšã¯ãªããããŒã«ã«ãªæ¹æ³ãããããŸããã
çžäºäœçšãã©ã®ããã«ã¢ãã«åããã®ã§ããïŒ
çžäºäœçš-ã³ã³ããã¹ããèšè¿°ããããã®æ°ããæœè±¡åãå©çšå¯èœã«ãªããŸããã ã³ã³ããã¹ãã¯ãç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã®ãã¹ãŠã®ããŒã«ãå«ãã¯ã©ã¹ã§ãã å圹å²ã¯ãçžäºäœçšã«ãããååãè¡šããç¹å®ã®ãªããžã§ã¯ãã«ãã£ãŠæŒããããŸãã ã芧ã®ãšãããç¶æ³äŸåã®åäœã¯åœ¹å²ã«éäžããŠããŸãã ã³ã³ããã¹ãã¯ããªããžã§ã¯ãã«ããŒã«ãå²ãåœãŠãŠãã察話ãéå§ããã ãã§ãã
ã»ã«ã³ããŠãŒã¹ã±ãŒã¹ïŒDCIïŒ
ãªããžã§ã¯ãïŒãªããžã§ã¯ãADïŒã¯åããŸãŸã§ãã 2çªç®ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãã¡ãœãããè¿œå ããå¿ èŠã¯ãããŸããã æ瀺ãããŠãããã¹ãŠã®æ¹æ³ã¯ãåºæ¬çã§ãèªçµŠèªè¶³ã§ãããŒã«ã«ã§ãã åã ã®åäœã䜿çšããããã®ãã¹ãŠã®ã·ããªãªã¯ãã³ã³ããã¹ããšããŒã«ã§åŒ·èª¿ãããŸããã
ãŸããèµ€ãšç·ã®ã¡ãœãããåæã«è¡šç€ºãããªãããšã泚ç®ã«å€ããŸãã åã³ã³ããã¹ãã«ã¯ããã®å®è¡ã«å¿ èŠãªã¡ãœããã®ã¿ãå«ãŸããŠããŸãã
ããã¯ããŸãã«ãæœè±¡çã«èããããããããŸããã®ã§ãRubyã®ãµã³ãã«ã³ãŒããèŠãŠã¿ãŸãããã
ã³ãŒãäŸ
DCIå°çšã®Hello Worldã®äŸã次ã«ç€ºããŸãã DCIã«é¢å¿ããã人ã¯èª°ã§ããããå£åº§ããå¥ã®å£åº§ãžã®ééããå§ãŸããŸãã
ãã®äŸã¯ããŸãã«ãåçŽãããŠãéåžžã«åçŽãªã®ã§ããµãŒãã¹ãéåžžã®ãšã³ãã£ãã£ããŸãã¯é¢æ°ã䜿ã£ãŠããŸãè¡šçŸã§ããããšãç解ããŠããŸãã ãããã£ãŠãã³ãŒããã©ã®ããã«æ§æããå¿ èŠããããã瀺ãäŸãšããŠããã®äŸãèŠãŠãã ããã
ããã¢ã«ãŠã³ãããå¥ã®ã¢ã«ãŠã³ããžã®ééã«ã€ããŠè©±ããŠãããããäœããã®æ¹æ³ã§ã¢ã«ãŠã³ãæ å ±ãä¿åããå¿ èŠããããŸãã Accountã¯ã©ã¹ããããæ åœããŸãã æ®é«ãšãã©ã³ã¶ã¯ã·ã§ã³ã®ãªã¹ãã«é¢ããæ å ±ãä¿åããŸãã
class Account def decrease_balance(amount); end def increase_balance(amount); end def balance; end def update_log(message, amount); end def self.find(id); end end
ã芧ã®ãšãããããã®ãã¹ãŠã®ã¡ãœããã¯ããŒã«ã«ã§ãããã³ã³ããã¹ãã«äŸåããŸããã ã¢ã«ãŠã³ãã¯ééã«ã€ããŠäœãç¥ããŸããã 圌ã¯ãã©ã³ã¹ãè£å ãã圌ãããéãèªãããšã ãã«è²¬ä»»ããããŸãã ééã®ããžãã¯ã¯æ¬¡ã®ã³ã³ããã¹ãã«ãããŸãã
class TransferringMoney include Context def self.transfer source_account_id, destination_account_id, amount source = Account.find(source_account_id) destination = Account.find(destination_account_id) TransferringMoney.new(source, destination).transfer amount end attr_reader :source_account, :destination_account def initialize source_account, destination_account @source_account = source_account.extend SourceAccount @destination_account = destination_account.extend DestinationAccount end def transfer amount in_context do source_account.transfer_out amount end end ... end
ããŒã¿ããŒã¹ã«2ã€ã®ã¢ã«ãŠã³ããèŠæ±ããã³ã³ããã¹ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠã 転éã¡ãœãããåŒã³åºããŸãã ããããã2ã€ã®ã¢ã«ãŠã³ããã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãã転éé¡ã転éã¡ãœããã«æž¡ãããšã«æ°ã¥ããã§ãããã ããã«ãããã©ã®ãªããžã§ã¯ãããã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã®ã¢ã¯ã¿ãŒã§ãããã©ã®ããŒã¿ã®ã¿ã§ãããã瀺ããããšæããŸãã ã¢ã«ãŠã³ãã¯ã¢ã¯ã¿ãŒã§ãããæ¯ãèããããã転ééã¯ãã§ã«ããŒã¿ã§ãã
次ã«ãã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¢ã«ãŠã³ããªããžã§ã¯ãã«ããŒã«ãå²ãåœãŠãŸãã ãããã®ããŒã¿ãªããžã§ã¯ãããœãŒã¹ã¢ã«ãŠã³ããšåä¿¡è ã¢ã«ãŠã³ãã«ãªãããã«ãã¬ãŒãã³ã°ããŸãã
æåŸã«ããœãŒã¹ã¢ã«ãŠã³ãã§transef_outã¡ãœãããåŒã³åºããŠå¯Ÿè©±ãéå§ããŸãã ãã®äŸã§ã¯ãã³ã³ããã¹ãã¯ã€ã³ã¿ã©ã¯ã·ã§ã³ã®ã¿ãéå§ããŸãããäžéšã®è€éãªã±ãŒã¹ã§ã¯ãã¢ã¯ã¿ãŒã調æŽããããšãã§ããŸãã
ããã§ã¯ãããŒã«ã®å®è£ ãèŠãŠã¿ãŸãããã
class TransferringMoney include Context ... def transfer amount ... end module SourceAccount include ContextAccssor def transfer_out amount raise "Insufficient funds" if balance < amount decrease_balance amount context.destination_account.transfer_in amount update_log "Transferred out", amount end end module DestinationAccount include ContextAccssor def transfer_in amount increase_balance amount update_log "Transferred in", amount end end end
ãŸãããœãŒã¹ã¢ã«ãŠã³ãã«ååãªãéãããããšã確èªããæ®é«ããæ¯æ¿éé¡ãå·®ãåŒããŸãã ãã®åŸããéãåãåãããã«äŒããããã«ãã³ã³ããã¹ãå€æ°ãä»ããŠåä¿¡è ã¢ã«ãŠã³ããåŒã³åºããŸãã
ããã€ãã®èå³æ·±ãããšã«æ³šæããŠãã ããã
- äžå€ã®åäœãšã³ã³ããã¹ãäŸåã®åé¢ã ã¢ã«ãŠã³ãã¯ã©ã¹ã¯ããã®ããŒã¿ã®æäœæ¹æ³ã®ã¿ãç¥ã£ãŠããŸãã ãã¹ãŠã®ãã§ãã¯ãã³ã³ããã¹ãå ã®ãã¹ãŠã®ããžãã¹ããžãã¯ã
- ããŒã«ã¯ãã³ã³ããã¹ãå€æ°ãä»ããŠä»ã®ååã«ã¢ã¯ã»ã¹ããŸãã ç¹°ãè¿ããŸãããããã¯ã¢ã¯ã¿ãŒãããŒã¿ããåé¢ããããã«è¡ãããŸãã ãã¹ãŠãåŒæ°ãšããŠæž¡ããå Žåãã©ã®ããã«ããŠä¿³åªã誰ã§ã誰ãããã§ãªãããç¥ãããšãã§ããŸããïŒ ãã®ãããã³ã³ããã¹ãå€æ°ãéããŠã¢ã¯ã¿ãŒãåç §ãããã¹ãŠã®ããŒã¿ãªããžã§ã¯ããåŒæ°ãšããŠæž¡ãå¿ èŠããããŸãã
ã³ã³ããã¹ããšäž¡æ¹ã®åœ¹å²ïŒ
class TransferringMoney include Context def self.transfer source_account_id, destination_account_id, amount source = Account.find(source_account_id) destination = Account.find(destination_account_id) TransferringMoney.new(source, destination).transfer amount end attr_reader :source_account, :destination_account def initialize source_account, destination_account @source_account = source_account.extend SourceAccount @destination_account = destination_account.extend DestinationAccount end def transfer amount in_context do source_account.transfer_out amount end end module SourceAccount include ContextAccssor def transfer_out amount raise "Insufficient funds" if balance < amount decrease_balance amount context.destination_account.transfer_in amount update_log "Transferred out", amount end end module DestinationAccount include ContextAccssor def transfer_in amount increase_balance amount update_log "Transferred in", amount end end end
äœããããŸãã
å±ææ§
DCIã¯ãã¢ã«ãŽãªãºã ãå€ãã®ç°ãªããã¡ã€ã«ã«åæ£ããŠããå ŽåãåŸæ¥ã®ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã®åé¡ã解決ããŸãã ãŠãŒã¹ã±ãŒã¹ã®å®è£ æ¹æ³ãç¥ãããå Žåã¯ã1ã€ã®ãã¡ã€ã«ãéãã ãã§æžã¿ãŸãã
ãã©ãŒã«ã¹
ã³ã³ããã¹ãã«ã¯ããããè¡šãå®è¡ã¹ã¯ãªããã®äžéšã§ããã¡ãœããã®ã¿ãå«ãŸããŸãã ãã®ãããäœæ¥äžã®åé¡ã«é¢ä¿ã®ãªãæ°åãŸãã¯æ°çŸã®ã¡ãœãããã¹ãã£ã³ããå¿ èŠã¯ãããŸããã
ãã·ã¹ãã ãšã¯ãããã³ãã·ã¹ãã ãšã¯ã
ãã¹ãŠã®ããŒã¿ãªããžã§ã¯ããšãã®ããŒã«ã«ã¡ãœããã¯ããã·ã¹ãã ãšã¯äœãããè¡šããŠããŸãã éåžžãã·ã¹ãã ã®ãã®éšåã¯å€æŽãããŠããŸããã ç¶æ³äŸåã®ããŒã¹ã®éãåäœã¯ããã·ã¹ãã ã®æ©èœãã§ãã å€åã®ãªãéšåãæ¥éã«å€åããéšåããåé¢ããããšã¯ãå®å®ãããœãããŠã§ã¢ãæ§ç¯ããããã®å¿ èŠæ¡ä»¶ã®1ã€ã§ãã DCIã¯ãã®åé¢ãæäŸããŸãã
- DCIã®ããŒã¿ã¯ããªããžã§ã¯ãã®å 容ã«é¢ãããã¹ãŠã瀺ãããã®è¿é£ã«ã€ããŠã¯äœã瀺ããŸããïŒãã·ã¹ãã ãšã¯äœããïŒ
- DCIã®ã³ã³ããã¹ãã¯ãçžäºäœçšãããªããžã§ã¯ãã®ãããã¯ãŒã¯ã«é¢ãããã¹ãŠã瀺ãããã®ã³ã³ãã³ãã«ã€ããŠã¯äœã瀺ããŸããïŒãã·ã¹ãã ã®åäœãïŒ
ãœãŒã¹ã³ãŒã== Rantaim
ãŸãããœãŒã¹ã³ãŒãã¯ã©ã³ã¿ã€ã ãšäžèŽããŸãã Rantimeã¯ã2ã€ã®ã¢ã«ãŠã³ããšæ¯æ¿é¡ãããããšã瀺ããŠããŸãã ããã¯ãã³ã³ããã¹ããéããšè¡šç€ºãããŸãã
æ瀺çãªåœ¹å²
DCIã®äž»ãªå©ç¹ã¯ãæ瀺çãªåœ¹å²ã§ãã å€ãã®ãã¶ã€ããŒã¯ããªããžã§ã¯ãèªäœã«ã¯è²¬ä»»ããªãããšã«åæããŸããããã¯å€ãã®åœ¹å²ã§ãã ããšãã°ããªããžã§ã¯ãã®äŸãšããŠç§ãåãäžããŸãã ç§ã¯æ¬¡ã®ç¹æ§ãæã£ãŠããŸãïŒç§ã¯ãã·ã¢ã§çãŸããŸãããç§ã®ååã¯ãã¯ã¿ãŒã§ããç§ã®äœéã¯çŽ65kgã§ãã ãããã®ããããã£ã¯ãå®éã«ããã€ãã®é«åºŠãªã³ãããã¡ã³ããè¡šçŸã§ããŸããïŒ ã§ããŸããã ããããç§ã家ã«åž°ã£ãŠå€«ã®åœ¹å²ãæããå§ãããšãç§ã¯ãã¹ãŠã®çµå©é¢ä¿ã®åé¡ã«è²¬ä»»ãæã€ããã«ãªããŸãã ãããã£ãŠããªããžã§ã¯ãã圹å²ãæãããŸãã ããŒã«ãåŸæ¥ã®ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã®æåç·ã«ãªããšããäºå®ã¯ééã£ãŠããŸãã
ãœãŒã¹
å®éã«ã¯èšäºèªäœïŒ
ãã®ã¢ã€ãã¢ã«èå³ãããå Žåã¯ã次ã®ãªãœãŒã¹ãã芧ã«ãªãããšããå§ãããŸãã
- Rubyã®DCI
- DCI-ããŒã¿ã³ã³ããã¹ãã€ã³ã¿ã©ã¯ã·ã§ã³ïŒã³ã©ãã¬ãŒã·ã§ã³ãªããžã§ã¯ããæå®ããããã®æ°ããããŒã«ããŒã¹ã®ãã©ãã€ã ïŒ
ããªããæ¬ãèªãããšã奜ããªããç§ã¯ããªãã«ãããã®3ã€ã®æ¬ãæšèŠããããšãã§ããŸãïŒ
- ãžã ã²ã€ã«ããã¯ãªãŒã³ã«ããŒã ãã®æ¬ã¯ãã«ããŒã®å®çšçãªDCIãã¬ãŒã³ããŒã·ã§ã³ã®å¿ èŠæ§ãæºãããŸãã 圌女ã¯ãŸã éçºäžã§ããããã§ã«ææã«èŠããŸãã
- ãªãŒã³ã¢ãŒããã¯ãã£ïŒã¢ãžã£ã€ã«ãœãããŠã§ã¢éçºã®ããã®James O. CoplienãšGertrudBjÞrnvigã«ããã ããã¯ãæŽç¶ãšããã¢ãŒããã¯ãã£ãšã¢ãžã£ã€ã«éçºã®åžå Žã§ã®æåã®æ¬ã§ããã ãã§ãªããããã2ã€ã®åŒ·åãªã¢ãããŒãã®éãã説æããããããã©ã®ããã«çµã¿åãããããšãã§ãããã瀺ããŠããŸãã ãŸããããã¯DCIãšåŒã°ããTrygve Reenskaugã®æ°ãããœãããŠã§ã¢ã¢ãŒããã¯ãã£ãç¹éããæåã®æ¬ã§ããããŒã¿ãã³ã³ããã¹ããçžäºäœçšã
- ãªããžã§ã¯ããã¶ã€ã³ïŒåœ¹å²ã責任ãããã³ã³ã©ãã¬ãŒã·ã§ã³ïŒRebecca Wirfs-Brockããã³Alan McKeanã«ããïŒã ãã®æ¬ã¯2002幎ã«ãªãªãŒã¹ããããããDCIã«é¢ããæ å ±ã¯å«ãŸããŠããŸããã ãã ãããªããžã§ã¯ãã®èšèšã圹å²ã®äœ¿çšãååã®ã¢ããªã³ã°ã«é¢ããåªããè³æãå«ãŸããŠããŸãã ãããã®ãããã¯ã¯ãDCIã®äžå¿çãªèãæ¹ã«éåžžã«è¿ããã®ã§ãã