æçš¿è
ïŒIgor Litvinenkoãã·ãã¢ã¢ãã€ã«éçºè
ã
ãã®èšäºã§ã¯ãé¢æ°åããã°ã©ãã³ã°ã«ã€ããŠèª¬æããŸãã ããæ£ç¢ºã«ã¯ãåœä»€åããã³ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã®åé¡ãæ€èšãã次ã«é¢æ°åããã°ã©ãã³ã°ãæ€èšãããã®äžã®ãããã®åé¡ã®è§£æ±ºçãèŠã€ããããšããŸãã ãŸããé¢æ°åããã°ã©ãã³ã°ã䜿çšããå Žåãšäœ¿çšããªãå Žåã確èªããŸãã
æŽå²ãã¢ãŒ
å°ãæŽå²ã ããŸããŸããã¹ãŠã®éçºæ¹æ³è«ãåŠè¡çãªæ
å ±æºããããããããŸããã ãã®åŸããã®ææ³ãæ®åãããŸã§ã«çŽ2ãæ°å幎ããããŸããã ããã¯ãç§ãã¡éçºè
ãããžã§ã³ãå€ããåé¡ã解決ããæ¹æ³ãå€ããããã®æéãå¿
èŠã ããã§ãã
ãWe Think FunctionallyãïŒãŸãã¯ãFunctional ThinkingãïŒãšããæ¬ã®äŸãæ¬åœã«æ°ã«å
¥ããŸããã ããªããæšããã§ããã森ã§æ倧ã®aãæã£ãŠãããšæ³åããŠãã ãããããã«ãããããªãã¯æé«ã§æãæåããæšããã«ãªãããšãã§ããŸãã ããããããªãã¯éèªã§ããã§ãŒã³ãœãŒã䜿çšããŠãäŒæ¡ã®æ°ããéåžžã«å¹æçã§çŸä»£çãªã³ã³ã»ãããèãåºãããšããããŒã±ãã£ã³ã°æ
åœè
ã®ã¡ã¢ãèªã¿ãŸããã ãã®åŸããã§ãŒã³ãœãŒãèªåã§æ³šæããŸãããã§ãŒã³ãœãŒã¯ããªãã«é
éããé梱ããŸãããã©ã®ããã«ãªã³ã«ãªããããããŸããã ããããããªãã¯woodã§æšæãåãæ¹æ³ãéåžžã«ããç¥ã£ãŠããŸãã ãããŠãããªãã¯ãã§ãŒã³ãœãŒãåããéåžžwithã§åãã®ãšåãããã«æšã§ãããåãå»ãããšããŸãã ãããŠããã¡ãããããªãã¯æåããŸãã-ããªãã¯åã³aã«æ»ã以å€ã«éžæè¢ããããŸããã ãããããã®åŸãé£äººãããªãã®ãšããã«æ¥ãŠããã§ãŒã³ãœãŒãå§ããæ¹æ³ã説æããŸã-ãããŠãæçµçã«ããªãã¯ãã§ãŒã³ãœãŒã§æ£®æãå¹æçã«åãå§ããŸãã
ããã¯ãé¢é£ããè³æïŒããšãã°ãããã¥ã¢ã«ããã¹ããã©ã¯ãã£ã¹ïŒã§å€§ãããªããããŠãæ°ããæ¹æ³è«ã䜿çšããŠå®å
šã«è§£æ±ºã§ããã¿ã¹ã¯ã®å±€ãæ確ã«åºå¥ããããŸã§ãã¢ã€ãã¢ãæŠå¿µããŸãã¯æ¹æ³è«ãç§ãã¡ããå€ããããšã¯ãªããšèšããŸãã
æŽå²ãèŠããšãæç¶ãåããã°ã©ãã³ã°ããã®ã¿ã¹ã¯ã®çŽ æŽãããä»äºãããããšãããããŸã-ããã¯éåžžã«é«éã§ããã ãããŠã1967幎ã«åœŒããæåã®ãªããžã§ã¯ãæåèšèªïŒSimula 67ïŒãæãã€ãããšãã誰ããã®èšèªãå¿
èŠãªçç±ãç解ããŠããŸããã§ãã-誰ããã¡ãœããã®æ£ããå®è£
ãèŠã€ããå¿
èŠããããšããäºå®ã«é¢é£ããããã©ãŒãã³ã¹ã®æ倱ã«ã®ã¿æ³šæãæããŸããããŸãã¯ããããããã°ã©ã ã¯ãã倧ããªã¿ã¹ã¯å±€ãå®è¡ãå§ããŸãããããè€éã«ãªããéçºããŒã ã倧ãããªãããªããžã§ã¯ãæåã®ã¢ãããŒããæ£ç¢ºã«æ¬ ããŠããããšãå€æããŸããã ãã®çµæã1983幎ã«å°å
¥ãããC ++ã®å°å
¥ã«ããããœãããŠã§ã¢éçºãžã®åœä»€åãªããžã§ã¯ãæåã¢ãããŒããäžè¬çã«ãªããŸããã
åã話ã¯ãJavaã.NETãªã©ã®ã¯ãã¹ãã©ãããã©ãŒã èšèªã«ãåœãŠã¯ãŸããŸãã ã³ã³ã»ããã¯1980幎ã«å§ãŸããŸããããã®ç°å¢ã§ã¯ãApple 2ãšIBM PCã®2å°ã®ãã·ã³ã§Pascalã³ãŒããå®è¡ã§ããŸããã ãããããã®å Žåããã€ãã³ãŒããžã®è»¢éãšãã®åŸã®ãã·ã³ã³ãŒããžã®å€æã®ããã®å®¹éã¯ãŸã£ãããããŸããã§ããã ãŸãã90幎代ã«ãSunã¯Javaãå°å
¥ããŸããã çŸåšãã¯ãã¹ãã©ãããã©ãŒã Javaããã³.NETèšèªã®å°é家ã¯ãããŸããŸãªæ©æ¢°èªã®å°é家ãããã¯ããã«éèŠããããŸãã çµå±ããã§ã«90幎代ã«ã¯ãããé«äŸ¡ã§åŒ·åãªããŒããŠã§ã¢ããµãŒããŒã«é
眮ããå¿
èŠãªãã¹ãŠã®ã³ãŒããå®çšŒåäžã«å®è¡ãããšåæã«éçºãç¯çŽããæ¹ãè¯ãããšãæããã«ãªããŸããã éåžžã«åªãããªããžã§ã¯ãæåã¢ãã«ãšã¬ããŒãžã³ã¬ã¯ã¿ãŒãåããJavaãæ€èšããåŸãã»ãšãã©ã®äººã¯ãã¡ãããæåã®ã¡ã¢ãªç®¡çã«ç§»è¡ããããšãæãŸãªããªããŸããã
åœä»€åïŒããã³ãªããžã§ã¯ãæåïŒã¢ãããŒãã®åé¡
ãã ããåœä»€åã®ãªããžã§ã¯ãæåã¢ãããŒãã«ã¯æ¬ ç¹ããããŸãã
- ãšã³ããªãŒã®ãããå€ ã ãŸããçšèªãç解ããå¿
èŠããããŸããããšãã°ãç¶æ¿ãšã¯äœããã©ã®ããã«äœ¿çšããããããã«éèŠãªããšã«ã¯ãããã䜿çšããã«éåžžã®æ§æã䜿çšããããšãç¥ãå¿
èŠããããŸãã 第äºã«ããããžã§ã¯ãã«å
¥ãããã®éŸå€ããããŸãã ããšãã°ãã¢ã¯ãã£ããªéçºã®æ®µéã§ãããžã§ã¯ãã«ã¢ã¯ã»ã¹ããå Žåããªããžã§ã¯ããšãã®çžäºäœçšã«å¯ŸåŠããå¿
èŠããããŸãã
- æœè±¡åãžã®éèªæãªå
èš³ ã ç©çãªããžã§ã¯ããããã°ã©ãã³ã°ãªããžã§ã¯ãã«çŽæ¥è»¢éããããšã¯å¿
ãããæå³ããããŸããããããã®ãªããžã§ã¯ããäœããã®æ¹æ³ã§ç²ç ããè¿œå ãªããžã§ã¯ããå°å
¥ããããŸããŸãªã¬ãã«ã®æœè±¡åãäœæããå¿
èŠããããŸãã åæã«ãã©ã®æ¬ããã§ããããæ£ããè¡ãããšãåŠã¶ããšã¯ã§ããŸãã-ãšã«ããçµéšãã€ããŠããã§ãããã æ¬ããåŠã¶ããšãã§ããã®ã¯ãã¶ã€ã³ãã¿ãŒã³ã ãã§ãããå¥ã®åé¡ããããŸãã
- 誀解ãã¿ãŒã³-ã¢ã³ããã¿ãŒã³ ã ãã¶ã€ã³ãã¿ãŒã³ã¯ãã³ãŒãã®äžéšã移åããããšãç®çãšããŠãããå¯èœãªéãæ·±ããã€ãŸãç¹å®ã®å®è£
ãŸã§å¯èœãªéãäœãå€æŽã§ããŸãããäžè¬çãªããžãã¯ã¯å€æŽãããŸããã ããã¯ãã¡ããéåžžã«äŸ¿å©ã§ããã人ã
ã¯æ ãè
ã§ãããèªåãäœãããŠããã®ããåžžã«ç解ããŠããããã§ã¯ãããŸããã ãã®ããããã¶ã€ã³ã®ã¢ã³ããã¿ãŒã³ãç»å ŽããŸããã ããšãã°ããã¹ãŠã®äººã®ãã¹ãŠããèªèãããæè»æ§ã®ã»ãšãã©ã奪ããç¥ã®ãªããžã§ã¯ãããç»å ŽããŸããã ãã«ã¿ãŒã¬ã€ã¹ãã¯ã©ã¹ãç»å ŽããŸããããã®ã¯ã©ã¹ãäœãããã®ãã¯ããããŸããããªãããã«ããã®ãç解ã§ããŸããã ãããã£ãŠãåœä»€åããã°ã©ãã³ã°ã§ã¯ãã¯ã©ã¹ãåŒãèµ·ããå¯èœæ§ã®ããããããçš®é¡ã®å¯äœçšããããããããŸãã
- ã€ã³ã¿ãŒãã§ã€ã¹ã®å¯äœçšã¯æããã§ã¯ãããŸãã ã
ãã¡ããããªãã¡ã¯ã¿ãªã³ã°ãè¡ãããšãã§ããçµéšè±å¯ãªäººãåŒãä»ããããšã«ãã£ãŠãããã€ãã®åé¡ã解決ã§ããŸãã ãããããã«ãã¹ã¬ããã«ã€ããŠè©±ããšããåœä»€åããã°ã©ãã³ã°ã®æŠå¿µã¯æ©èœããªããªããŸãã çµå±ã®ãšãããããŸããŸãªãããŒå
ã®ãªããžã§ã¯ãã®ç¶æ
ã®å€åãç£èŠããããããåæãããããã«ãã¢ãããã¯ãªæäœãè¡ãããšã¯éåžžã«å°é£ã§ãã ããã¯ã¹ããããã°ã©ã ãåãåºããŠãè€æ°ã®ããã»ããµã«äžŠååããããšã¯ã§ããŸããã ããã«ãããã°ã©ã å
ã®æ¯é¡ã®ãªãã³ãŒãã30ïŒ
ãè¶
ããå Žåããã«ãããã»ããµã·ã¹ãã ããå©ç¹ãåŸãããšãã§ããŸãããåæãšã¢ãããã¯ã¢ã¯ã·ã§ã³ã«æéãããããããŸãã ãããã£ãŠã次ã®æ¬ ç¹ããããŸãã
- ç¶æ
å€æŽã®æŠå¿µãã®ãã®ãæ©èœããªããªããŸãã
ã³ã³ã»ãããæ©èœããªãå Žåã人ã
ã¯ä»ã®äººãæ¢ãå§ããŸãã ãããŠããããã«ãããé¢æ°åããã°ã©ãã³ã°ããæ°ã«å
¥ãã®èšèªã«å¿ã³èŸŒã¿å§ããããšãããããŸãã Objective-Cã§ãããã¯ãååŸããSwiftã§ã¯ããŒãžã£ãŒãäœæãã11çªç®ã®æšæºããC ++ã§ã©ã ãé¢æ°ããµããŒãããJavaã§ãã©ã ãåŒãååŸãå§ããŸããã ClojureãScalaãªã©ã®èšèªãèãããããã«ãªããŸããã ãããã£ãŠãé¢æ°åããã°ã©ãã³ã°ãšã¯äœããç解ããŸãããã
é¢æ°åããã°ã©ãã³ã°ïŒFPïŒãšãã®åºæ¬åå
é¢æ°åããã°ã©ãã³ã°ãé¢æ°ã䜿ã£ãããã°ã©ãã³ã°ã§ãããšèããŠãããªããããªãã¯æ£ããã§ãã ãã®å Žåãããæ°åŠçãªã¹ã¿ã€ã«ã§èšè¿°ããŸãã åžžã«å
¥åããŒã¿ãšåºåããŒã¿ããããããããããã€ããäœæãããã®ããã«é¢æ°ãèšè¿°ããŸãã
FPã®äž»ãªæ±ïŒ
FPã®äž»ãªæ±ïŒ
âå€æŽãããŠããªãå
¥åã
â¢å¯äœçšã¯ãããŸããã
â¢ãã«ãã¹ã¬ããã
âé«éé¢æ°ã«ããæœè±¡åã¬ãã«ã®å€æŽ
â¢ããåå©çšå¯èœãªã³ãŒãã
â¢ã³ãŒãã®èªã¿ãããã®åäžã
â¢ã³ã³ããã¹ãã®ä¿åã
å
¥åã®äžè²«æ§ã¯ããã¹ãŠã®å¯äœçšã®ã«ãããªããæäŸããŸãã ã€ãŸãããã«ãã¹ã¬ããã·ã¹ãã ã«ã€ããŠå¿é
ããå¿
èŠã¯ãããããŸãããå€æŽãåæãäžèŠã§ãã
é«éé¢æ°ã䜿çšããŸãã ããã¯ãä»ã®é¢æ°ããã©ã¡ãŒã¿ãŒãšããŠåãé¢æ°ãäœæã§ããããšãæå³ããŸããããã«ãããããäžè¬çãªããžãã¯ãèšè¿°ãããšãã«æ¬¡ã®æœè±¡åã¬ãã«ã«é²ãããšãã§ããç¹å®ã®ã¢ã¯ã·ã§ã³ãç¹å®ã®æ¹æ³ã§å®è£
ããæ¹æ³ããã©ã¡ãŒã¿ãŒãšããŠé¢æ°ã«æž¡ãããŸãã
å€æŽãããŠããªãå
¥å
次ã«ãå
¥åããŒã¿ã®äžå€æ§ã«ã€ããŠè©³ãã説æããŸãã ããªãããããžã§ã¯ãã«æ¥ãŠãååã«ãããç解ããã®ãæäŒã£ãŠãããããé Œããšããããªãã¯åžžã«å³ãæãå¿
èŠããããŸãïŒãªããžã§ã¯ããã¡ãœãããã¡ãã»ãŒãžãã©ã®ç¶æ
ã«å
¥ãã¹ãããªã©ã ãããŠãé¢æ°ãèŠããšãã次ã®ãã®ãå¿
èŠã§ãã
- ãã®é¢æ°ãäœãããããç解ããŠãã ããã
- æå®ããããªããžã§ã¯ãã®å
éšãŸãã¯å€éšããŸãã¯ã¿ã€ããŒãéç¥ããŸãã¯ä»ã®äœãã«ãã£ãŠåŒã³åºãããæ¹æ³ãç解ããŸãã
- ãªããžã§ã¯ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãèŠãŠããŸãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ãã£ãŠä»ã«ããã€ã®ãªããžã§ã¯ããå·ã€ããããŸããïŒ
ãã¡ããããã®è³ªåã«çããããšã¯ã§ããŸããã ç¹å®ã®ã¡ãœãããåŒã³åºããå Žåãã°ããŒãã«ãªæå³ã§äœãèµ·ãããããèšããŸããã ãããäž»ãªåé¡ã§ãã
次ã«äŸã瀺ããŸãã

ã¯ã©ã¹ãUserããããããã®ãUserããæ ŒçŽãããViewControllerãããããã¯ã©ã¹ãNetworkOperationããã€ãŸã倧ãŸãã«èšã£ãŠãªã¯ãšã¹ãããããšããŸãã ããŠãŒã¶ãŒãã¿ã€ãã¯åç
§ã¿ã€ãã§ããã€ãŸããåç
§ã«ãã£ãŠæž¡ãããããããViewControllerãã§äœããå€æŽãããNetworkOperationãã§äœããå€æŽããŠããã圌ããèšãããã«ã楜ãããããã°ãè¡ããŸãã
ãããã©ãããŸããïŒ Swiftã«ã¯ãåç
§åãšå€åã®2ã€ã®ããŒã¿åããããŸãã åç
§ããŒã¿åã¯çããŠãããã®ã§ãããäœããã®åœ¢ã§åå¿ãããã®ç¶æ
ãå€æŽã§ãããã®ã§ãã éèŠãªã¿ã€ãã¯ãæ»ãã§ããŠå¿çããªãã·ã³ãã«ãªããŒã¿ã§ãã ã³ã³ã»ããèªäœã¯ãã¢ã¯ãã£ããªãªããžã§ã¯ãã®äœ¿çšãã€ãŸãåç
§åããã®äœ¿çšãæŸæ£ããå€ã®ã¿ã®äœ¿çšã«é²ãå¿
èŠããããšè¿°ã¹ãŠããŸãã ãããã£ãŠããã§ã«èšèªã¬ãã«ã§ã¯ãå¯äœçšãåãé€ãããšãã§ããŸããå
éšã§ããèªäœãå€æŽãããè¿œå ã®ãªã³ã¯ãäœæããªãåçŽãªããŒã¿ã®ã¿ããããŸãã ãããŠãããã¯ãã§ã«ã¯ããã«ç°¡åã§ãã
èŠçŽ ã1ããã2ããã3ããå«ãé
åãaãããããšããŸãã é
åãbãã¯ãaããžã®åç
§ã§ãã

ãããŠãé
åãbãã«äœããã®èŠçŽ ãè¿œå ãããšããŸãã 次ã«ããbãããªããžã§ã¯ãã§ããå Žåãããã¯å€æŽãããŸãã ããã§ããaãã¯å€æŽãããªããŸãŸã§ããã€ãŸããå€ã¬ãã«ã§å¯äœçšã¯ãããŸããã

åç
§ã¿ã€ããšããŠæ©èœãããViewãã§äœæ¥ããå Žåãå€æ°ãbetaãã®ãalphaããå€æŽãããšãã«ãå€æ°ãaãã®ãalphaããå€æŽããŸãã

ãã¡ãããæå³ã®ããåã¯ãå®éã«ã¯å°ãã«ãããããŠãããšæããããããŸãã-ããã¯åçŽãªããŒã¿ã§ãããäœãã§ããªãããã§ãã ããããå®éã«ã¯ããã§ã¯ãããŸãããSwiftã§ã¯ãåæåïŒenumïŒãšæ§é äœïŒstructïŒã¯éèŠãªåã§ãã ãããŠãæ§é äœã¯ãããã³ã«ãå®è£
ããã¡ãœãããä¿åããããã€ãã®èšç®ãè¡ãããšãã§ããŸããå®éããªããžã§ã¯ãã䜿çšããŠåŸã
ã«åãã¬ãã«ã«ç§»è¡ãå§ããŠããŸãã ãã ãã次ã®3ã€ã®äž»ãªå©ç¹ããããŸãã
- ãŸããæ§é ã¯åžžã«äžå®ã§ãããæéãšãšãã«å€åããããšã¯ãããŸããã
- 第äºã«ãåé¢ïŒæå³ã®ããåã¯åžžã«åé¢ãããŸãã ããšãã°ãåç
§ã¿ã€ãããŠãŒã¶ãŒãã䜿çšããå Žåãå
éšã®ã³ã³ããŒãã³ãéã«äŸåé¢ä¿ãäœæããŸãã æ§é ãã€ãŸãéèŠãªåã䜿çšããå ŽåãäŸåé¢ä¿ã¯ãªãããã¹ãŠã®ããŒã¿ãåé¢ãããŸãã ããã§ã¯ãç°¡åã«ãéèŠãªã¿ã€ãã«ã€ããŠèª¬æããŸãã
- 第äžã«ãããã¯äºææ§ã§ãã ãªããžã§ã¯ãã®å Žåã®ããã«ããã€ã³ã¹ã¿ã³ã¹æ§é ããšããæŠå¿µã¯ãããŸãããã€ãŸããIDããããŸããã æŠããŠãéèŠãªã¿ã€ãã¯å
éšã«ããããŒã¿ã«ãã£ãŠã®ã¿ç¹åŸŽä»ããããŸã-ããã¯ããããã亀æå¯èœã§ããããšãæå³ããŸãã ããšãã°ãa = [1ã2ã3]ãšèšããšããç©ççã«ã¯ãã®ãªããžã§ã¯ããã¡ã¢ãªå
ã«ãããã©ããã¯é¢ä¿ãããŸããã ã€ãŸãããaãã«ç®ãåãããšããã®ããŒã¿ãæã€é
åãååšããŸãã 圌ããã©ãããæ¥ãã®ãã¯å¥ã®è³ªåã§ãã
é«éé¢æ°ã«ããæœè±¡åã¬ãã«ã®å€æŽ
é«éé¢æ°ã«ããæœè±¡åã®ã¬ãã«ãå€æŽãããšããããšã¯ãé¢æ°å
ã®é¢æ°ãåŒæ°ãšããŠå®è¡ã§ããããšãæå³ããŸãã ããã¯ãŸããSwiftã§ã¯é¢æ°ãã¯ã©ã¹1å€æ°ã«ãªã£ãããšã瀺åããŠããŸã-ããããéåžžã®å€æ°ãšåãããã«æ±ãããšãã§ããŸãïŒãã£ãã·ã¥ãé¢æ°å
ã§åãå
¥ããå¥ã®é¢æ°ã®çµæãšããŠè¿ãïŒã Swiftèšèªã¬ãã«ã§ã¯ãFPã®ã
map ããã
filter ããã
reduce ããªã©ã®åºæ¬æ©èœãæ¢ã«å®è£
ããŠããŸãã ãããã®æ©èœã®äœ¿çšäŸïŒ
Mapã¯ãããã¿ã€ãã®ãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ãå¥ã®ã¿ã€ãã®ãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã«åçŽã«æœåºããŸãã 人çããã®äŸã ç§ã®ä»¥åã®ãããžã§ã¯ãã§ã¯ãã·ã¹ãã å
šäœã®ã¢ãã«ã¯éèŠãªã¿ã€ãã§èšè¿°ãããŠããŸããã ãã ããäžéšã®å€ã¯ããŒã¿ããŒã¹ã«ä¿åããå¿
èŠããããŸããã ããŒã¿ããŒã¹ã«ä¿åãããšãã¯ã©ã¹ãNSManagedObjectãã䜿çšããŠãªããžã§ã¯ãã¬ãã«ã§æäœã§ããŸãïŒããã¯åç
§ããŒã¿åã§ãïŒã ãããŠãããã§ãããããé¢æ°ã¯éåžžã«åœ¹ç«ã¡ãŸãããããšãã°ãããŒã¿ããŒã¹ã«å¯ŸããŠäœããã®ã¯ãšãªãè¡ããšããããã®ãªããžã§ã¯ããè¿ãããŸããè¿ãããã³ã¬ã¯ã·ã§ã³ã¯è¿ãããŸãããããããããïŒãtranslateéèŠãªåã«å€æãïŒãéèŠãªåã®ããŒã¿ãè¿ãããŸãã
ã³ãŒããããã«èªã¿ããããçŸããããããã«ãSwiftã«ã¯ç°¡ç¥è¡šèšæ³ãçšæãããŠãããå€æ°ã«éåžžã«è¿
éã«ã¢ã¯ã»ã¹ã§ããŸãã ã$ 0ããã$ 1ããã$ 2ããšæžããšãã¯ããŒãžã£ãŒã®å
éšã«å
¥ã£ããã©ã¡ãŒã¿ãŒçªå·ãåç
§ããŸãã
ãããŠããäžã€è¿œå ã ã¯ããŒãžã£ãŒãäœããã®å€ãè¿ãå Žåããreturnããšå
¥åããªãã£ãå ŽåãæåŸã®è¡ã®çµæãæäœã®çµæãšããŠè¿ãããŸãã ãã®ããããã®å Žåããããé¢æ°ã¯åã«ãããã®æ°å€ã®äºä¹ãè¿ããŸãã
次ã®æ©èœã¯ã
ãã£ã«ã¿ãŒ ãã§ãã ããã§ãboolãè¿ãå¿
èŠã®ããã¯ããŒãžã£ãæž¡ãã ãã§ãçµæã®éžæã«ãã®åŒãŸãã¯ãã®åŒãå«ãããã©ããã決å®ã§ããŸãã
reduceé¢æ°ã¯ãã³ã¬ã¯ã·ã§ã³ãåäžã®å€ã«å§çž®ããŸãã ããšãã°ãäžèšã§ã¯ããããªãšãžã¥ãªãšããã®æåã®è¡çºã§ç« ã®æ°ãæ°ããæ¹æ³ã®äŸã瀺ããŠããŸãã
é¢æ°ã¯äœãå€æŽãããã°ããŒãã«å¹æãæããªãããããã§ã«ãã®æ®µéã§ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ãããšããmapãããfilterãããreduceããªã©ã®é¢æ°ããã¹ãŠã®ããã»ããµã§èªåçã«åäœããŸãã ã€ãŸããå€éšã«äœãå€æŽãããåã
ã®èŠçŽ ãã©ãåŠçããããæ£ç¢ºã«ç¥ã£ãŠããŸããããããã¹ãŠã®ããã»ããµã«åæ£ããçµæãè¿ããŸããã ãã¹ãŠãããŸãæ©èœããŸãïŒ
ãªãã·ã§ã³ã®ããŒã¿åãšSwift sugar
ããã§ãSwiftã«ååšããããé¢æ°åèšèªã«ã¯å¿
èŠãªãä»ã®æ©èœãèŠãŠã¿ãŸãããã
- ãžã§ããªãã¯ã¯åžžã«ã¯ãŒã«ã§ãã ããæœè±¡çãªã³ãŒããèšè¿°ããŸãã
- éçåä»ãã«ãããèšè¿°ãããã³ãŒããç解ãããããªãããã¹ããç°¡åã«ãªããŸãã
- æŒç®åã®ãªãŒããŒããŒãã«ãããæ確ã§çŽæçãªã³ãŒããèšè¿°ã§ããŸãã
- ãªãã·ã§ã³ã®ã¿ã€ãã«ãããSDKèªäœãæäŸããAPIã倧å¹
ã«å€æŽãããŸããã Objective-Cã«ãindexOfObjectãããããšä»®å®ããŸã-åžžã«å€ãè¿ããŸãããçµæã®å€ãå®æ°ãNSNotFoundããšæ¯èŒããå¿
èŠããããçãããªãå ŽåããïŒNSUIntegerïŒindexOfObject :( ObjectTypeïŒanObjectãã Swiftã§ã¯ãã¹ãŠãéåžžã«ç°¡åã§ãããªãã·ã§ã³ã®èŠçŽ ã®ãã€ã³ããã¯ã¹ããè¿ãããŸãããã®èŠçŽ ãã³ã¬ã¯ã·ã§ã³å
ã«ããå Žåã¯ãã€ã³ããã¯ã¹ããè¿ãããããã§ãªãå Žåã¯ãã€ã³ããã¯ã¹ãã¯è¿ãããŸããïŒ
public func indexOf(element: Self.Generator.Element) -> Self.Index?
public func indexOf(element: Self.Generator.Element) -> Self.Index?
äŸãããã
ããã§ã¯ãçè«ããå®è·µã«ç§»ããŸãããã
äŸ1.ããŒã«ã«ãã¡ã€ã«ã®æ€èšŒ
ãŸããåé¡ã®å¿
é ã®è§£æ±ºçãæ€èšãã次ã«æ©èœã«ç§»ããŸãã
URLãããŒã«ã«ãã¡ã€ã«ã«æž¡ãããã¡ã€ã«ãå»æ¢ãããŠãããã©ãããå€æããé¢æ°ããããšããŸãã

åœä»€åã®ãªããžã§ã¯ãæåã®ã¢ãããŒãã䜿çšãããšããœãªã¥ãŒã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãããã¡ã€ã«ãžã®ãªã³ã¯ãååŸãããã¡ã€ã«ãååšãããã©ããã確èªããŸãã 次ã«ããããååšããå Žåã圌ãã¯ããããå±æ§ãååŸããŸãã å±æ§ãååšããå Žåãå±æ§ããæ¥ä»ãæœåºãããã¡ã€ã«ãå€ããã©ããã確èªããããšããŸãã ã€ãŸããæ確ãªäžé£ã®ã¢ã¯ã·ã§ã³ããããããçããåŸãããšãã§ããŸãã ãªãã·ã§ã³ã®ã¿ã€ãããããã€ã§ããªãã£ãå Žåããã¡ãããfalseããè¿ãããŸãã
FPã¯ãå°ããªæ©èœã«åå²ããããšããå§ããŸãã

æåã®é¢æ°ã¯ãåã«ãã¡ã€ã«ãååšãããã©ãããå€æããŸããæååãåãå
¥ãããªãã·ã§ã³ã§æååãè¿ããŸãïŒ1ã€ã®æäœãå®è¡ããŸã-ãã¡ã€ã«ãååšããå Žåã¯è¿ããŸãïŒã 次ã¯ãå±æ§ãååŸããããšã§ããããã§ã¯ãæ¢åã®æ£ç¢ºãªãã¡ã€ã«ãžã®å
¥åè¡ãååŸããååŸã§ããå¯èœæ§ã®ããå±æ§ãè¿ããŸãã 次ã®é¢æ°ã¯ã以åã«åãåã£ãå±æ§ããæ¥ä»ãååŸããŸã-ããã§ã¯ãç¥èªïŒã$ 0ãïŒã䜿çšããŸãã ãã¹å
šäœãã€ãŸãé¢æ°ã§æ§æããããã€ãã¯æ¬¡ã®ããã«ãªããŸãããã¹ãååŸãããã¡ã€ã«ã®ååšã確èªããå±æ§ãååŸããäœææ¥ã確èªããŸãã
ãœãªã¥ãŒã·ã§ã³ãããã«çŸããããããã«ã2ã€ã®é¢æ°ãæ¥ç¶ããé¢æ°ããã€ã³ãããå®çŸ©ãããã®é¢æ°ãåã«åç
§ããæŒç®åãå®çŸ©ããŸãã ãã€ã³ãé¢æ°ã¯ããªãã·ã§ã³ã®å€ãšãªãã·ã§ã³ã®é¢æ°ïŒã€ãŸãããã®å€ã§å®è¡ããå¿
èŠããããã®ïŒãåãå
¥ãããªãã·ã§ã³ã®å€ãè¿ããŸãã å€ãããå Žåãé¢æ°ãå®è¡ããããªãå Žåã¯noãå®è¡ãããŸãã

ãã®çµæãéåžžã«ããããããæ¹æ³ãåŸãããŸãã
return filePath >> = fileExists >> = retrieveFileAttributes >> = extractCreationDate >> = checkExpired ??
åœããªãã®ããšã¯ç¥ããŸãããããœãŒã·ã£ã«ãããã¯ãŒã¯ã§ã®äœæ¥ã«éåžžã«æ©ãŸãããŠããŸãã ããšãã°ãFacebookã«æçš¿ããã«ã¯ã以äžãè¡ãå¿
èŠããããŸãããŠãŒã¶ãŒããã°ã€ã³ããŠãããã©ããã確èªããŸãïŒãã°ã€ã³ããŠããªãå Žåã¯ãã°ã€ã³ããŸãïŒã ãã°ã€ã³ããŠããå Žåã¯ããšã³ããªãå
¬éããæš©å©ããããã©ããã確èªããããã§ãªãå Žåã¯ããšã³ããªãåéããŠãã ããã ããã§ãããããã¹ãŠãåŒã³åºãã®å°ããªãã§ãŒã³ã«ã©ã®ããã«å€ãããæ³åããŠã¿ãŠãã ããããšã©ãŒãçºçããå Žåããããäœããããããã«ããããŸãã
äŸ2
2çªç®ã®äŸã¯ãé¢æ°åèšèªã§ããã°ã©ã ãç解ããããšãããã«ç°¡åãã瀺ããŠããŸãã

ããã«ãããçš®ã®ååã®é
åããããŸãã 圌ãšã¯äœãããŠããã®ïŒ ãŸããããã£ã«ã¿ãŒã-1æåã®ååããã¹ãŠåãåããŸãã 次ã«ãæåã®æåã倧æåã«ããããããã¹ãŠãã³ã³ãã§åºåã£ãŠåºåããŸãã å
¥åé
åãååŸãã1æåã®ååãåé€ããŠãæååã«å€æããããšãããããŸããã ããã§ãåœä»€åèšèªã§ãã®ãããªã³ãŒããæžãã®ã«ã©ããããæéãããããããããŠä»ã®èª°ãã®ãããžã§ã¯ãã§ãã®ãããªã³ãŒããèŠãå Žåã«ã©ããããæéããããããèããŠãã ããã
AFã䜿çšããå¿
èŠããªãå Žå
ããããåžžã«æ©èœçãªãœãªã¥ãŒã·ã§ã³ãæé©ã§ãããšã¯éããŸããã å
¥åæååå
ã®ååèªã®åºçŸåæ°ãã«ãŠã³ãããå¿
èŠããããšããŸãã ãããè¡ãã«ã¯ã次ã®ããã«ããŸãã

ã€ãŸããèŸæžã§ããçµæãäœæããŸãã å®æçã«æ¹è¡ãããã¹ãŠã®äžèŽã«ã€ããŠããã®åèªãå£å®ãã©ããã確èªããŸããããã§ãªãå Žåã¯ãã€ã³ããã¯ã¹ã®å€ãå¢ãããŸãã
é¢æ°åèšèªã§ã¯ã次ã®ããã«ãªããŸãã

ããã§ã¯ãå
¥åæååãšæ£èŠè¡šçŸãåãåãé¢æ°ãåå¥ã«åå²ããŸã-åå²ããŠçµæãè¿ããŸãã ãããŠã楜ãã¿ãå§ãŸããŸãã ç§ãã¡ã®ã¡ã€ã³é¢æ°ã¯ãæåã«å
¥åãå°æåã«å€æããããããããäœæããŸãã 次ã®ã¹ãããïŒãã®åèªãç¬ç«ããŠããããåãªãèšãèš³ãã確èªããŸãã 次ã«ããforEachããéå§ããŸããããã¯ããã®èŠçŽ ã«å¯ŸããŠãã®ããŒã¹ãäœæãããããšã瀺ããŠããŸãã
ã¯ãããmapãããfilterãããforEachããªã©ã®æ©èœã¯æé©åãããŠããŸãã ããããã¡ããã©äœåã®å埩ãè¡ãããããèããŠãã ããïŒ çµå±ã®ãšãããæåã«ãã¹ãŠã®èŠçŽ ã®ããããããäœæãã次ã«äœåãªåèªããã£ã«ã¿ãŒã§é€å€ããŠãããããããã¹ãŠã®èŠçŽ ã«é©çšããŸãã æåã®ã±ãŒã¹ã§ã¯ãããããã¹ãŠã1ã€ã®ãµã€ã¯ã«ã§æ±ºå®ãããŸããã
ããã¯ãæ©èœã¹ã¿ã€ã«ã®å€±æãã転éã®äŸã§ãã
ãããã«
ç§ãã¡å
šå¡ãæãããªããžã§ã¯ãæåããã°ã©ãã³ã°ããé¢æ°åã«åãæ¿ããå¿
èŠããããšã¯èšããããããŸããã æ£çŽã«èšã£ãŠãã ãã-é¢æ°åããã°ã©ãã³ã°ã®æ®åã®æ代ã¯éããŸããã å¿
èŠãªå Žåã¯ãªããžã§ã¯ãæåã®ã¢ãããŒãã䜿çšããå¿
èŠããããšèšããŸãïŒUIã³ã³ããŒãã³ããããå Žåãç¶æ¿ãæã€ããšãéèŠãªå Žåãå
ç¥ã§ããã€ãã®ã¡ãœãããå®çŸ©ããããšãéèŠãªå Žåããã®ãã¹ãŠãå®çŸ©ããå Žåããžãã¯ã ããããã¿ã¹ã¯ã®å·šå€§ãªã¬ã€ã€ãŒïŒããŒã¿åŠçããªã¹ãã®ãã£ã«ã¿ãŒåŠçãªã©ïŒãããããããã¯FPã䜿çšããŠéåžžã«ãã解決ãããŸãã
ãããã£ãŠããªããžã§ã¯ãæåã®ã¡ãœããã§UIãèšè¿°ããæå³ã®ããåã§ã¢ãã«ãäœæããããšããå§ãããŸãã ãã®åŸãããã©ãŒãã³ã¹ãšèªã¿ããããåäžãããäžèŠãªå¹æãåãé€ããŸãã ããã«ãã³ãŒãã¯ãã¹ãå¯èœã«ãªããŸãã
çµå±ã®ãšããããã¹ãã¯åœä»€åèšèªã§ã©ã®ããã«æžãããŠããã®ã§ããããïŒ ãŠãããŒã¹ãäœæããããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŠãããŒã¹ã§äœãå€æŽããããã調ã¹ãŸãã
æ·±ããã®ããã¹ãããå Žåã¯ããã¹ãã§åŒã³åºãã®ãã§ãŒã³ãäœæããå¿
èŠããããŸãã FPã®ãã¹ãŠã¯åçŽã§ããé¢æ°ã¯ãåãå
¥åããŒã¿ã«å¯ŸããŠåžžã«åãå€ãè¿ãããããã¹ãçšã®çãããŒã¿ãæžã蟌ãããšãã§ããŸãã