ç®æšã¯ããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®åºæ¬æŠå¿µã玹ä»ãããã¹ãŠãäžèŠãããšæããã»ã©è€éã§æããªãããšã瀺ãããšã§ãã

åºæ
ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ãšã¯äœã§ããïŒ
ãã®è³ªåã«çããããã«ã ãµã€ãã«ç®ãåããŸã ã ãªã¢ã¯ãã£ãã¢ããªã±ãŒã·ã§ã³ãæºãããªããã°ãªããªã4ã€ã®äž»èŠãªåºæºã瀺ãçŸããç»åããããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯é«éã§ããã©ãŒã«ããã¬ã©ã³ãã§ãããæ¡åŒµæ§ã«åªããŠããå¿ èŠããããŸãã
ãç§ãã¡ã¯ãã¹ãŠã®åãšãã¹ãŠã®æªã®ããã«ãã®ããã«èŠããŸãããïŒ
ãããã®èšèãæå³ãããã®ïŒ
- å¿çæ§
ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã«0.5ç§ã§çµæãæäŸããå¿ èŠããããŸãã ãã§ã€ã«ãã¡ãŒã¹ãã®åçãããã«èµ·å ããå¯èœæ§ããããŸããã€ãŸããäœãåé¡ãçºçããå Žåããç³ãèš³ãããŸããããåé¡ãçºçããŸããã 倩æ°ã海蟺ã§åŸ ã€ãããåŸã§åè©Šè¡ããŠãã ããã æäœãé·ãå Žåãé²è¡ç¶æ³ããŒããŠãŒã¶ãŒã«è¡šç€ºããŸãã éåžžã«é·ãå Žå-ãããªãã®ãªã¯ãšã¹ãã¯ã2042幎3æ18æ¥ã«å®è¡ãããŸãã éç¥ãéµéããŸããã - ã¹ã±ãŒã©ããªãã£ã¯ãè² è·ãããã£ããšãã«å¿çæ§ãæäŸããæ¹æ³ã§ãã æ¯èŒçæåãããµãŒãã¹ã®ã©ã€ããµã€ã¯ã«ãæ³åããŠãã ããã
- èµ·å-èŠæ±ãããŒã¯å°ããããµãŒãã¹ã¯1ã€ã®ã³ã¢ãæã€ä»®æ³ãã·ã³ã§å®è¡ãããŸãã
- ãªã¯ãšã¹ãã®ãããŒãå¢å ããŸã-ã«ãŒãã«ãä»®æ³ãã·ã³ã«è¿œå ããããªã¯ãšã¹ãã¯è€æ°ã®ã¹ã¬ããã§åŠçãããŸãã
- ããã«è² è·ãããããŸã-ãããåŠçã«æ¥ç¶ããŸã-ããŒã¿ããŒã¹ãšããŒããã©ã€ããžã®èŠæ±ã¯ã°ã«ãŒãåãããŸãã
- ããã«å€ãã®è² è·-ããå€ãã®ãµãŒããŒãäžããŠãã¯ã©ã¹ã¿ãŒã§äœæ¥ãæäŸããå¿
èŠããããŸãã
çæ³çã«ã¯ãã·ã¹ãã èªäœãè² è·ã«å¿ããŠæ¡å€§ãŸãã¯çž®å°ããå¿ èŠããããŸãã
- èé害æ§
ç§ãã¡ã¯äžå®å šãªäžçã«äœãã§ããããã¹ãŠãèµ·ããããšãåãå ¥ããŸãã ã·ã¹ãã ã§äœãåé¡ãçºçããå Žåããšã©ãŒåŠçãšå埩æ¹æ³ãæäŸããå¿ èŠããããŸã - ãããŠæåŸã«ãã¢ãŒããã¯ãã£ãã¡ãã»ãŒãžé§ååã¡ãã»ãŒãžã³ã°ã«åºã¥ããŠããã·ã¹ãã ã䜿çšããŠãããããã¹ãŠãéæããããã«æåŸ ãããŠããŸãã
ç¶è¡ããåã«ãã€ãã³ãé§ååã·ã¹ãã ãšã¡ãã»ãŒãžé§ååã·ã¹ãã ã®éãã«ã€ããŠè©³ãã説æããŸãã
ã€ãã³ãé§ååïŒ
- ã€ãã³ã-ã·ã¹ãã ã¯ãç¹å®ã®ç¶æ ã«å°éããããšãå ±åããŸãã
- ã€ãã³ãã«ã¯å€ãã®ãµãã¹ã¯ã©ã€ããŒãããå¯èœæ§ããããŸãã
- éåžžãã€ãã³ãã®ãã§ãŒã³ã¯çããã€ãã³ããã³ãã©ãŒã¯ïŒç©ççã«ãã³ãŒãçã«ãïŒãœãŒã¹ã«è¿æ¥ããŠããŸãã
- éåžžãã€ãã³ããœãŒã¹ãšãã®ãã³ãã©ãŒã«ã¯å ±éã®ç¶æ ããããŸãïŒç©ççã«ã¯ãæ å ±äº€æã«åãRAMã䜿çšããŸãïŒã
ã€ãã³ãé§ååãšã¯å¯Ÿç §çã«ãã¡ãã»ãŒãžé§ååã·ã¹ãã ã§ã¯ïŒ
- åã¡ãã»ãŒãžã«ã¯1人ã®åä¿¡è ããããŸããã
- ã¡ãã»ãŒãžã¯äžå€ã§ããåä¿¡ããã¡ãã»ãŒãžã®å 容ãå€æŽããããšã¯ã§ããŸããããã®ãããéä¿¡è ã¯ãããèªèããŠæ å ±ãèªãããšãã§ããŸãã
- ã·ã¹ãã ã®èŠçŽ ã¯ãã¡ãã»ãŒãžã®åä¿¡ã«å¿çããïŒãŸãã¯å¿çããªãïŒãããã·ã¹ãã ã®ä»ã®èŠçŽ ã«ã¡ãã»ãŒãžãéä¿¡ã§ããŸãã
ããã¯ãã¹ãŠç§ãã¡ã«æäŸããŠããŸã
俳åªã¢ãã«
éçºã®ãã€ã«ã¹ããŒã³ïŒ
- 俳åªã®æåã®èšåã¯1973幎ã®ç§åŠè«æ-Carl HewittãPeter Bishopãããã³Richard Steigerãã人工ç¥èœã®ããã®æ®éçãªã¢ãžã¥ã©ãŒACTOR圢åŒã
- 1986-ã¢ãŒã©ã³ãç»å Žã ãšãªã¯ãœã³ã¯ããã©ãŒã«ããã¬ã©ã³ã¹ãšãšã©ãŒã®ãªãäŒæãæäŸããéä¿¡æ©åšçšã®èšèªãå¿
èŠãšããŠããŸããã ãã®èšäºã®ã³ã³ããã¹ãã§ã¯ãäž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- ãã¹ãŠãããã»ã¹ã§ã
- ã¡ãã»ãŒãžã¯ã³ãã¥ãã±ãŒã·ã§ã³ã®å¯äžã®æ¹æ³ã§ãïŒErlangã¯é¢æ°åèšèªã§ããããã®äžã®ã¡ãã»ãŒãžã¯å€æŽã§ããŸããïŒã
- ..
- 2004-Scalaèšèªã®æåã®ããŒãžã§ã³ã ãã®ç¹åŸŽïŒ
- JVMãæèŒã
- æ©èœç
- ãã«ãã¹ã¬ããã®å Žåãã¢ã¯ã¿ãŒã¢ãã«ãéžæãããŠããŸãã
- 2009-ã¢ã¯ã¿ãŒã®å®è£ ã¯å¥ã®ã©ã€ãã©ãªã«å²ãåœãŠãããŸãã-Akka
- 2014-Akka.net-.Netã«ç§»æ€ãããŸããã
俳åªã¯äœãã§ããŸããïŒ
ã¢ã¯ã¿ãŒã¯åããªããžã§ã¯ãã§ããã次ã®ãšããã§ãã
- éåžžã®ãªããžã§ã¯ããšã¯ç°ãªããã¢ã¯ã¿ãŒã¯äºãã®ã¡ãœãããåŒã³åºãããšã¯ã§ããŸããã
- ã¢ã¯ã¿ãŒã¯ãäžå€ã¡ãã»ãŒãžãä»ããŠã®ã¿æ å ±ãéä¿¡ã§ããŸã ã
- ã¡ãã»ãŒãžãåä¿¡ãããšã俳åªã¯
- æ°ããã¢ã¯ã¿ãŒãäœæããŸãïŒéå±€ã®äžäœã«ãªããŸãïŒã
- ä»ã®ã¢ã¯ã¿ãŒã«ã¡ãã»ãŒãžãéä¿¡ãã
- éå±€å ããã³ä»¥äžã®ã¢ã¯ã¿ãŒãåæ¢ããŸãã
äŸãèããŠã¿ãŸãããã

ã¢ã¯ã¿ãŒAã¯ãã¢ã¯ã¿ãŒBã«ã¡ãã»ãŒãžãéä¿¡ããããšèããŠããŸãã圌ãæã£ãŠããã®ã¯ãActorRefïŒã¢ãã¬ã¹ïŒã ãã§ãã ã¢ã¯ã¿ãŒBã¯ã©ãã§ãããŸããŸããã
ã¢ã¯ã¿ãŒAã¯ãã·ã¹ãã ïŒActorSystemïŒãä»ããŠæåBãéä¿¡ããŸãã ã·ã¹ãã ã¯ãã¢ã¯ã¿ãŒBã®ã¡ãŒã«ããã¯ã¹ã«ã¬ã¿ãŒãå ¥ããã¢ã¯ã¿ãŒBãããŠã§ã€ã¯ã¢ãããããŸããã¢ã¯ã¿ãŒBã¯ãã¡ãŒã«ããã¯ã¹ããã¬ã¿ãŒãåãåããäœããå®è¡ããŸãã
å¥ã®ãªããžã§ã¯ãã§ã¡ãœãããåŒã³åºãããšã«æ¯ã¹ãŠãããã¯äžå¿ èŠã«è€éã«èŠããŸãããã¢ã¯ã¿ãŒãç¹å®ã®åºæ¿ã«åå¿ããŠäœããããããã«èšç·Žããã人ã ãšæ³åãããšãã¢ã¯ã¿ãŒã®ã¢ãã«ã¯çŸå®ã®äžçã«å®å šã«é©åããŸãã
ç¶ãšæ¯åãæ³åããŠãã ããïŒ

ç¶èŠªã¯æ¯åã®SMSkuã«ãéšå±ã®æé€ããéããèªåã®ããšãç¶ããŸãã æ¯åã¯SMSkuãèªã¿ãã¯ãªãŒãã³ã°ãéå§ããŸãã äžæ¹ãç¶ã¯ããŒã«ãŒãããŠããŸãã æ¯åã¯æé€ãçµäºããSMSãå®äºããéä¿¡ããŸãã ç°¡åããã§ããã
ããã§ãç¶ãšæ¯åã¯ä¿³åªã§ã¯ãªããäºãã®ã¡ãœãããåŒã£åŒµãæ®éã®ãªããžã§ã¯ãã§ãããšæ³åããŠãã ããã ç¶èŠªã¯ãéšå±ãæé€ãããæ¹æ³ã®ããã«æ¯åãåŒã£åŒµããæ¯åãæé€ãçµããŠç¶èŠªã«ã³ã³ãããŒã«ãæ»ããŸã§åŸ ã€ãããšãè¿œããŸãã çŸæç¹ã§ã¯ãç¶èŠªã¯ããŒã«ãŒããã¬ã€ã§ããŸããã ãã®ã³ã³ããã¹ãã§ã¯ãã¢ã¯ã¿ãŒã¢ãã«ãããé åçã«ãªãã€ã€ãããŸãã
ã§ã¯ãã«ç§»ããŸããã
Akka.NET
以äžã«æžãããŠããããšã¯ãã¹ãŠãJVMã®å ã®Akkaã«åœãŠã¯ãŸããŸãããç§ã«ãšã£ãŠã¯ãCïŒã¯Javaãããè¿ããããAkka.NETãäŸãšããŠäœ¿çšããŸãã
Akkaã®å©ç¹ã¯äœã§ããïŒ
- ã¡ãã»ãŒãžã³ã°ãä»ãããã«ãã¹ã¬ããã ããããçš®é¡ã®ããã¯ãã»ããã©ããã¥ãŒããã¯ã¹ãããã³å ±æã¡ã¢ãªã䜿çšããåŸæ¥ã®ãã«ãã¹ã¬ããã«ç¹æã®ãã®ä»ã®é åã«æ©ãŸãããå¿ èŠã¯ãããããŸããã
- ã·ã¹ãã ãšãã®ã³ã³ããŒãã³ãéã®ééçãªéä¿¡ã è€éãªãããã¯ãŒã¯ã³ãŒããå¿é ããå¿ èŠã¯ãããŸãã-ã·ã¹ãã èªäœãã¡ãã»ãŒãžã®å®å ãèŠã€ããŠãã¡ãã»ãŒãžã®é ä¿¡ãä¿èšŒããŸãïŒããã§UDPãšTCPã«ã€ããŠã®ãžã§ãŒã¯ãæ¿å ¥ã§ããŸãïŒã
- èªåçã«ã¹ã±ãŒã«ã¢ãããŸãã¯ã¹ã±ãŒã«ããŠã³ã§ããæè»ãªã¢ãŒããã¯ãã£ã ããšãã°ãè² è·ãããããšãã·ã¹ãã ã¯è¿œå ã®ã¯ã©ã¹ã¿ãŒããŒããçºçãããè² è·ãåçã«åæ£ã§ããŸãã
ããããã¹ã±ãŒãªã³ã°ã®ãããã¯ã¯éåžžã«åºç¯å²ã§ãããå¥ã®åºçç©ã«å€ããŸãã ãããã£ãŠããã¹ãŠã®ãããžã§ã¯ãã§åœ¹ç«ã€æ©èœã«ã€ããŠã®ã¿è©³ãã説æããŸãã
ãšã©ãŒåŠç
ã¢ã¯ã¿ãŒã«ã¯éå±€ããããããªãŒãšããŠè¡šãããšãã§ããŸãã å俳åªã¯èŠªãæã¡ããåäŸããæã€ããšãã§ããŸãã

Akka.NETããã¥ã¡ã³ã Copyright 2013-2018 Akka.NETãããžã§ã¯ã
åã¢ã¯ã¿ãŒã«å¯ŸããŠãç£ç£æŠç¥ãèšå®ã§ããŸãããåäŸãã«äœãåé¡ãçºçããå Žåã®å¯ŸåŠæ¹æ³ã§ãã ããšãã°ãåé¡ã®ãã俳åªããæã¡è² ããããåãã¿ã€ãã®æ°ãã俳åªãäœæããåãä»äºã圌ã«ä»»ããŸãã
ããšãã°ãAkka.net CRUDã§ã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããžãã¹ããžãã¯ãã®å±€ãã¢ã¯ã¿ãŒã«å®è£ ãããŠããŸãã ãã®ãããžã§ã¯ãã®ç®çã¯ãã¹ã±ãŒã©ãã«ã§ãªãã·ã¹ãã ã§ã¢ã¯ã¿ãŒã䜿çšããå¿ èŠããããã©ãããã€ãŸãã圹è ãç掻ãæ¹åããã®ããçã¿ãå¢ãã®ãã調ã¹ãããšã§ããã
Akkaã®çµã¿èŸŒã¿ãšã©ãŒåŠçãã©ã®ããã«åœ¹ç«ã€ãïŒ
GIF

- ãã¹ãŠãæ£åžžã§ãã¢ããªã±ãŒã·ã§ã³ãæ©èœãã
- ãªããžããªã«äœããèµ·ãããŸãããã5åã®ãã¡1åã ãçµæãåºãŸã
- ç§ã¯ãç£ç£æŠç¥ããæ¯ç§10åè©Šè¡ãã«èšå®ããŸããã
- ã¢ããªã±ãŒã·ã§ã³ã¯ïŒãã£ããã§ã¯ãããïŒåã³åäœããåé¡ãäœã§ããããç解ããæéããããŸãã
ãããããã®ãããªãšã©ãŒåŠçãèªåã§æžããŠã¿ããããªã誰ãããã¹ãããã®ãïŒã å ¬æ£ãªçºèšã§ãããé害ç¹ãå°ãªãå Žåã®ã¿ã§ãã
ãããŠãå°ãã®ã³ãŒãã ããããIoCã³ã³ãããŒå ã®ã¢ã¯ã¿ãŒã·ã¹ãã ã®åæåã®æ§åã§ãã
public Container() { system = ActorSystem.Create("MySystem"); var echo = system.ActorOf<EchoActor>("Echo"); //stop initialization if something is wrong with actor system var alive = echo.Ask<bool>(true, TimeSpan.FromMilliseconds(100)).Result; container = new WindsorContainer(); //search for dependencies //register controllers //register ActorSystem propsResolver = new WindsorDependencyResolver(container, (ActorSystem)system); system.AddDependencyResolver(propsResolver); actorSystemWrapper = new ActorSystemWrapper(system, propsResolver); container.Register(Component.For<IActorRefFactory>().Instance(actorSystemWrapper)); container.Register(Component.For<IDependencyResolver>().Instance(propsResolver)); }
EchoActorã¯ãéä¿¡è ã«å€ãè¿ãæãåçŽãªã¢ã¯ã¿ãŒã§ãã
public class EchoActor : ReceiveActor { public EchoActor() { Receive<bool>(flag => { Sender.Tell(flag); }); } }
ã¢ã¯ã¿ãŒããéåžžã®ãã³ãŒãã«æ¥ç¶ããã«ã¯ãAskã³ãã³ãã䜿çšããŸãã
public async Task<ActionResult> Index() { ViewBag.Type = typeof(Model); var res = await CrudActorRef.Ask<IEnumerable<Model>>(DataMessage.GetAll<Model>(), maxDelay); return View(res); }
åèš
俳åªãšã¹ããããŒãç§ã¯èšãããšãã§ããŸãïŒ
- ã¹ã±ãŒã©ããªãã£ãå¿ èŠãªå Žåã¯ãããããèŠãŠãã ããã
- è€éãªããžãã¹ããžãã¯ã®å Žåã¯ã次ã®çç±ã§äœ¿çšããªãæ¹ãè¯ã
- å¥åŠãªäŸåæ§æ³šå
¥ã å¿
èŠãªäŸåé¢ä¿ã§ã¢ã¯ã¿ãŒãåæåããã«ã¯ããŸãPropsãªããžã§ã¯ããäœæãããããActorSystemã«æž¡ããŠç®çã®ã¿ã€ãã®ã¢ã¯ã¿ãŒãäœæããå¿
èŠããããŸãã IoCã³ã³ãããŒïŒCastle WindsorãAutofacãªã©ïŒã䜿çšããŠå°éå
·ãäœæããã«ã¯ãæ¢è£œã®ã©ãããŒ-DependencyResolversããããŸãã ããããIoCã³ã³ãããŒãäŸåé¢ä¿ã®æå¹æéãå¶åŸ¡ããããšããŠããŠããã°ããããŠã·ã¹ãã ãéãã«èœã¡ããšããäºå®ã«çŽé¢ããŸããã
*ããããããªããžã§ã¯ãã«äŸåé¢ä¿ãæ³šå ¥ãã代ããã«ããã®äŸåé¢ä¿ãåã¢ã¯ã¿ãŒãšããŠé 眮ããå¿ èŠããããŸãã - ã¿ã€ãã³ã°ã®åé¡ã ActorRefã¯ããããåç §ããã¢ã¯ã¿ãŒã®ã¿ã€ãã«ã€ããŠäœãç¥ããŸããã ã€ãŸããã³ã³ãã€ã«æã«ã¯ãã¢ã¯ã¿ãŒããã®ã¿ã€ãã®ã¡ãã»ãŒãžãåŠçã§ãããã©ããã¯ããããŸããã
- å¥åŠãªäŸåæ§æ³šå
¥ã å¿
èŠãªäŸåé¢ä¿ã§ã¢ã¯ã¿ãŒãåæåããã«ã¯ããŸãPropsãªããžã§ã¯ããäœæãããããActorSystemã«æž¡ããŠç®çã®ã¿ã€ãã®ã¢ã¯ã¿ãŒãäœæããå¿
èŠããããŸãã IoCã³ã³ãããŒïŒCastle WindsorãAutofacãªã©ïŒã䜿çšããŠå°éå
·ãäœæããã«ã¯ãæ¢è£œã®ã©ãããŒ-DependencyResolversããããŸãã ããããIoCã³ã³ãããŒãäŸåé¢ä¿ã®æå¹æéãå¶åŸ¡ããããšããŠããŠããã°ããããŠã·ã¹ãã ãéãã«èœã¡ããšããäºå®ã«çŽé¢ããŸããã
ããŒã2ïŒãžã§ããã¹ããªãŒã
次ã«ãããäžè¬çã§äŸ¿å©ãªãããã¯ã§ãããžã§ãããããŒã«ç§»ããŸãããã ããã»ã¹ã§ã¢ã¯ã¿ãŒãšäŒãããšãã§ããªãå Žåãããã³ããšã³ããšããã¯ãšã³ãã®äž¡æ¹ã§Rxã¹ããªãŒã ã確å®ã«åœ¹ç«ã¡ãŸãã ãããã®å®è£ ã¯ãã»ãšãã©ãã¹ãŠã®ææ°ã®ããã°ã©ãã³ã°èšèªã§è¡ãããŠããŸãã ä»æ¥ã§ã¯ããã¯ãšã³ãã®ããã°ã©ãã§ããJavaScriptã§äœããããªããã°ãªããªãããšããããããRxJã®äŸãæããŸãã

Rxã¹ããªãŒã ã¯ããã¹ãŠã®äžè¬çãªããã°ã©ãã³ã°èšèªã§äœ¿çšã§ããŸãã
CC BY-NC 4.0ã§ã©ã€ã»ã³ã¹ãããŠããAndre Staltzã® ã äžè¶³ããŠãããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®æŠèŠ ã
ãžã§ããã¹ããªãŒã ãšã¯äœãã説æããããã«ããã«ã³ã¬ã¯ã·ã§ã³ãšããã·ã¥ã³ã¬ã¯ã·ã§ã³ããå§ããŸãã
åäžã®æ»ãå€ | è€æ°ã®æ»ãå€ | |
---|---|---|
åŒã
åæ ã€ã³ã¿ã©ã¯ãã£ã | T | IEnumerable <T> |
ããã·ã¥
éåæ ãªã¢ã¯ãã£ã | ã¿ã¹ã¯<T> | IObservable <T> |
ãã«ã³ã¬ã¯ã·ã§ã³ã¯ãããã°ã©ãã³ã°ã§ç§ãã¡ãæ £ããŠãããã®ã§ãã æãé¡èãªäŸã¯é åã§ãã
const arr = [1,2,3,4,5];
ãã§ã«ããŒã¿ãããã圌èªèº«ã¯ãã®ããŒã¿ãå€æŽããŸãããããªã¯ãšã¹ãã«å¿ããŠæäŸã§ããŸãã
arr.forEach(console.log);
ãŸããããŒã¿ãåŠçããåã«ãäœããã®æ¹æ³ã§ããŒã¿ãåŠçã§ããŸãã
arr.map(i => i+1).map(I => âmy number is â+i).forEach(console.log);
ããã§ãæåã¯ã³ã¬ã¯ã·ã§ã³ã«ããŒã¿ããªãããšãæ³åããŠã¿ãŸãããããããŒã¿ã衚瀺ãããããšã¯ééããªãéç¥ãããŸãïŒããã·ã¥ïŒã åæã«ãå¿ èŠãªå€æããã®ã³ã¬ã¯ã·ã§ã³ã«é©çšã§ããŸãã
äŸïŒ
source.map(i => i+1).map(I => âmy number is â+i).forEach(console.log);
ãœãŒã¹ã«1ãªã©ã®å€ã衚瀺ããããšãconsole.logã¯ãmy number is 1ããåºåããŸãã
ä»çµã¿ïŒ
æ°ãããšã³ãã£ãã£ã衚瀺ãããŸã-件åïŒãŸãã¯èŠ³æž¬å¯èœïŒïŒ
const observable = Rx.Observable.create(function (observer) { observer.next(1); observer.next(2); observer.next(3); setTimeout(() => { observer.next(4); observer.complete(); }, 1000); });
ããã¯ãç¶æ ã®å€åã«é¢ããéç¥ãéä¿¡ããããã·ã¥ã³ã¬ã¯ã·ã§ã³ã§ãã
ãã®å Žåã4ç§åŸã«1ã2ã3ã®æ°åãããã«è¡šç€ºãããã³ã¬ã¯ã·ã§ã³ã¯ãå®äºãããŸãã ããã¯ãã®ãããªç¹å¥ãªã¿ã€ãã®ã€ãã³ãã§ãã
2çªç®ã®ãšã³ãã£ãã£ã¯Observerã§ãã 圌ã¯ãµããžã§ã¯ãã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããåä¿¡ããããŒã¿ã§äœããããããšãã§ããŸãã äŸïŒ
observable.subscribe(x => console.log(x)); observable.subscribe({ next: x => console.log('got value ' + x), error: err => console.error('something wrong occurred: ' + err), complete: () => console.log('done'), }); observable .map(x => 'This is ' + x) .subscribe(x => console.log(x));
1ã€ã®ãµããžã§ã¯ããå€ãã®ãµãã¹ã¯ã©ã€ããŒãæã€ããšãã§ããããšãããããŸãã
ç°¡åã«èŠããŸããããªããããå¿ èŠãªã®ãã¯ãŸã æ確ã§ã¯ãããŸããã ãªã¢ã¯ãã£ããããŒã䜿çšããéã«ç¥ã£ãŠããå¿ èŠã®ããå®çŸ©ãããã«2ã€ç€ºãããã®åŸãå®éã«ããããã©ã®ããã«æ©èœããã©ã®ãããªç¶æ³ã§ãã®æœåšèœåãæ倧éã«çºæ®ããããã瀺ããŸãã
å·ãã芳枬å¯èœé
- 誰ãããµãã¹ã¯ã©ã€ããããšãã«ã€ãã³ãã«ã€ããŠéç¥ããŸãã
- ãµãã¹ã¯ãªãã·ã§ã³ã®æéã«é¢ä¿ãªããããŒã¿ã¹ããªãŒã å šäœãåãµãã¹ã¯ã©ã€ããŒã«å床éä¿¡ãããŸãã
- ããŒã¿ã¯ããµãã¹ã¯ã©ã€ããŒããšã«ã³ããŒãããŸãã
ããã¯ã©ãããæå³ã§ããïŒäŒç€ŸïŒè¢«éšè ïŒãã®ããã®é åžãæé ããããšã«ãããšããŸãããã ååŸæ¥å¡ïŒãªãã¶ãŒããŒïŒã¯ä»äºã«æ¥ãŠãã®ããã®ã³ããŒãåãåããŸãã 誰ãåãæ®ãããŠããŸããã
ããããªãã¶ãŒããã«
- ãµãã¹ã¯ã©ã€ãã®ååšã«é¢ä¿ãªããã€ãã³ãã«ã€ããŠéç¥ããããšããŸãã ã€ãã³ãã®æç¹ã§ãµãã¹ã¯ã©ã€ããŒãããªãã£ãå ŽåãããŒã¿ã¯å€±ãããŸãã
äŸïŒæãåŸæ¥å¡åãã®ãããã±ãŒããäŒç€Ÿã«æã¡èŸŒãŸããŸãã 圌ããé£ããŠæ¥ããããšããã¹ãŠã®ã²ã°ãã¯åãã§é£ãã§ãæé£ã®ããã«ãã€ãäœããŸãã ããããåŸã«æ¥ããã¯ããŠã¯ãã¯ããã€ãååŸããŸããã
ã©ã®ãããªç¶æ³ã§ãžã§ããã¹ããªãŒã ã䜿çšããŸããïŒ
æéã®çµéãšãšãã«é ä¿¡ãããããŒã¿ã¹ããªãŒã ãããå Žåã ããšãã°ããŠãŒã¶ãŒå ¥åã ãŸãã¯ãä»»æã®ãµãŒãã¹ããã®ãã°ã ãããžã§ã¯ãã®1ã€ã§ãNç§ã§ã€ãã³ããåéããããã¯å šäœãåæã«èšé²ããèªå·±èšè¿°åã®ãã¬ãŒãèŠãŸããã ããããªãŒã³ãŒããããŒãžãå æããŸããã Rxã¹ããªãŒã ã䜿çšãããå Žåãã¯ããã«ç°¡åã«ãªããŸãã

RxJs Reference / Observable ãCC BY 4.0ã®äžã§ã©ã€ã»ã³ã¹ãããããã¥ã¡ã³ã ã
ïŒãªã¢ã¯ãã£ããããŒã䜿çšããããŸããŸãªæäœã®å®è¡å 容ã説æããå€ãã®äŸãšåçããããŸãïŒ
source.bufferTime(2000).subsribe(doThings);
ãããŠæåŸã«ã䜿çšäŸã
Rxã¹ããªãŒã ã§ã®ããŠã¹ãžã§ã¹ãã£ãŒã®èªè
å€ãOperaãŸãã¯ãã®ç²Ÿç¥çãªåŸç¶è ã§ããVivaldiã«ã¯ãããŠã¹ãžã§ã¹ãã£ãŒã䜿çšãããã©ãŠã¶ã³ã³ãããŒã«ããããŸããã
Gif-Vivaldiã§ã®ããŠã¹ãžã§ã¹ãã£ãŒ

ã€ãŸããããŠã¹ã®äžäžãå·Šå³ã®åããããã³ãããã®çµã¿åãããèªèããå¿ èŠããããŸãã ããã¯Rxã¹ããªãŒã ãªãã§èšè¿°ã§ããŸãããã³ãŒãã¯è€éã§ç¶æãå°é£ã§ãã
ãããŠãRxã¹ããªãŒã ã§ã®è¡šç€ºã¯æ¬¡ã®ãšããã§ãã
æåŸããå§ããŸã-å ã®ã·ãŒã±ã³ã¹ã§æ€çŽ¢ããããŒã¿ãšåœ¢åŒãèšå®ããŸãã
//gestures to look for const gestures = Rx.Observable.from([ { name: "Left", sequence: Rx.Observable.from([{ x: -1, y: 0 }]) }, { name: "Right", sequence: Rx.Observable.from([{ x: 1, y: 0 }]) }, { name: "Up", sequence: Rx.Observable.from([{ x: 0, y: -1 }]) }, { name: "Down", sequence: Rx.Observable.from([{ x: 0, y: 1 }]) }, { name: "Down+Up", sequence: Rx.Observable.from([{ x: 0, y: 1 }, { x: 0, y: -1 }]) }, { name: "Up+Right", sequence: Rx.Observable.from([{ x: 0, y: -1 }, { x: 1, y: 0 }]) } ]);
ãããã¯åäœãã¯ãã«ãšãã®çµã¿åããã§ãã
次ã«ãããŠã¹ã€ãã³ããRxã¹ããªãŒã ã«å€æããå¿ èŠããããŸãã ãã¹ãŠã®Rxã©ã€ãã©ãªã«ã¯ãæšæºã€ãã³ããObservableã«å€æããããã®çµã¿èŸŒã¿ããŒã«ããããŸãã
const mouseMoves = Rx.Observable.fromEvent(canvas, 'mousemove'), mouseDowns = Rx.Observable.fromEvent(canvas, 'mousedown'), mouseUps = Rx.Observable.fromEvent(canvas, 'mouseup');
次ã«ãããŠã¹ã®åº§æšã2ã§ã°ã«ãŒãåãããããã®å·®ãèŠã€ããŠãããŠã¹ãªãã»ãããååŸããŸãã
const mouseDiffs = mouseMoves .map(getOffset) .pairwise() .map(pair => { return { x: pair[1].x-pair[0].x, y: pair[1].y-pair[0].y } });
ã€ãã³ããmousedownããšãmouseupãã䜿çšããŠãããã®åããã°ã«ãŒãåããŸãã
const mouseGestures = mouseDiffs .bufferToggle(mouseDowns, x => mouseUps) .map(concat);
concaté¢æ°ã¯ãçãããåããåãåããæ¹åãããããæã£ãŠããåããã°ã«ãŒãåããŸãã
function concat(values) {//summarize move in same direction return values.reduce((a, v) => { if (!a.length) { a.push(v); } else { const last = a[a.length - 1]; const lastAngle = Math.atan2(last.x, last.y); const angle = Math.atan2(vx, vy); const angleDiff = normalizeAngle(angle - lastAngle); const dist = Math.hypot(vx, vy); if (dist < 1) return a;//move is too short â ignore //moving in same direction => adding vectors if (Math.abs(angleDiff) <= maxAngleDiff) { last.x += vx; last.y += vy; } else { a.push(v); } } return a; }, []); }
X軞ãŸãã¯Y軞ã«æ²¿ã£ãåããçãããå ŽåããŒãã«ãªã»ãããããŸãã ãããŠãåŸãããå€äœåº§æšãã笊å·ã®ã¿ãæ®ããŸãã ãããã£ãŠãæ¢ããŠããåäœãã¯ãã«ãååŸãããŸãã
const normalizedMouseGestures = mouseGestures.map(arr => arr.map(v => { const dist = Math.hypot(vx, vy);//length of vector vx = Math.abs(vx) > minMove && Math.abs(vx) * treshold > dist ? vx : 0; vy = Math.abs(vy) > minMove && Math.abs(vy) * treshold > dist ? vy : 0; return v; }) ).map(arr => arr .map(v => { return { x: Math.sign(vx), y: Math.sign(vy) }; }) .filter(v => Math.hypot(vx, vy) > 0) );
çµæïŒ
gestures.map(gesture => normalizedMouseGestures.mergeMap( moves => Rx.Observable.from(moves) .sequenceEqual(gesture.sequence, comparer) ).filter(x => x).mapTo(gesture.name) ).mergeAll().subscribe(gestureName => actions[gestureName]());
sequenceEqualã䜿çšãããšãåä¿¡ããåããå ã®åããšæ¯èŒããäžèŽããå Žåã¯ç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã
GIF

â ããã§ãžã§ã¹ãã£ãŒã§éã¶ããšãã§ããŸã
ãžã§ã¹ãã£èªèã«å ããŠãHTMLãã£ã³ãã¹ã«ã¯åæããã³æ£èŠåãããããŠã¹ã®åãã®äž¡æ¹ã®æç»ããããŸãã ã³ãŒãã®å¯èªæ§ã¯ããã«åœ±é¿ãããŸããã
ããã«ãã1ã€ã®å©ç¹ããããŸããRxã¹ããªãŒã ã䜿çšããŠèšè¿°ãããæ©èœã¯ãç°¡åã«è¿œå ããã³æ¡åŒµã§ããŸãã
ãŸãšã
- Rxã¹ããªãŒã ãå«ãã©ã€ãã©ãªã¯ãã»ãŒãã¹ãŠã®ããã°ã©ãã³ã°èšèªã§äœ¿çšã§ããŸãã
- æéå ã«æ¡åŒµãããã€ãã³ãã¹ããªãŒã ãããå ŽåïŒãŠãŒã¶ãŒå ¥åãªã©ïŒãRxã¹ããªãŒã ã䜿çšããå¿ èŠããããŸãã
- Rxã¹ããªãŒã ã䜿çšããŠèšè¿°ãããæ©èœã¯ãç°¡åã«è£è¶³ããã³æ¡åŒµã§ããŸãã
- é倧ãªæ¬ é¥ã¯èŠã€ãããŸããã§ããã