Imbaã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®éçºå°çšã«Scrimbaã«ãã£ãŠäœæããããªãŒãã³ãœãŒã¹ã®ããã°ã©ãã³ã°èšèªã§ãã JavaScriptã§ã³ã³ãã€ã«ãããæ¢åã®JSãšã³ã·ã¹ãã å
ã§åäœã§ããŸãã ããšãã°ãNode.jsãnpmãWebpackã«ã€ããŠè©±ããŸãã
Imbaã®äž»ãªåŒ·ã¿ã¯ããã®èšèªã䜿çšãããšãReactãVueãªã©ã®ä»®æ³DOMãã¯ãããžãŒã䜿çšããã©ã€ãã©ãªãŒã«åºã¥ãã¢ããªã±ãŒã·ã§ã³ãããã¯ããã«é«éãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããšã§ãã ImbaãDOMæŽæ°ãšé£æºããããšã«ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸãã 詳现ã«ã€ããŠã¯ã
ãã¡ããã芧ãã ãã ã

Scrimbaãããžã§ã¯ãã®å
±ååµèšè
ã§ãããã®è³æã®èè
ã¯ã圌ãImbaãæ°å¹Žé䜿çšããŠãããšèšããŸãã 圌ã«ãããšããã®èšèªã§ã®èšè¿°ã¯ãJavaScriptãšæ¯èŒããŠãããç°¡æœãªæ§æãæã¡ãã³ãŒãã®å¯èªæ§ãåäžããããããéåžžã«æ¥œãããã®ã§ãã
ãã®è³æã¯ãç°¡åãªã¢ããªã±ãŒã·ã§ã³ã®äœæãéå§ããã®ã«åœ¹ç«ã€Imbaåå¿è
åãã¬ã€ãã§ãã æåã«ãèšèªã®åºæ¬ãããã§æããã«ãã次ã«ããã®å©ããåãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®éçºãæ€èšããŸãã Imbaã§ããã°ã©ãã³ã°ããããã®éçºç°å¢ã®ã»ããã¢ãããããã«è¡šç€ºãããŸãã
Imbaã䜿çšãããããžã§ã¯ãã«ã€ããŠ
ã³ãŒãã«å
¥ãåã«ãImbaã¯JSã§ã³ã³ãã€ã«ãããã¢ããã¥ã¢ãããžã§ã¯ãå°çšã«äœ¿çšãããå¥ã®å¥åŠãªèšèªã®ãããªãã®ã§ã¯ãªããšããäºå®ã«æ³šç®ããããšæããŸãã ãŸãã倧äŒæ¥ã®æ·±å»ãªã¢ããªã±ãŒã·ã§ã³ã§ã䜿çšãããŠããŸãã
ãã®å¿çšã®äžäŸã¯ãã¢ã€ã¹ã©ã³ãã§ã®
éã®ãªãŒã¯ã·ã§ã³ããµããŒããããã©ãããã©ãŒã ã§ãã ãã®åœã§ã¯ãéã®è²¿æãGDPã®çŽ1.6ïŒ
ãå ããŠãããããã¯çŽ3å9000äžãã«ã§ãã
ã¢ã€ã¹ã©ã³ãã®éã®ãªãŒã¯ã·ã§ã³ãã1ã€ã®äŸã¯ããã¬ãŒãã³ã°ãã©ãããã©ãŒã
Scrimba.comã§ããããžã§ã¯ãã®ã¯ã©ã€ã¢ã³ãããã³ãµãŒããŒéšåã§
Imbaã䜿çšãããŠããŸãã è€éãªã¢ããªã±ãŒã·ã§ã³ã«åºã¥ããã®ãã©ãããã©ãŒã ã®äœ¿ããããã¯ãDOMã®å€æŽãè¿
éã«åæããImbaã®èœåã«å€§ããäŸåããŠããŸãã
Scrimba.comãã©ãããã©ãŒã ãã®çµæãä»æ¥äŒãèšèªã¯ãããŸããŸãªèŠæš¡ã®ãããžã§ã¯ãã®éçºã«é©ããŠãããšèšããŸãã
æ§æ
Imbaæ§æã¯JavaScriptã«éåžžã«äŒŒãŠããŸãããRubyãPythonãªã©ã®ä»ã®èšèªãJavaScriptã«åœ±é¿ãäžããŠããŸãã ãããããImbaã®æ§ææ©èœã¯äŸãšããŠäŸ¿å©ã«èããããŸãã 以äžã¯ãæž¡ããã2ã€ã®æ°å€ã®æ倧å€ãè¿ãåçŽãªJSé¢æ°ã§ãããããã®æ°å€ãçããå Žåã¯
false
ã§ãã
function findGreatest(num1, num2) { if (num1 > num2) { return num1 } else if (num2 > num1){ return num2 } else { return false } }
Imbaã§åãããšãæžããŠãã ããã
def findGreatest num1, num2 if num1 > num2 num1 elif num2 > num1 num2 else false
ããã2ã€ã®äŸãæ¯èŒãããšãImbaãšJavaScriptã®éããããã«ããããŸãã ã€ãŸãã次ã®ãšããã§ãã
function
ã¯def
ãŸãã ããŒã¯ãŒãfunction
ããŒã¯ãŒãdef
眮ãæããããŸãã- ãã©ã±ããã®æ¬ åŠã é¢æ°ãã©ã¡ãŒã¿ãŒã¯æ¬åŒ§ã§å²ãŸããŠããŸããã Imbaã§ã¯ãå®éãæ¬åŒ§ã¯ã»ãšãã©å¿
èŠãããŸããããå¿
èŠã«å¿ããŠäœ¿çšã§ããŸãã
- ã€ã³ãã³ãã ã€ã³ãã§ã¯ã€ã³ãã³ããéåžžã«éèŠãªåœ¹å²ãæãããŸãã ã€ãŸããããã§ã¯äžæ¬åŒ§ã¯äžèŠã§ãã
return
ããŒã¯ãŒãããããŸããã Imbaã§ã¯ãé¢æ°ããå€ãè¿ãããšã¯æé»çã«å®è¡ãããŸããã€ãŸãã return
ããŒã¯ãŒãã¯å¿
èŠãããŸããã Imbaã¯æåŸã®é¢æ°åŒãèªåçã«è¿ããŸãã
ããã¯ãäžèšã®æ§ææ©èœãImbaã®æãéèŠãªåŽé¢ã§ããããšãæå³ãããã®ã§ã¯ãããŸããããJavaScriptã§èšè¿°ãããåæ§ã®ã³ãŒããããã³ãŒããç°¡æœã«ããŸãã ãã®å©ç¹ã¯ãè³æãé²ããã«ã€ããŠé¡èã«ãªããŸãã
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹èšèš
Imbaã䜿çšããŠãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãäœæããããšã«ã€ããŠè©±ããŸãããã å®éããã®èšèªã¯ãã®ããã ãã«äœæãããŸããã ç¹ã«ãããã¯ãDOMããŒããããããããã¡ãŒã¹ãã¯ã©ã¹ãªããžã§ã¯ããã®åœ¢åŒã§èšèªã«åã蟌ãŸããŠããããšãæå³ããŸãã
Reactéçºã®çµéšãããå Žåã¯ãImbaã«èšèªã«çµã¿èŸŒãŸããJSXã®ç¬èªã®ããŒãžã§ã³ããããã®ããã«Imbaã®ãã®æ©èœãæ€èšã§ããŸãã
Reactã©ã€ãã©ãªã䜿çšããŠãã¿ã³ãã¬ã³ããªã³ã°ãããã®ãã¿ã³ãã¯ãªãã¯ãããšã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžã衚瀺ãã次ã®ã³ãŒããæ€èšããŠãã ããã
class App extends React.Component { logOut() { console.log('button clicked!') } render() { return ( <div className="container"> <button onClick={this.logOut}>click me!</button> </div> ) } }
Imbaã§ãããæžãæãããšã次ã®ããã«ãªããŸãã
tag App def logOut e log 'button clicked!' def render <self.container> <button :tap.logOut> 'Click me!' Imba.mount <App>
ããã2ã€ã®ã³ãŒãã¹ãããããæ¯èŒããŠã¿ãŸãããã ã€ãŸãã次ã®3ã€ã®æ©èœã«æ³šæãæã£ãŠããŸãã
- ã€ã³ã©ã€ã³ã¿ã°ã
class App extends React.Component
èšèšclass App extends React.Component
ããããšã«æ³šæããŠãã ãããããã¯ãããåçŽãªåœ¢åŒã®tag App
å€æããclass App extends React.Component
ããŸãã tag
ããŒã¯ãŒãã¯èšèªã«çµã¿èŸŒãŸããŠããŸãã DOMã¿ã°ãçµã¿èŸŒãŸããŠããŸãã - çµäºã¿ã°ããããŸããã è¡ã®é
眮ã«ãã£ãŠããã°ã©ã ã®æ§é ã決ãŸããããã¿ã°ãéããå¿
èŠã¯ãããŸããïŒããšãã°ã
</button>
ã䜿çšããïŒã ããã«ãããããã¹ãå
¥åãé«éåããããµã€ãºãå°ãããªããŸãã - åçŽãªã¯ã©ã¹æ§æã Imbaã¯HTMLã¯ã©ã¹ã§ã®äœæ¥ãç°¡çŽ åããŸãã ã€ãŸãã
className="container"
ã®é¢åãªæ§æã®ä»£ããã«ã .container
ãã¿ã°èªäœã«è¿œå ããã ãã§ååã§ãã
Imbaã®ã€ãã³ããã³ãã©ãŒã®æ©èœã«ãæ°ã¥ãããããããŸããã ã€ãŸãã
onClick={this.logOut}
代ããã«äœ¿çšãããæ§é
:tap.logOut
ã䜿çšããŠã察å¿ãããã³ãã©ãŒããã¿ã³ã«æ¥ç¶ããŸãã ããã¯ããŠãŒã¶ãŒããã®ã€ãã³ããåŠçããããã€ãã®æ¹æ³ã®1ã€ã«ãããŸããã 詳现ã«ã€ããŠã¯ã
ãã¡ããã芧ãã ãã ã
ããŒã¿ãæäœãã
次ã«ãImbaã§ã®ããŒã¿ã®æäœã«ã€ããŠèª¬æããŸãã 次ã®äŸã¯ã0ã«çãã
count
å€æ°ããã
App
ã³ã³ããŒãã³ãã®ç¶æ
ã®Reactã¢ããªã±ãŒã·ã§ã³ã瀺ããŠããŸãããã®å€æ°ã®å€ã¯ã察å¿ãããã¿ã³ãã¯ãªãã¯ããããšã§æžå°ãŸãã¯å¢å ããŸãã
class App extends React.Component { state = { count: 0 } increase = () => { this.setState({ count: this.state.count + 1 }) } decrease = () => { this.setState({ count: this.state.count - 1 }) } render() { return ( <div className="container"> <button onClick={this.increase}>Increase!</button> <button onClick={this.decrease}>Decrease!</button> <p>{this.state.count}</p> </div> ) } }
ãããImbaã§ãåãã§ãã
tag App prop count default: 0 def increase count += 1 def decrease count -= 1 def render <self.container> <button :tap.increase> 'Increase!' <button :tap.decrease> 'Decrease!' <p> count Imba.mount <App>
ãããã®2ã€ã®äŸãæ¯èŒãããšãã«æåã«ç®ãåŒãã®ã¯ãã³ãŒãã®éã®éãã§ãã
Imbaã®äŸã¯ãè¡æ°ãšã³ãŒãéã®äž¡æ¹ã§çŽ2åçããªã£ãŠããŸãã
ããã°ã©ãã³ã°èšèªãæ¯èŒãããšãã®ã³ãŒãã®è¡æ°ã®æ¯èŒã¯ããã»ã©éèŠã§ã¯ãããŸããããããã§ãã³ãŒãã®èªã¿ãããã«åœ±é¿ããŸããã³ãŒãã®èªã¿ãããã¯ãç¹å®ã®ã³ãŒãããŒã¹ã®èŠæš¡ã§ãã§ã«åœ¹å²ãæãããŠããŸãã Imbaã®ã³ãŒãéãå°ãªããšããããšã¯ãReactã«æ¯ã¹ãŠèªã¿ãããããšãæå³ããŸãã
æé»çãªã»ã«ãã¢ã¯ã»ã¹
äžèšã®äŸã§ã¯ããªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹å€æ°ã«çŽæ¥ã¢ã¯ã»ã¹ããåå
count
ã®ã¿ã«èšåããŠããããšã«æ°ã¥ãããããããŸããã Reactã§ã¯ã
this.state.count
ã³ã³ã¹ãã©ã¯ãã䜿çšããŠåãããšãè¡ãããŸãã
self.count
ã§ã¯ã
self.count
ãšãã圢åŒã®æ§æäœã䜿çšããããšãã§ããŸãããããã§ã¯æé»çã«
self
ã«ã¢ã¯ã»ã¹ããããã
self
ãªãã·ã§ã³ã§ãã Imbaã¯ã
count
ãåç
§ãããšãã«ããã®ãããªå€æ°ãã¹ã³ãŒãå
ã«ååšããããã¢ããªèªäœã®ã€ã³ã¹ã¿ã³ã¹ã«ååšãããã調ã¹ãŸãã
å¯å€æ§
åè¿°ã®2ã€ã®äŸã®ãã1ã€ã®å€§ããªéãã¯ãç¶æ
å€æŽã®å®è£
æ¹æ³ã§ãã Imbaã§æžãããäŸã§ã¯ãç¶æ
ã¯å¯å€ã§ããã
count
å€æ°ã®å€ãçŽæ¥å€æŽã§ããŸãã
Reactã¯å¥ã®ã¢ãããŒããåãã
this.state
ã®å€ã¯äžå€ã§
this.state
ãšèŠãªãããŸãããã®ãããå€æŽããå¯äžã®æ¹æ³ã¯
this.setState
ã䜿çšããããš
this.setState
ã
äžå€ã®ç¶æ
ã§äœæ¥ããå Žåã¯ãé©åãªã©ã€ãã©ãªãImbaã§äœ¿çšã§ããŸãã ãã®æå³ã§ã®Imbaèšèªã¯ãç¹å®ã®è§£æ±ºçãšã¯é¢ä¿ãããŸããã Scrimbaãããžã§ã¯ãã§ã¯ãã€ãã¥ããã£ã確ä¿ããããã«å¿
èŠãªã·ã¹ãã ãªãœãŒã¹ã®éå°ãªã³ã¹ãã¯å¿
èŠãªããšèããŠãããããå¯å€ç¶æ
ã䜿çšããŸãã
éçºç°å¢ã®ã»ããã¢ãã
Imbaã®åºæ¬ãç解ããã®ã§ãä»åºŠã¯å®éšããŠã¿ãŸãããã ãããè¡ãã«ã¯ãéçºç°å¢ãæ§æããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã次ã®ã³ãã³ããå®è¡ããã ãã§ãã
git clone https:
ãã®åŸããã©ãŠã¶ã®ã¢ãã¬ã¹
http://localhost:8080/
ã«ã¢ã¯ã»ã¹ãããšããããžã§ã¯ãã®ã¡ã€ã³ããŒãžã衚瀺ãããŸãã ã¢ããªã±ãŒã·ã§ã³ãå€æŽããã«ã¯ããã¡ã€ã«ãç·šéããŸãããã®ãã¡ã€ã«ã¯
src/client.imba
ãŸãã
Imbaã®ããŒã«ã«ã€ã³ã¹ããŒã«ãé©åã§ãªãå Žåã¯ãScrimbaãããžã§ã¯ãã®ã€ã³ã¿ã©ã¯ãã£ããª
ãªã³ã©ã€ã³ãµã³ãããã¯ã¹ã䜿çšã§ããŸãã
Imbaããã©ãŒãã³ã¹
Imbaã§æžãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«ã€ããŠè©±ããŸãããã Imbaã§éåžžã«é«éãªWebã¢ããªã±ãŒã·ã§ã³ãäœæã§ããã®ã¯ããã®èšèªãä»®æ³DOMã³ã³ã»ããã䜿çšããŠããªãããã§ããä»®æ³DOMã³ã³ã»ããã¯ãReactã§éåžžã«æ®åããŠããŸãã Imbaã¯Memoized DOMãã¯ãããžãŒã䜿çšããŠããŸãã ããã¯ãä»®æ³DOMãããåçŽã§ããã䜿çšããäžéã¡ã«ããºã ã®æ°ãå°ãªããŠDOMãæäœã§ããŸãã
ãã®ãã³ãããŒã¯ã§ã¯ãããŒãžã®[ãã³ãããŒã¯ã®å®è¡]ãã¿ã³ãã¯ãªãã¯ããã ãã§èªå®
ã§èµ·åã§ããŸããImbaãReactãVueã䜿çšããŠãTODOãªã¹ãã®å€æŽäžã«1ç§éã«å®è¡ã§ããDOMãšæäœã®æ°ãæ¯èŒããŸãã
çµæã以äžã«ç€ºããã¹ãã§ã¯ãImbaã¯Reactããã³Vueããã20ã30åé«éã§ããããšãããããŸããã ç°ãªãã³ã³ãã¥ãŒã¿ãŒã§ã¯ããã¹ãçµæã¯ç°ãªããŸãã
ImbaãReactãããã³Vueã®ããã©ãŒãã³ã¹æž¬å®ã芧ã®ãšãããImbaã䜿çšãããšãDOMãéåžžã«è¿
éã«æäœããããšãã§ããŸãã
ãŸãšã
ãã®èšäºã§ã¯ãImbaã®åºæ¬ã®ã¿ãåãäžããŸããã ãã®èšèªã«èå³ãããå Žåã¯ããã®
ããã¥ã¡ã³ããã芧ãã ãã ã ç¹ã«ãã²ãã¿ãŒãšã»ãã¿ãŒã䜿çšãããšãã圌ã®æŠå¿µãšãæé»çãªåŒã³åºãã®ã¡ã«ããºã ãç¿åŸããããšãæçšã§ãã Imbaã«é¢é£ããæçšãªãªãœãŒã¹ã®ãªã¹ãã
以äžã«ç€ºããŸãã æåã¯ãã®èšèªã¯é£ããããã«èŠãããããããŸããããç¿åŸããã«ã¯æéãããããŸããã誰ããç¥ã£ãŠããããã«ãæ± ããéãç°¡åã«åãåºãããšã¯ã§ããŸããã
芪æãªãèªè
ïŒ ãããžã§ã¯ãã§Imbaèšèªã䜿çšããäºå®ã¯ãããŸããïŒ
