
ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ãšã¯äœã§ããïŒ
ãŠã£ãããã£ã¢ã®èšäºã¯ãããã
ããŒã¿ã¹ããªãŒã ãšå€åã®æ¡æ£ã«çŠç¹ãåœãŠãããã°ã©ãã³ã°ãã©ãã€ã ã§ãã
ããšãæããŠã
ãŸã ã ãã®å®çŸ©ã¯ãæè¡çã«ã¯æ£ããïŒãŸã ïŒïŒãããã®ãã¹ãŠã®èåŸã«å®éã«é ãããŠãããã®ã«ã€ããŠéåžžã«ææ§ãªèããäžããŸãã äžæ¹ãåå¿æ§ã®æŠå¿µã¯åçŽã§èªç¶ã§ãããæ¬¡ã®äŸã§èª¬æããã®ãæåã§ãã
ç§ãã¡ã¯çãMicrosoft Excelãªã©ã®ã¹ãã¬ããã·ãŒãã䜿çšããããšããããŸãã ããŒãã«ã®ã»ã«ã«ããŠãŒã¶ãŒã¯ä»ã®ã»ã«ãåç
§ããæ°åŒãèšè¿°ã§ããŸãã ãããã®ããããã®å€ã倿Žããããšãæ°åŒãåèšç®ãããã»ã«ãèªåçã«æŽæ°ãããŸãã ããã«ãç§ãã¡ã®ã»ã«ãä»ã®æ°åŒã«åå ããŠããå Žåããããã¯èªåçã«åã«ãŠã³ãããããªã©ãé£éåå¿ã®çºçã«äŒŒãããã»ã¹ã«ãªããŸãã ãããã£ãŠãããããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®äž»ãªã¢ã€ãã¢ã§ãã
ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®ãããã¯ã«é¢ããå€ãã®èšäºïŒ
1ã2ã3ã4ãªã©ïŒãæ¢ã«ãããŸãããäž»ã«ãJavaScriptã®
bacon.js ãJavaã®
JavaRxãªã©ã®ã©ã€ãã©ãªã®åœ¢åŒã§ã
FRPããŒãžã§ã³ã®
ãªã¢ã¯ãã£ãã
説æããŠããŸãã ã ãã®èšäºã§ã¯ã
Jancyèšèªã§ã®ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®å®è£
ãšã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠèª¬æããŸãã ãã®è³æã¯ãJancyèšèªãèããããšããªããäœãæžããªããŠãèªãã®ãé¢çœãã§ãããããªããªããåŸã»ã©åœä»€åèšèªããã®åå¿æ§ãžã®ããªãçããã¢ãããŒãã瀺ãããã§ãã
ãããã®æ¢åã®ãªã¢ã¯ãã£ãã©ã€ãã©ãªã䜿çšããå Žåã§ãã
Observableãã¿ãŒã³ãå®è£
ã®éµãšãªããŸãã å®éã倿Žããåºãããããã«ã¯ãå°ãªããšããããã«é¢ããéç¥ãåãåãå¿
èŠããããŸãã 芳枬å¯èœãªãšã³ãã£ãã£ã¯ãéåžž2ã€ã®ããªããã£ãã«åå²ãããŸãïŒã©ã€ãã©ãªããšã«ç°ãªãåŒã³åºãæ¹ãè¡ãããŸãïŒã
- ã€ãã³ãã®ã¹ããªãŒã ïŒEventStream / Observable / Event / StreamïŒ;
- ããããã£ïŒããããã£/åäœ/屿§ïŒ-æéãšãšãã«å€åããå€ã
FRPã§ã¯ãããã¯ãã¹ãŠ
颿°ããã°ã©ãã³ã°ã®èŠçŽ ãèŠæ±ã
ãŸã ããã®ãããªããªããã£ãããè€éãªæ§é ãæ§ç¯ããã«ã¯ãmapãreduceãfilterãcombineãªã©ã®é«æ¬¡é¢æ°ã䜿çšãããŸãã ïŒå
ã®ãããŒãšã€ãã³ããã倿Žããã代ããã«ïŒã»ã«ã³ããªãããŒãšã€ãã³ããçæããŸãã ãªãã¶ãŒããã«ãšæ©èœããåŸãããã³ã³ããŒãã¯ãçè§£ããŠç¿åŸããã®ãããã»ã©é£ãããªããåæã«ã³ã³ããŒãã³ãéã®äŸåé¢ä¿ã
宣èšåœ¢åŒã§è¡šçŸã§ããŸãã ããã¯ãè€éãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã忣éåæã·ã¹ãã ã®ããã°ã©ãã³ã°ã«æé©ã§ãã æ¹åãã¹ãç¹ã¯ãããŸããïŒ
åé¡
æåã®åé¡ã¯ããã§ãã ã³ã³ãã€ã©ã§ãªãã¶ãŒããã«ã䜿çšããã«ãã©ã€ãã©ãªã¬ãã«ã§åå¿æ§ãå®è£
ãããŠããå Žå
ãExcelã§èªåçã«åèšç®ãããåŒã¯éæäžå¯èœãªçæ³ã®ãŸãŸã§ãã 代ããã«ãããã€ãã®ããããæåã§å®è¡ãããªãã¶ãŒããã«ã§çµåããå¿
èŠããããŸã-æ°åŒã®ããžãã¯ãè€éã«ãªãã»ã©ãonValue / assignã§å€ãé©åãªå Žæã«æžã蟌ã¿ãŸãã
ããããããªãŒãã³ãœãŒã¹ã®JavaScriptã³ã³ãã€ã©ã§ãã
Flapjaxã¯ãExcelã«äŒŒãåŒã«æãè¿ããã®ã«ãªã£ãã§ãããïŒãã®çš®ã®ãããžã§ã¯ããä»ã«ãããå Žåã¯ãã³ã¡ã³ãã«æžããŠãã ããïŒã Flapjaxã§ã¯BehavorãšåŒã°ããã¿ã€ã2ãªãã¶ãŒããã«ã¯ãåŒã§ä»»æã«çµã¿åãããŠãæ°ããBehavorãåºåã§ããŸãã

ãããããªã¢ã¯ãã£ãã©ã€ãã©ãªãšFlapjaxã®äž¡æ¹ã«åºæã®å¥ã®åºæ¬çãªåé¡ããããŸã-ããã¯
ããããã調çããªããåé¡ã§ãã ã€ãã³ããããããã£ãããã³çžäºãµãã¹ã¯ãªãã·ã§ã³ã®ãããŒããã€ã³ãã©ã¹ãã©ã¯ãã£ãäœæããåŸãã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ç¬èªã®ç掻ãå§ããŸãã ããŒã¿ã¯æµãã倿ãããŸããç§ãã¡ãå°ããããã«ãå¿
èŠãªã¢ã¯ã·ã§ã³ã¯ããŸããŸãªonValueãšonCompletedã§å®è¡ããããã¹ãŠãçŽ æŽãããã§ãã ããã§ãä»ã©ããã£ãŠæ¢ããŸããïŒ ãã¹ãŠã®ã«ãŒããªãã¶ãŒããã«ã調ã¹ãŠãæåã§ã€ãã³ãã®çºè¡ã忢ããŸããïŒ ããŸãçŸãããããŸããã ãããããã¹ãŠã忢ããã®ã§ã¯ãªãããªã¢ã¯ãã£ããã£ãã³ãã³ã·ãŒã°ã©ãã®äžéšã®ã¿ã忢ããå¿
èŠãããå Žåã¯ã©ãã§ããããã ç§ãã¡ã®ãªãã¶ãŒããã«ã®å€§éšåã¯ãæé»çãªããã/çµå/ãã£ã«ã¿ãŒçµæã®åœ¢ã§ååšããŸããïŒ
å°ãç°ãªãæ¹æ³ã§åå®åŒåãããšãæ¢åã®ãªã¢ã¯ãã£ãã©ã€ãã©ãªã®åé¡ã®1ã€ã¯ãïŒäž»ã«æ©èœçãªæ¹åæ§ã®ããã«ïŒèŠ³æž¬å¯èœãªãªããžã§ã¯ãã®1ã¬ãã«æ§é ãçæããããšã§ãïŒ
ãã ããæ¹å€ã¯ãäœããã®ä»£æ¿ææ®µãæäŸãããããåžžã«ç°¡åã§ãã ããã§ã¯ãåå¿æ§ã«é¢ããŠãžã£ã³ã·ãŒã«ã¯äœããããŸããïŒ
- ãªãã¶ãŒããã«ã䜿çšããæ°åŒã® Excelã®ãããªèªååèšç® -ããã°ã©ããéžæããå Žåã®ã¿ã
- ãªãã¶ãŒããã«éã§äŸåé¢ä¿ã¯ã©ã¹ã¿ãŒãã°ã«ãŒãåããã¯ã©ã¹ã¿ãŒå
ã®ãã¹ãŠã®ãµãã¹ã¯ãªãã·ã§ã³ãäžåºŠã«éå§ããã³åæ¢ããæ©èœã
次ã®ããã«ãªããŸãã
reactor TcpConnectionSession.m_uiReactor () { m_title = $"TCP $(m_addressCombo.m_editText)"; m_isTransmitEnabled = m_state == State.Connected; m_adapterProp.m_isEnabled = m_useLocalAddressProp.m_value; m_localPortProp.m_isEnabled = m_useLocalAddressProp.m_value; m_actionTable [ActionId.Connect].m_text = m_state ? "Disconnect" : "Connect"; m_actionTable [ActionId.Connect].m_icon = m_iconTable [m_state ? IconId.Disconnect : IconId.Connect]; m_statusPaneTable [StatusPaneId.State].m_text = m_stateStringTable [m_state]; m_statusPaneTable [StatusPaneId.RemoteAddress].m_text = m_state > State.Resolving ? m_remoteAddress.getString () : "<peer-address>"; m_statusPaneTable [StatusPaneId.RemoteAddress].m_isVisible = m_state > State.Resolving; }
ããã¯ãTCPæ¥ç¶
IOãã³ãžã£ã¿ãŒããã«ã»ãã·ã§ã³ã®ãœãŒã¹ã³ãŒãããã®æç²ã§ãã ãæ³åã®ãšããããã®ã³ãŒãã¯ã¹ããŒã¿ã¹ã®å€æŽãã³ã³ãããã¯ã¹å
ã®ããã¹ããªã©ã䜿çšããŠUIãæŽæ°ããŸãã
ãããŠä»ããããã©ã®ããã«æ©èœãããã«ã€ããŠã
äžè¬èšç»
ãŸããæ··ä¹±ãé¿ããããã«ãçšèªã«åæããŸãã
Jancyã®
ããããã£ã«ã¯äžè¬çã«åãå
¥ããããŠããïŒéåå¿ïŒå®çŸ©ããããŸã-ããã¯å€æ°/ãã£ãŒã«ãã®ããã«èŠããã®ãºã¢ã§ãããã¢ã¯ã»ãµãŒé¢æ°ã§ã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã
ãã«ããã£ã¹ã ïŒãã«ããã£ã¹ãïŒãš
ã€ãã³ã ïŒã€ãã³ãïŒã¯ã颿°ãžã®ãã€ã³ã¿ãŒãèç©ããããããäžåºŠã«åŒã³åºãããã«äœ¿çšãããŸãïŒãã«ããã£ã¹ããšã€ãã³ãã®éãã«ã€ããŠã¯å°ãåŸã§ïŒã
Jancyã§ã¯ãã³ã³ãã€ã©ã¬ãã«ã§èгå¯ã§ããã®ã¯
ããã€ã³ãå¯èœãªããããã£ããã€ãŸã onChangedã€ãã³ããéããŠå€æŽãéç¥ã§ããããããã£ã
Jancyã®åå¿æ§ãšã¯ç°ãªããJancyã®åå¿æ§ã¯ãããµãã¹ã¯ã©ã€ãããæ°ãããªãã¶ãŒããã«ã®æé»çãªçæãªã©ã®å¯äœçšãããããããªãã¶ãŒããã«ã䜿çšãããŠããå Žæã«ãããŸãã«ãã¹ããŒããã«ãªããŸããã 圌女ã¯è§ã«ç«ã£ãŠå°ããŸããã åœä»€åã¹ã¿ã€ã«ã§ãã€ã³ãã£ã³ã°ããããã£ã«ã¢ã¯ã»ã¹ããã®ã¯ãéåžžã®å€æ°ã«ã¢ã¯ã»ã¹ãããããé«ããããŸããã
ããã¯ãäžèšã®Excelã®äºåŸåéèšã«ã©ã®ããã«é©åããŸããïŒ
ãªã¢ã¯ãã£ãã³ãŒãã®ç¹å¥ãªãŸãŒã³ãæäŸãããŠ
ãããããJancyã®ãªã¢ã¯ãã£ãããã³åœä»€åã®ååã®ç«¶åã®ãªãå
±åãå¯èœã§ãã
ååç äžé£ã®åœä»€ã®ä»£ããã«ããªã¢ã¯ã¿ãŒã¯Excelã®ãããªåŒ-åŒã§æ§æãããŸããåŒã¯ãããããã€ã³ãã£ã³ã°ããããã£ã䜿çšããå¿
èŠããããŸãã ãªã¢ã¯ã¿å
ã§ã¯ããã€ã³ãã£ã³ã°ããããã£ã¯ãåå¿çã«ãåäœããŸãã
ãããã£ãŠãJancyã®ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®åºæ¬çãªæ§æèŠçŽ ã¯ã
ã€ãã³ã ã
é¢é£ããããããã£ãããã³
ãªã¢ã¯ã¿ãŒã§ãã ãããã®ã¬ã³ã¬ã詳ããèŠãŠã¿ãŸãããã
ãã«ããã£ã¹ããšã€ãã³ã
Jancy
ã®ãã«ããã£ã¹ãã¯ãã³ã³ãã€ã©ãŒã«ãã£ãŠçæãããç¹å¥ãªã¯ã©ã¹ã§ããã颿°ãžã®ãã€ã³ã¿ãŒãèç©ããããããäžåºŠã«åŒã³åºãããšãã§ããŸãã ãã«ããã£ã¹ã宣èšã¯é¢æ°å®£èšã«éåžžã«äŒŒãŠããŸããããã®ãã«ããã£ã¹ãã«æ ŒçŽããã颿°ãã€ã³ã¿ãŒã®ã¿ã€ããæç¢ºã«æ±ºå®ããå¿
èŠããããããé©ãããšã§ã¯ãããŸããã
foo (int x); bar ( int x, int y ); baz () { multicast m (int);
ãã«ããã£ã¹ãã¯ã©ã¹ã®ã¡ãœããã®è©³çްããšãã°ãåçŽãªãã«ããã£ã¹ããå®çŸ©ããŸãã
multicast m (int);
äžèšã®äŸã§çæããããã«ããã£ã¹ãã¯ã©ã¹ã«ã¯ã次ã®ã¡ãœããããããŸãã
void clear (); intptr set (function* (int));
setããã³addã¡ãœããã¯ãremoveã¡ãœããã§äœ¿çšã§ããç¹å®ã®æŽæ°Cookieãè¿ãããã«ããã£ã¹ããããã€ã³ã¿ãŒã广çã«åé€ããŸãã
äžéšã®ã¡ãœããã«ã¯ãæŒç®åã®åœ¢åŒã®ãšã€ãªã¢ã¹ããããŸãã
multicast m (); m = foo;
ãã«ããã£ã¹ãã¯ããã«ããã£ã¹ãã«èç©ããããã¹ãŠã®ãã€ã³ã¿ãŒãåŒã³åºã颿°ãžã®ãã€ã³ã¿ãŒã«ãã£ã¹ãã§ããŸãã ãããããããŸããããããŸããã€ãŸãããã®ãããªãã£ã¹ãã¯ãã©ã€ããïŒã©ã€ãïŒãªã®ãã¹ãããã·ã§ãããªã®ãã ã€ãŸãã颿°ãžã®ãã€ã³ã¿ãŒãäœæããåŸã«å
ã®ãã«ããã£ã¹ãã倿Žããå Žåããã®ãã€ã³ã¿ãŒã¯å€æŽã確èªããå¿
èŠããããŸããïŒ
ãããŸããã解決ããããã«ããã«ããã£ã¹ãã«ã¯ã¹ãããã·ã§ãããè¿ãgetSnapshotã¡ãœãããçšæãããŠããŸãã åæã«ããã£ã¹ãæŒç®åã¯ã©ã€ããã€ã³ã¿ãŒãæäŸããŸãã
foo (); bar (); baz () { multicast m (); m += foo; function* f1 () = m.getSnapshot (); function* f2 () = m; m += bar; f1 (45);
Jancyã®
ã€ãã³ãã¯
ãã¢ã¯ã»ã¹å¶éã®ãããã«ããã£ã¹ããžã®ç¹å¥ãª
ãã€ã³ã¿ãŒã§ãã远å ãšåé€ã®ã¿ãå®è¡ã§ããŸãã
foo () { multicast m (int); event* p (int) = m; p += bar;
ãã€ãã³ããã¿ã€ãã®å€æ°ãŸãã¯ãã£ãŒã«ãã宣èšãããšã
ãã¥ã¢ã«ã¿ã€ããäœæãããŸããããã¬ã³ããã®å Žåããã®ã¿ã€ãã¯ãã«ããã£ã¹ã修食åã䜿çšããããã®ããã«åäœãããã¹ãã¬ã³ãžã£ãŒãã®å Žåã远å ããã³åé€ãé€ããã¹ãŠã®ã¡ãœããã®åŒã³åºããçŠæ¢ãããã€ãã³ãã§ãã
Jancyã®ãã¥ã¢ã«ã¿ã€ãã®è©³çްJancyã®ã¢ã¯ã»ã¹ã¢ãã«ãšä»ã®ã»ãšãã©ã®ãªããžã§ã¯ãæåèšèªã®äž»ãªéãã¯ãã¢ã¯ã»ã¹æå®åã®æ°ã2ã€ã®
publicãš
protectedã«åæž
ãããŠããããšã§ãã
äžæ¹ã§ã¯ãããã«ããéçºè
ã¯ã ããäœã«ã¢ã¯ã»ã¹ã§ããããæ±ºå®ããéã®æè»æ§ã倧å¹
ã«äœäžããŸãã äžæ¹ããã®åçŽåãããã¢ãã«ã䜿çšãããšãå
šå¡ã
ãå人ãŸãã¯æµãã«æç¢ºã«åå²ããããšãã§ããŸããããã«ããã
äºé修食åã®å¯èœæ§ãéãããŸãã ãå人ããšãèŠç¥ãã¬äººãã«å¯ŸããŠç°ãªãæå³ãæã€ä¿®é£Ÿåãããã³ãããã®å©ããåããŠäœæããã
ãã¥ã¢ã«ã¿ã€ã ã
ãããã£ãŠãJancyã§ã¯ãåã
ã®åå空éAããšã«ãæ®ãã®äžçã¯ãç§ãã¡ããšããšã€ãªã¢ã³ãã®2ã€ã®ã«ããŽãªã«åé¡ãããŸãã åå空éAèªäœã«å ããŠã次ã®ãã®ã¯ãã€ã³ãµã€ããŒãã«å±ããŸãã
- Aããç¶æ¿ããã¯ã©ã¹ãŸãã¯æ§é ã®åå空éã
- åéãšããŠå®£èšãããåå空é
- Aåå空éã«é¢ããåã
- æ¡åŒµæ©èœïŒæ¡åŒµããŒã ã¹ããŒã¹ïŒA.
æ®ãã¯ãã¹ãŠãèŠç¥ãã¬äººãã§ãã ãææè
ãã¯åå空éã®ãããªãã¯ïŒãããªãã¯ïŒã¡ã³ããŒãšä¿è·ïŒä¿è·ïŒã¡ã³ããŒã®äž¡æ¹ã«ã¢ã¯ã»ã¹ã§ããŸããããã¹ãã¬ã³ãžã£ãŒãã¯ãããªãã¯ã¡ã³ããŒã®ã¿ã«ã¢ã¯ã»ã¹ã§ããŸãã ããã«ããå人ããŸãã¯ãèŠç¥ãã¬äººãã®ã°ã«ãŒãã«æå±ãããšããã¥ã¢ã«ãžã£ã³ã·ãŒä¿®é£Ÿåã®æå³ãå€ãããŸãã
èªã¿åãå°çšãã¥ã¢ã«ä¿®é£Ÿåã䜿çšããŠãèªã¿åãå°çšã¢ã¯ã»ã¹ããšã¬ã¬ã³ãã«æŽçã§ããŸãã Jancyã®éçºè
ã¯ãã¢ã¯ã»ã¹å¶åŸ¡ãç®çãšããåçŽãªgetterãäœæãã代ããã«ãèªã¿åãå°çšä¿®é£Ÿåã䜿çšããŠãã£ãŒã«ãã宣èšã§ããŸãã ãå人ãã®å Žåãèªã¿åãå°çšä¿®é£Ÿåã¯è¡šç€ºãããŸããããèŠç¥ãã¬äººãã®å Žåãèªã¿åãå°çšã¯
constãšããŠæ±ãããŸãã
class C1 { int readonly m_progress; foo () { m_progress += 25;
ãã®ã¢ãããŒãã®äž»ãªå©ç¹ã¯ãã³ãŒããããçããããèªç¶ã«ããããšã§ãã åçŽåããããã£ãŠããããŒã®ã²ãã¿ãŒãåæããŠæšãŠãå¿
èŠã®ãªããªããã£ãã€ã¶ãŒã®å éã¯ã坿¬¡ç广ãšåŒã¶ããšãã§ããŸãã
Jancyã®2çªç®ã®äºé修食åã¯
eventã§ãã ã€ãã³ãã®ææè
ã¯ããã¹ãŠã®ãµãã¹ã¯ã©ã€ããŒã«é»è©±ãããããããªã¹ããã¯ãªã¢ãããããæ©èœãªã©ã圌ãå®å
šã«å¶åŸ¡ããå¿
èŠããããŸãã ã€ãã³ãã¯ã©ã€ã¢ã³ãã¯ããµãã¹ã¯ã©ã€ããŒã®è¿œå ãŸãã¯åé€ã®ã¿ãå¯èœã§ãã ãå人ãã®å Žåãã€ãã³ã修食åãæã€ãã£ãŒã«ãã¯ã察å¿ããåŒæ°ã®çœ²åãæã€ãã«ããã£ã¹ããšåãããã«æ©èœããŸãã ãã¹ãã¬ã³ãžã£ãŒãã®å Žåããã®ãã£ãŒã«ãã¯ãã«ããã£ã¹ãã¡ãœãããžã®ã¢ã¯ã»ã¹ãå¶éããŸãã远å ãšåé€ã®åŒã³åºãã®ã¿ãèš±å¯ãããŸãã åŒã³åºããèšå®ãã¯ãªã¢ãgetSnapshotãããã³é¢æ°ãã€ã³ã¿ãŒãžã®ãã£ã¹ãã¯çŠæ¢ãããŠããŸãã
class C1 { event m_onCompleted ();
ããããã£
ããã°ã©ãã³ã°èšèªã®ã³ã³ããã¹ãã§ã¯ã
ããããã£ã¯ããŒã¿ã®ããã«èŠããåäœãããã®ã§ãããèªã¿åãããã³æžãèŸŒã¿æã«è¿œå ã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã åœãã®è¬èããªãã«ãJancyã¯ãããŸã§ã®åœ¢ãè²ããµã€ãºã®ããããã£ã®æãå®å
šãªå®è£
ãæäŸããŸãã
詳现ãšäŸå®çŸ©
èªã¿åãããã³æžã蟌ã¿äžã«ã¢ã¯ã·ã§ã³ãå®è¡ãã颿°ã¯
ã¢ã¯ã»ãµãŒãšåŒã°ã
ãŸã ãããããã£ãèªã¿åãããã®ã¢ã¯ã»ãµãŒã¯ã²ãã¿ãŒãšåŒã°ããã¬ã³ãŒãã¯ã»ãã¿ãŒãšåŒã°ããŸãã
Jancyã®åããããã£ã«ã¯ã1ã€ã®
ã²ãã¿ãŒãšããªãã·ã§ã³ã§1ã€ä»¥äžã®ïŒãªãŒããŒããŒããããïŒ
ã»ãã¿ãŒããããŸãïŒã€ãŸããJancyã«ã¯æžã蟌ã¿å°çšã®ããããã£ã¯ãããŸããïŒã ã»ãã¿ãŒããªãŒããŒããŒããããŠããå Žåãç¹å®ã®ã»ãã¿ãŒã®éžæã¯ããªãŒããŒããŒãããã颿°ãéžæãããã®ãšåãã«ãŒã«ã«åŸã£ãŠãããããã£ãžã®å€ã®å²ãåœãŠäžã«è¡ãããŸãã
ããããã£ã«ã»ãã¿ãŒããªãå ŽåãconstïŒããããã£ïŒãšåŒã°ããŸãã ä»ã®ããã°ã©ãã³ã°èšèªã§ã¯ãã»ãã¿ãŒãªãã®ããããã£ã¯éåžžèªã¿åãå°çšãšåŒã°ããŸãããJancyã«ã¯
constãš
readonlyã®æŠå¿µãå
±åããããïŒèªã¿åãå°çšã¯äºé修食åã§ãïŒã確ç«ãããå®çŸ©ãäœããã®æ¹æ³ã§åå®çŸ©ããå¿
èŠããããŸãã ãã®ãããJancyã§ã¯ãã»ãã¿ãŒã®ãªãããããã£ã¯constããããã£ã§ãã
ã·ã³ãã«ãªããããã£
ã»ãã¿ãŒããªãŒããŒããŒããããŠããªãåçŽãªããããã£ïŒã»ãšãã©ã®å®çšçãªã¿ã¹ã¯ã¯èŠçŽïŒã®å Žåãæãèªç¶ãªåœ¢åŒã®å®£èšãææ¡ãããŸãã
int property g_simpleProp; int const property g_simpleConstProp;
ãã®åœ¢åŒã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®å®£èšã«çæ³çã§ãããŸãã¯ãéçºè
ã宣èšãšã¡ãœããã®å®è£
ã®C ++ã¹ã¿ã€ã«ã奜ãå Žåã«æé©ã§ãã
int g_simpleProp.get () {
çºè¡šã®å®å
šãªåœ¢åŒ
ä»»æã®è€éãã®ããããã£ïŒã€ãŸãããªãŒããŒããŒããããã»ãã¿ãŒãããŒã¿ãã£ãŒã«ããè£å©ã¡ãœãããªã©ã®ããããã£ïŒã«ã¯ãå®å
šãªåœ¢åŒã®å®£èšããããŸãã
property g_prop { int m_x = 5;
ã€ã³ããã¯ã¹å¯èœãªããããã£
Jancyã¯ãã€ã³ããã¯ã¹å¯èœãªããããã£ããµããŒãããŠããŸãã é
åã®ã»ãã³ãã£ã¯ã¹ãæã€ããããã£ã ãã®ãããªããããã£ã®ã¢ã¯ã»ãµã¯ã远å ã®ã€ã³ããã¯ã¹åŒæ°ãåãå
¥ããŸãã ãã ããå®éã®é
åãšã¯ç°ãªããããããã£ã®ã€ã³ããã¯ã¹åŒæ°ã¯æŽæ°ã§ããå¿
èŠã¯ãªããå³å¯ã«èšãã°ããã€ã³ããã¯ã¹ãã®æå³ãæã€å¿
èŠã¯ãããŸããããã®äœ¿çšã¯éçºè
ã«ãã£ãŠå®å
šã«æ±ºå®ãããŸãã
int indexed property g_simpleProp (size_t i); property g_prop { int get ( size_t i, size_t j ); set ( size_t i, size_t j, int x ); set ( size_t i, size_t j, double x ); } foo () { int x = g_simpleProp [10]; g_prop [x] [20] = 100; }
èªåååŸããããã£
ã»ãšãã©ã®å Žåãã²ãã¿ãŒã¯ããããã£ã®çŸåšã®å€ãæ ŒçŽãããŠãã倿°ãŸãã¯ãã£ãŒã«ãã®å€ãè¿ãã ãã§ãããããããã£èªäœã®åäœã®ããžãã¯ã¯ã»ãã¿ãŒã§å
·äœåãããŸãã æããã«ããã®ãããªåãã«è¶³ããªãã²ãã¿ãŒã®äœæã¯ã³ã³ãã€ã©ãŒã«è»¢éã§ããŸã-ãããJancyã®ããããšã§ãã autogetããããã£ã®å Žåãã³ã³ãã€ã©ã¯ããŒã¿ãæ ŒçŽããã²ãã¿ãŒãšãã£ãŒã«ããèªåçã«äœæããŸãã ããã«ãã³ã³ãã€ã©ã¯å¯èœãªéãã²ãã¿ãŒããã€ãã¹ããŠããã£ãŒã«ããžã®çŽæ¥ã¢ã¯ã»ã¹ãçæããŸãã
int autoget property g_simpleProp; g_simpleProp.set (int x) { m_value = x;
ããããã£ã®åäœã®ç¹å¥ãªããžãã¯ãã²ãã¿ãŒã«åã蟌ãŸãããããŒã®ã»ãã¿ãŒãããŒã¿ãã¡ã¢ãªã»ã«ã«æ¿å
¥ããã ãã®å Žåã®éã®ç¶æ³ã¯ãŸãã§ãããç¹å¥ãªæ§æã®äœæã«å€ããŸããã
ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã«é©çšãããæãè峿·±ãã®ã¯ã
é¢é£ããããããã£ã§ãã ãµãã¹ã¯ã©ã€ããŒã«å€æŽãéç¥ã§ããããããã£ã ãæ³åã®ãšãããJancyã¯
ãã«ããã£ã¹ã/ã€ãã³ãã¡ã«ããºã ã䜿çšããŠãã€ã³ãã£ã³ã°ããããã£ãå®è£
ããŸãã
int autoget bindable property g_simpleProp; g_simpleProp.set (int x) { if (x == m_value) return; m_value = x; m_onChanged ();
é¢é£ããããããã£ã®å€æŽã«ã€ããŠéç¥ããã€ãã³ãã«ã¢ã¯ã»ã¹ããã«ã¯ã
bindingofæŒç®åã
䜿çšããŸãã
onSimplePropChanged () {
Jancyã¯ãå®å
šã«ã³ã³ãã€ã©ãŒãçæããã¢ã¯ã»ã¿ãŒïŒã²ãã¿ãŒãšã»ãã¿ãŒã®äž¡æ¹ïŒãšã®ããããã£ãŒã®ãã€ã³ãã£ã³ã°ããµããŒãããŠããŸãã ãããã®å€æ§ããããã£ã¯ããã€ã³ãå¯èœããŒã¿ãšåŒã°ããŸãã ãããã¯åäžã®ç®ç-倿Žã®ç¬éããã£ãããã-ãæäŸããåçŽãªèгå¯å¯èœãªå€æ°/ãã£ãŒã«ããšããŠæ©èœã§ããŸãïŒ
int bindable g_data; onDataChanged () {
ååç
Jancy
ã®ãªã¢ã¯ã¿ãŒã¯ããªã¢ã¯ãã£ãã³ãŒããŸãŒã³ã§ãã ãã¹ãŠã®äºåŸäŸåæ§ãšæé»çãªãµãã¹ã¯ãªãã·ã§ã³ã¯ããªã¢ã¯ã¿ãŒå
ã«ããŒã«ã©ã€ãºãããŸãã
å€éšã§ã¯ãreactorã¯éåžžã®é¢æ°ã®ããã«èŠããŸãããåºåããªã¢ã¯ã¿ãŒä¿®é£Ÿåãæå®ããŠããç¹ãç°ãªããŸãã 颿°ãšã¯ç°ãªããåãªã¢ã¯ã¿ãŒã¯ããªã¢ã¯ã¿ãŒãéå§ããã³åæ¢ã§ããéå§ãšåæ¢ã®2ã€ã®ãããªãã¯ã¡ãœãããæã€ç¹å¥ãª
ãªã¢ã¯ã¿ãŒã¯ã©ã¹ã®å€æ°ãŸãã¯ãã£ãŒã«ããäœæããŸãã éåžžã®é¢æ°ã®æ¬äœãæ§æããã¹ããŒãã¡ã³ãïŒã¹ããŒãã¡ã³ãïŒã®ä»£ããã«ããªã¢ã¯ã¿ãŒã®æ¬äœã¯äžé£ã®åŒã§æ§æãããååŒã¯ãã®å³åŽã®é¢é£ããããããã£ã䜿çšããå¿
èŠããããŸãã
State bindable m_state; reactor m_uiReactor () { m_isTransmitEnabled = m_state == State.Connected; m_actionTable [ActionId.Disconnect].m_isEnabled = m_state != State.Closed;
èµ·åæã«ããªã¢ã¯ã¿ãŒã¯äŸåé¢ä¿ã°ã©ããäœæãããã¹ãŠã®ãå¶åŸ¡ãããããã£ã®ãã¹ãŠã®é¢é£ã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããŸãã ãããã®ããããã倿Žããããšããã¹ãŠã®äŸååŒãåèšç®ãããŸãïŒãã¡ãããä»ã®ããããã£ã§éªåŽ©ã®ãããªå€æŽãåŒãèµ·ããå¯èœæ§ããããŸãïŒã
埪ç°äŸåé¢ä¿ãã©ãããŸããïŒçŸæç¹ã§ã¯ã埪ç°äŸåé¢ä¿ã®æŽæ°ã¯åã«ç¡èŠãããŸããã€ãŸããPã®å¶åŸ¡ããããã£ã®ããããã倿Žããããªã¢ã¯ã¿ãŒã§åŒã®åèšç®ãè¡ããããã®çµæããã®Pã®ããããã£ã®å€ã倿Žãããå Žåããã®ç¹°ãè¿ãã®å€æŽã¯ãªã¢ã¯ã¿ãŒã§ã®èšç®ã®ååž°çãªéå§ãåŒãèµ·ãããŸããã
å°æ¥çã«ã¯ããããããæ·±ãããŸã è¶
éããŠããå Žåããªã¢ã¯ã¿ãŒã«ã¯èš±å®¹ãããååž°ã®æ·±ããšå埩æŠç¥ã®èšå®ããããŸãïŒãšã©ãŒã§ãªã¢ã¯ã¿ãŒãç¡èŠ/忢ãã/ã³ãŒã«ããã¯ãåŒã³åºããªã©ïŒ
ãªã¢ã¯ãã£ãåŒã«å ããŠããªã¢ã¯ã¿ãŒã§ã¯ãçŽæçãªæ§æã§ãä»»æã®ã€ãã³ããšãã®åŠçã³ãŒãããªã³ã¯ã§ããŸãã ãã®ããã«ã
ã€ãã³ãã®ãã¶ã€ã³ãæäŸãããŸãã ãã®ã¢ãããŒãã«ãããUIã«å¯ŸããŠåŸæ¥ã®ã€ãã³ãã¢ãããŒãã䜿çšã§ãããšåæã«ãã€ãã³ããæåã§ãµãã¹ã¯ã©ã€ãããå¿
èŠããªããªããŸãã
reactor m_uiReactor () { onevent m_startButton.m_onClicked () {
ã·ã£ããããŠã³ãããšããªã¢ã¯ã¿ãŒã¯ãµãã¹ã¯ã©ã€ããããŠãããã¹ãŠã®ã€ãã³ããããµãã¹ã¯ã©ã€ããããŸããïŒãªã¢ã¯ã¿ãŒãã¯ã©ã¹ã®ã¡ã³ããŒã§ããå Žåãã·ã£ããããŠã³ã¯èŠªãªããžã§ã¯ãã®ç Žå£æã«èªåçã«çºçããŸãïŒã ãããã£ãŠãéçºè
ã¯ããªã¢ã¯ãã£ãã¢ãããŒã
ã䜿çšãã
å Žæ ïŒãªã¢ã¯ã¿ãŒãŸãŒã³ïŒãš
ã〠ïŒéå§/忢ïŒãè©³çŽ°ã«æ±ºå®ããããš
ãã§ããŸãã æé»ã®ãµãã¹ã¯ãªãã·ã§ã³ã¯ãã¹ãŠãŸãšããããç§è·¡çãª
ã調çããªããããããäœãã®ã¯éåžžã«ç°¡å
ã§ã ã
m_uiReactor.stop ();
ãã®å Žåããã¡ãããåããã€ã³ãã£ã³ã°ããããã£ãšä»ã®ã€ãã³ãã䜿çšããè€æ°ã®ãªã¢ã¯ã¿ãŒãååšããå¯èœæ§ããããŸã-äŸåé¢ä¿ãç¹å®ã®ã¯ã©ã¹ã¿ãŒã«è«ççã«ã°ã«ãŒãåããããã«å¿
èŠãªå Žåã
ãã¹ãŠäžç·ã«
ãã®ãããçŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¬ãŒã ã¯ãŒã¯ãçµã¿ç«ãŠãŠããªã¢ã¯ãã£ãã¹ã¿ã€ã«ã§äœ¿çšããããã«ããã¹ãŠã®ãã¥ãŒãããããŸãã
è€æ°ã®UIã¯ã©ã¹ class Widget { bitflag enum SizePolicyFlag { Grow, Expand, Shrink, Ignore, } enum SizePolicy { Fixed = 0, Minimum = SizePolicyFlag.Grow, Maximum = SizePolicyFlag.Shrink, Preferred = SizePolicyFlag.Grow | SizePolicyFlag.Shrink, MinimumExpanding = SizePolicyFlag.Grow | SizePolicyFlag.Expand, Expanding = SizePolicyFlag.Grow| SizePolicyFlag.Shrink | SizePolicyFlag.Expand, Ignored = SizePolicyFlag.Shrink | SizePolicyFlag.Grow | SizePolicyFlag.Ignore } protected intptr m_handle; SizePolicy readonly m_hsizePolicy; SizePolicy readonly m_vsizePolicy; setSizePolicy ( SizePolicy hpolicy, SizePolicy vpolicy ); bool autoget property m_isVisible; bool autoget property m_isEnabled; } opaque class Label: Widget { bitflag enum Alignment { Left, Right, HCenter, Justify, Absolute, Top, Bottom, VCenter, } char const* autoget property m_text; int autoget property m_color; int autoget property m_backColor; Alignment autoget property m_alignment; Label* operator new (char const* text); } opaque class Button: Widget { char const* autoget property m_text; event m_onClicked (); Button* operator new (char const* text); } opaque class CheckBox: Widget { char const* autoget property m_text; bool bindable property m_isChecked; CheckBox* operator new (char const* text); } opaque class TextEdit: Widget { char const* property m_text; TextEdit* operator new (); } opaque class Slider: Widget { int autoget property m_minimum; int autoget property m_maximum; int bindable property m_value; Slider* operator new ( int minimum = 0, int maximum = 100 ); }
ååçããã®äœ¿çš Slider* g_redSlider; Slider* g_greenSlider; Slider* g_blueSlider; int bindable g_color; Label* g_colorLabel; CheckBox* g_enablePrintCheckBox; TextEdit* g_textEdit; Button* g_printButton; int calcColorVolume (int color) { return (color & 0xff) + ((color >> 8) & 0xff) + ((color >> 16) & 0xff); } reactor g_uiReactor () { g_color = (g_redSlider.m_value << 16) | (g_greenSlider.m_value << 8) | (g_blueSlider.m_value); g_colorLabel.m_text = $"#$(g_color;06x)"; g_colorLabel.m_backColor = g_color; g_colorLabel.m_color = calcColorVolume (g_color) > 0x180 ? 0x000000 : 0xffffff; g_textEdit.m_isEnabled = g_enablePrintCheckBox.m_isChecked; g_printButton.m_isEnabled = g_enablePrintCheckBox.m_isChecked; onevent g_printButton.m_onClicked () { printf ($"> $(g_textEdit.m_text)\n"); } }
ããããã¹ã¯åžæ°
ã®çæ§
ã¯ãåœç€Ÿã®ã³ã³ãã€ã©ã®
ã©ã€ãããŒãžã«æåŸ
ãããããŠã³ããŒããã€ã³ã¹ããŒã«ããŸãã¯ãã«ããè¡ãããšãªããJancyã®äºåŸå¯Ÿå¿èœåããã¹ãã§ããŸãã
Jancyã®ãœãŒã¹ã³ãŒããããŠã³ããŒãããŠåé/調æ»ããã人ã¯ã
ããŠã³ããŒãããŒãžãããããè¡ãããšã
ã§ããŸã ã ã¡ãªã¿ã«ãsamples / 02_dialogãã©ã«ããŒã«ã¯ãããäžã®QTãŠã£ãžã§ããã«åå¿æ§ãæããäŸããããŸãã
ãããŠãJancyã®å®éã®ã¢ããªã±ãŒã·ã§ã³ãšãã®ãªã¢ã¯ãã£ãæ©èœã¯ãããã°ã©ã å¯èœãªã¿ãŒããã«/ã¹ããã¡ãŒ
IO Ninjaã§èŠãããšãã§ããŸãã