ã³ã¼ãã¯ã§ããã ã綺éºã§èªã¿ããããã®ã§ãªããã°ãªãã¾ããã
è¤éãªã¿ã¹ã¯ãæ£ãããã¤èªã¿ãããå½¢ã§ã³ã¼ãåãããããã¯ã¾ãã«ããã°ã©ãã³ã°ã®æ¥µæã§ããåªããã³ã¼ãã£ã³ã°ã¹ã¿ã¤ã«ã¯ããã®ããã®å¤§ããªå©ãã¨ãªãã®ã§ãã
æ§æ
ä¸è¨ã¯ãããã¤ãã®æ¨å¥¨ã«ã¼ã«ã示ãããã¼ãã·ã¼ãã§ã(詳細ã¯å¾è¿°):
ã§ã¯ããããã®ã«ã¼ã«ã¨çç±ã«ã¤ãã¦è©³ç´°ã説æãã¾ãã
å¤ããããªããã®ã¯ããã¾ããããããã¯ã¹ã¿ã¤ã«ã®å¥½ã¿ã§ããã宿çãªæç¾©ã§ã¯ããã¾ããã
æ³¢æ¬å¼§
ã»ã¨ãã©ã®JavaScriptã®ããã¸ã§ã¯ãã§ã¯ãæ³¢æ¬å¼§ã¯æ°ããè¡ã§ã¯ãªããåãè¡ã«æ¸ããã¾ãããããã âã¨ã¸ããâ ã¹ã¿ã¤ã«ã§ããã¾ãéå§ã®æ¬å¼§ã®åã«ã¯ã¹ãã¼ã¹ãããã¾ãã
ãã®ããã«ãªãã¾ã:
if (condition) {
// do this
// ...and that
// ...and that
}
if (condition) doSomething() ã®ãããªï¼è¡ã®æ§é ãéè¦ãªã¨ãã¸ã±ã¼ã¹ã§ãããã¹ã¦æ¬å¼§ã使ãã¹ãã§ããããï¼
次ã«ããã¤ã注éä»ãã§ãã¿ã¼ã³ã示ãã¾ããããªãèªèº«ã§ãã®å¯èªæ§ã夿ãã¦ã¿ã¦ãã ãã:
- ð åå¿è
ã¯ãã®ããã«ãããã¨ãããã¾ãããããããã¾ãã! æ³¢æ¬å¼§ã¯å¿
è¦ããã¾ãã:
if (n < 0) {alert(`Power ${n} is not supported`);} - ð æ¬å¼§ãªãã§å¥ã®è¡ã«åå²ãã¦ãã¾ããè¡ã追å ããã¨ãã«ãã¹ãèµ·ãããããã®ã§ã決ãã¦è¡ããªãã§ãã ããã:
if (n < 0) alert(`Power ${n} is not supported`); - ð æ¬å¼§ãªãã®1è¡ãçãå ´åã¯è¨±å®¹ããã¾ã:
if (n < 0) alert(`Power ${n} is not supported`); - ð ãã¹ããªå½¢å¼:
if (n < 0) { alert(`Power ${n} is not supported`); }
é常ã«ç°¡æ½ãªã³ã¼ãã§ããã°ãif (cond) return null ã®ãããªï¼è¡ã®å½¢å¼ã¯è¨±å®¹ããã¾ããããããªãããã³ã¼ããããã¯ï¼æå¾ã®ããªã¢ã³ãï¼ã®æ¹ããé常ã¯ããèªã¿ãããå½¢å¼ã§ãã
è¡ã®é·ã
横ã«é·ãã³ã¼ããèªãã®ã好ããªäººã¯ãã¾ãããããããåå²ããã®ããã¹ããã©ã¯ãã£ã¹ã§ãã
ä¾:
// ããã¯ã¯ã©ã¼ã ` ã使ãã¨ãæååãè¤æ°è¡ã«åå²ãããã¨ãã§ãã¾ã
let str = `
ECMA International's TC39 is a group of JavaScript developers,
implementers, academics, and more, collaborating with the community
to maintain and evolve the definition of JavaScript.
`;
ã¾ããif æã®å ´åã¯:
if (
id === 123 &&
moonPhase === 'Waning Gibbous' &&
zodiacSign === 'Libra'
) {
letTheSorceryBegin();
}
1è¡ã®æå¤§é·ã¯ããã¼ã ã¬ãã«ã§åæãã¦ããã¹ãã§ããããé常㯠80 ã¾ã㯠120 æåã§ãã
ã¤ã³ãã³ã
ï¼ã¤ã®ã¿ã¤ãã®ã¤ã³ãã³ããããã¾ãã:
-
æ°´å¹³ãªã¤ã³ãã³ãï¼ 2(4)åã®ã¹ãã¼ã¹
æ°´å¹³ãªã¤ã³ãã³ã㯠2 ã¾ã㯠4 ã¤ã®ã¹ãã¼ã¹ãããã㯠âã¿ãâ è¨å·(ãã¼ Tab)ã使ãã¾ããã©ããé¸ã¶ãã¯å¥½ã¿ã®åé¡ã§ããæè¿ã¯ã¹ãã¼ã¹ãä¸è¬çã§ãã
ã¿ããããã¹ãã¼ã¹ã®æ¹ãããç¹ã®ï¼ã¤ã¯ãã¹ãã¼ã¹ã¯ âã¿ãâ è¨å·ãããããæè»ãªã¤ã³ãã³ãã®è¨å®ãã§ãããã¨ã§ãã
ä¾ãã°ããã®ããã«ãéå§ã®æ¬å¼§ã«å¯¾ãã¦å¼æ°ã並ã¹ããã¨ãã§ãã¾ã:
show(parameters, aligned, // å·¦ãã 5 ã¤ã®ã¹ãã¼ã¹ one, after, another ) { // ... } -
åç´ã®ã¤ã³ãã³ã: ã³ã¼ããè«çãããã¯ã«åå²ããããã®ç©ºè¡
ï¼ã¤ã®é¢æ°ã§ãã£ã¦ããå¤ãã®å ´åãè«ççãªãããã¯ã«åå²å¯è½ã§ããä¸ã®ä¾ã§ã¯ã夿°ã®åæåãã¡ã¤ã³ã®ã«ã¼ããçµæã®è¿å´ã縦æ¹åã«åå²ãã¦ãã¾ãã:
function pow(x, n) { let result = 1; // <-- for (let i = 0; i < n; i++) { result *= x; } // <-- return result; }ã³ã¼ããããèªã¿ãããããããã«æ°ããè¡ãæ¿å ¥ãã¾ããããåç´ã¤ã³ãã³ããªãã§ãã³ã¼ãã®è¡ã9è¡ãè¶ ããã¹ãã§ã¯ããã¾ããã
ã»ãã³ãã³
ã»ãã³ãã³ã¯ããã¨ãçç¥ã§ããã¨ãã¦ãåæã®æ«å°¾ã«åå¨ããã¹ãã§ãã
ã»ãã³ãã³ãæ¬å½ã«ãªãã·ã§ã³ã§ãã»ã¨ãã©ä½¿ãããªãè¨èªãããã¾ããã¾ããJavaScriptã§ã¯æ¹è¡ãã»ãã³ãã³ã¨ãã¦è§£éãããªãã±ã¼ã¹ããããããã°ã©ãã³ã°ã¨ã©ã¼ã®å¯è½æ§ãæ®ãã¾ãã詳細ã«ã¤ãã¦ã¯ããã£ãã¿ã¼ã³ã¼ãæ§é ãåç §ãã¦ãã ããã
JavaScript ã®ããã°ã©ãã¨ãã¦ããæçããã«ã¤ãã¦ãStandardJS ã®ããã«ã»ãã³ãã³ãªãã®ã¹ã¿ã¤ã«ãé¸ã¶ããããã¾ããããã以å¤ã®å ´åãèµ·ããããè½ã¨ãç©´ãé¿ããããã»ãã³ãã³ã使ç¨ããã®ãæåã§ããéçºè ã®å¤§å¤æ°ã¯ã»ãã³ãã³ãã¤ãã¦ãã¾ãã
ãã¹ãã¬ãã«
ã³ã¼ãã¯ãã¹ããéããªãããã«ãã¦ãã ããã
ä¾ãã°ãã«ã¼ãã§ä½è¨ãªãã¹ããé¿ããããã« "continue"ãã£ã¬ã¯ãã£ãã使ããã¨ã¯ãæã«ã¯è¯ãã¢ã¤ãã¢ã§ãã
ã¾ãããã®ããã«ãã¹ããã if ã追å ãã代ããã«:
for (let i = 0; i < 10; i++) {
if (cond) {
... // <- 1ã¤ãã¹ãã¬ãã«ãå¢ãã
}
}
ãã®ããã«æ¸ãã¾ã:
for (let i = 0; i < 10; i++) {
if (!cond) continue;
... // <- ä½åãªãã¹ãã¬ãã«ãªã
}
åæ§ã®ãã¨ããif/else ã return ã§ãã§ãã¾ãã
ä¾ãã°ãä¸ã®2ã¤ã®æ§é ã¯åä¸ã§ãã
ï¼ã¤ç®:
function pow(x, n) {
if (n < 0) {
alert("Negative 'n' not supported");
} else {
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
}
2ã¤ç®:
function pow(x, n) {
if (n < 0) {
alert("Negative 'n' not supported");
return;
}
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
2ã¤ç®ã®ã³ã¼ãã¯ãn < 0 ã¨ããç¹æ®ãªã±ã¼ã¹ãæ©ã段éã§å¦çããããããããèªã¿ããããªã£ã¦ãã¾ãããã®ãã§ãã¯ãçµããã¨ã追å ã®ãã¹ããå¿
è¦ã¨ããã«ã¡ã¤ã³ã®ã³ã¼ãããã¼ã«ç§»ããã¨ãã§ãã¦ããããã§ãã
颿°ã®é ç½®
ããããã¤ãã® âãã«ãã¼é¢æ°â ãä½ããããã使ãã³ã¼ããæ¸ãå ´åãããããé ç½®ããæ¹æ³ã3ã¤ããã¾ãã
-
颿°ã使ç¨ããã³ã¼ãããåã«é¢æ°ãè¨è¿°ãã:
// 颿°å®£è¨ function createElement() { ... } function setHandler(elem) { ... } function walkAround() { ... } // 颿°ã使ç¨ããã³ã¼ã let elem = createElement(); setHandler(elem); walkAround(); -
颿°ã使ç¨ããã³ã¼ããæåã§ããã®å¾ã«é¢æ°ãè¨è¿°
// 颿°ã使ç¨ããã³ã¼ã let elem = createElement(); setHandler(elem); walkAround(); // --- ãã«ãã¼é¢æ° --- function createElement() { ... } function setHandler(elem) { ... } function walkAround() { ... } -
ããã¯ã¹: åãã¦ä½¿ãããå ´æã§é¢æ°ãè¨è¿°ãã
ããã¦ãã®å ´åã2ã¤ç®ããã好ã¾ãã¾ãã
ãªããªããã³ã¼ããèªãã¨ããç§ãã¡ã¯æåã« âä½ããããâ ãç¥ãããããã§ãã颿°ã使ç¨ããã³ã¼ããå ã«æ¸ããã¦ããã°ãä½ãããããæåããæç¢ºã«ãªãã¾ããããã¦ãå®éã«ä½ãè¡ããã颿°åã表ãã¦ããã°ã颿°ã®ä¸èº«ãèªãå¿ è¦ã¯ã¾ã£ãããªãããããã¾ããã
ã¹ã¿ã¤ã«ã¬ã¤ã
ã¹ã¿ã¤ã«ã¬ã¤ãã¯ âæ¸ãæ¹â ã«ã¤ãã¦ã®ä¸è¬çãªã«ã¼ã«ãå«ã¿ã¾ã: ã©ã®å¼ç¨ç¬¦ã使ãããã¤ã³ãã³ãããã¹ãã¼ã¹ã®æ°ãæ¹è¡ãç½®ãå ´æãªã©ãå¤ãã®ç´°ãããã¨ãããã¾ãã
ãã¼ã ã®ã¡ã³ãã¼å ¨å¡ãåãã¹ã¿ã¤ã«ã¬ã¤ãã使ç¨ããã¨ãã©ã®ã¡ã³ãã¼ãæ¸ãããã«é¢ããããã³ã¼ãã®è¦ãç®ãçµ±ä¸ããã¾ãã
ãã¡ããããã¼ã ã¯èªåãã¡ã®ã¹ã¿ã¤ã«ã¬ã¤ããä½ããã¨ãã§ãã¾ãã ãã ãã»ã¨ãã©ã®å ´åãå¿ è¦ããã¾ãããæ¢ã«å¤ãã®å®è¨¼æ¸ã¿ã®é¸æè¢ãããã®ã§ããããã®ãã¡ã®1ã¤ãæ¡ç¨ããã®ãéå¸¸ã¯æåã®çã§ãã
ä¾ãã°:
- Google JavaScript Style Guide
- Airbnb JavaScript Style Guide
- Idiomatic.JS
- StandardJS
- (ä»ã«ãããããããã¾ã)
ããªããæ°ç±³ã®éçºè ã§ããã°ããã®ç« ã®å§ãã«ãããã¼ãã·ã¼ãããå§ããã¨ããã§ãããããã®å¾ãä»ã®ã¹ã¿ã¤ã«ã¬ã¤ããåç §ããä¸è¬çãªååãç¥ã£ãä¸ã§æã好ããªãã®ã鏿ããã®ãè¯ãã§ãããã
èªå linter
Linter ã¯ã³ã¼ãã®ã¹ã¿ã¤ã«ãèªåã§ãã§ãã¯ãæ¹åãææ¡ã§ãããã¼ã«ã§ãã
ãããã®ç´ æ´ãããç¹ã¯ãã¹ã¿ã¤ã«ãã§ãã¯ã¯å¤æ°ã颿°åã®ä¸ã®ã¿ã¤ããªã©ãããã¤ãã®ãã°ãè¦ã¤ãããã¨ã§ãããªã®ã§ããã¨ã âã³ã¼ãã¹ã¿ã¤ã«â ã«åºå·ããããªãå ´åã§ãããããå°å ¥ãããã¨ãæ¨å¥¨ãã¾ãã
ãã£ã¨ãç¥ããã¦ãããã¼ã«ã¯ãããã§ã:
- JSLint â æåã® linter ã®1ã¤
- JSHint â JSLint ãããå¤ãã®è¨å®ãå¯è½
- ESLint â æããæãæ°ãã linter
ãããã©ãã§ãå©ç¨ã§ãã¾ããèè 㯠ESLint ã使ã£ã¦ã¾ãã
ã»ã¨ãã©ã® linter ã¯ã¨ãã£ã¿ã«çµ±åããã¾ã: ã¨ãã£ã¿ã®ãã©ã°ã¤ã³ãæå¹ã«ããã¹ã¿ã¤ã«ã®è¨å®ãããã ãã§ãã
ä¾ãã°ãESLint ã§ã¯æ¬¡ã®ãããªãã¨ããã¾ãã:
- Node.js ãã¤ã³ã¹ãã¼ã«ãã¾ãã
npm install -g eslintã³ãã³ãã§ ESLint ãã¤ã³ã¹ãã¼ã«ãã¾ã(npm 㯠Node.js ããã±ã¼ã¸ã¤ã³ã¹ãã¼ã©ã§ã)- JavaScriptããã¸ã§ã¯ã(ãã¹ã¦ã®ãã¡ã¤ã«ãå«ããã©ã«ã)ã®ã«ã¼ãã«
.eslintrcã¨ããååã®è¨å®ãã¡ã¤ã«ãä½ãã¾ã - ESlint ã¨çµ±åããã¨ãã£ã¿ã®ãã©ã°ã¤ã³ãã¤ã³ã¹ãã¼ã«/æå¹åãã¾ããã¨ãã£ã¿ã®å¤§å¤æ°ã¯ãããæã£ã¦ãã¾ãã
.eslintrc ã®ä¾ã§ã:
{
"extends": "eslint:recommended",
"env": {
"browser": true,
"node": true,
"es6": true
},
"rules": {
"no-console": 0,
"indent": 2
}
}
ããã§ããã£ã¬ã¯ãã£ã "extends" 㯠âeslint:recommendedâ ã®è¨å®ã«åºã¥ãã¦ãããã¨ã示ããæ¬¡ã«æã
èªèº«ã®è¨å®ãæå®ãã¾ãã
次ã«ãESLint ã¨çµ±åãããã¨ãã£ã¿ã§ããã©ã°ã¤ã³ã®ã¤ã³ã¹ãã¼ã«/æå¹åããã¾ããå¤ãã®ã¨ãã£ã¿ã¯ãããæã£ã¦ãã¾ãã
代ããã«ãWebããã¹ã¿ã¤ã«ã®ã«ã¼ã«ã»ããããã¦ã³ãã¼ããããããæ¡å¼µãããã¨ãã§ãã¾ããã¤ã³ã¹ãã¼ã«ã«ã¤ãã¦ã®è©³ç´°ã¯ãhttp://eslint.org/docs/user-guide/getting-started ãè¦ã¦ãã ããã
ä¸ã§ãè¨ãã¾ããããlinter ã使ãã¨ç´ æ´ããã坿¬¡å¹æãããã¾ã: linter ã¯ã¿ã¤ããè¦ã¤ãã¾ããä¾ãã°ãæªå®£è¨å¤æ°ã¸ã®ã¢ã¯ã»ã¹ããã£ãå ´åãlinter ã¯ãããæ¤åºãã(ãããã¨ãã£ã¿ã¨çµ±åãã¦ãã°)ããããã¤ã©ã¤ããã¾ããã»ã¨ãã©ã®ã±ã¼ã¹ã§ããã¯ã¿ã¤ããã¹ã§ãããã£ã¦ããã«ç´ããã¨ãã§ãã¾ãã
ãã®ãããªçç±ããããã¨ãã¹ã¿ã¤ã«ã«ã¤ãã¦é¢å¿ããªãã¦ããlinter ãå©ç¨ãããã¨ãå¼·ãå§ãã¾ãã
ã¾ããç¹å®ã®IDEã¯çµã¿è¾¼ã¿ã® linter ããµãã¼ããã¦ãã¾ãããããè¯ãã§ãããESLintã®æ¹ãããæè»ãªãã¥ã¼ãã³ã°ãå¯è½ã§ãã
ãµããª
ãã®ãã£ãã¿ã¼ã¨ã¹ã¿ã¤ã«ã¬ã¤ãã®ãã¹ã¦ã®æ§æã«ã¼ã«ã¯ãå¯èªæ§ãé«ããã®ãçããªã®ã§ããã¹ã¦è°è«ã®ä½å°ãããã¾ãã
ç§ãã¡ã âããè¯ãæ¸ãããã®æ¹æ³â ã«ã¤ãã¦èããã¨ããå¯ä¸ã®åºæºã¯ âã³ã¼ããããèªã¿ãããçè§£ãããããããã¨ãã¨ã©ã¼ãåé¿ããã®ã«å½¹ç«ã¤ãã¨â ã§ãããããã¹ã¿ã¤ã«ãé¸ãã ããã©ã¡ããããè¯ãããè°è«ããæã«å¿ã«çãã¦ããéè¦ãªãã¨ã§ãã
ããã«é¢ãã¦ææ°ã®èããç¥ãããã«ã¹ã¿ã¤ã«ã¬ã¤ããèªã¿ãããªããè¦ã¤ããæé«ã®ã¢ã¤ãã¢ã«å¾ãã¾ãããã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã