å¤ãã®ã¿ã¹ã¯ãããå ´åãèªåãã¹ãã使ç¨ãããå®éã®ããã¸ã§ã¯ãã§ãåºãå©ç¨ããã¦ãã¾ãã
ãªããã¹ããå¿ è¦ãªã®ã§ããããï¼
颿°ãæ¸ãã¨ããã©ã®ãã©ã¡ã¼ã¿ãã©ã®ãããªçµæããããããã¨ãã£ãã颿°ããã¹ããã¨ãã¤ã¡ã¼ã¸ã§ãã¾ãã
éçºä¸ãç§ãã¡ã¯é¢æ°ãå®è¡ãããã®çµæãæå¾ ãããå¤ã¨æ¯è¼ãããã¨ã§é¢æ°ã®ãã§ãã¯ãè¡ãã¾ããä¾ãã°ãã³ã³ã½ã¼ã«ä¸ã§ãããè¡ããã¨ãã§ãã¾ãã
ããä½ããééã£ã¦ããã â ã³ã¼ããç´ããå度å®è¡ãçµæãç¢ºèª â ãæå¾ éãåãã¾ã§ç¹°ãè¿ãã¾ãã
ããããã®ãããªæåã® âåå®è¡â ã¯ååã§ã¯ããã¾ããã
æåã«ããåå®è¡ã§ã³ã¼ãããã¹ãããå ´åãä½ããç°¡åã«è¦éãã¦ãã¾ããã¨ãããã¾ãã
ä¾ãã°ã颿° f ãä½ã£ã¦ãã¾ããããç¨åº¦ã³ã¼ããæ¸ãããã¹ããã¾ã: f(1) ã¯åãã¾ãããf(2) ã¯åãã¾ãããã³ã¼ããç´ã㨠f(2) ãåãããã«ãªãã¾ããããããã§å®ç§ã§ããããï¼ f(1) ã®åãã¹ããå¿ãã¦ããããã®ã±ã¼ã¹ãã¨ã©ã¼ã«ãªãããããã¾ããã
ããã¯é常ã«å ¸åçãªãã¿ã¼ã³ã§ããä½ããéçºããã¨ããç§ãã¡ã¯å¤ãã®ã¦ã¼ã¹ã±ã¼ã¹ã®å¯è½æ§ãå¿ã«çãã¦ãã¾ããããããä½ãã®å¤æ´ã®ãã³ã«ããã¹ã¦ã®ã¦ã¼ã¹ã±ã¼ã¹ã®ãã§ãã¯ãæåã§è¡ããã¨ãããã°ã©ãã«æå¾ ããã®ã¯å°é£ã§ãããã®ããããããã®ãä¿®æ£ãã¦å¥ã®ãã®ãå£ããã¨ã容æã«èµ·ããå¾ãã®ã§ãã
èªåãã¹ãã¨ã¯ãã³ã¼ãã¨ã¯å¥ã«ãã¹ããè¨è¿°ãããã¨ãæå³ãã¾ããããã«ããã颿°ã¯ãã¾ãã¾ãªæ¹æ³ã§å®è¡ãããæå¾ ãããçµæã¨ã®æ¯è¼ãè¡ããã¾ãã
ããã¤ãã¢é§åéçº(BDD)
ããã¤ãã¢é§åéçº,ããã㯠BDD ã¨å¼ã°ãããã¯ããã¯ã使ã£ã¦ã¿ã¾ãããããã®ã¢ããã¼ãã¯å¤ãã®ããã¸ã§ã¯ãã§ä½¿ããã¦ãã¾ãããªããBDDã¯åãªããã¹ãã«ã¤ãã¦ã®ãã®ã§ã¯ããã¾ããããã以ä¸ã§ãã
BDD ã«ã¯3ã¤ã®ãã¨ãããã¾ãããã¹ããããã¥ã¡ã³ããããã¦ä¾ã§ãã
BDD ãçè§£ããããã«ãå®éã®éçºã±ã¼ã¹ãæ¤è¨ãã¦ããã¾ãããã
âpowâ ã®éçº: spec
x ã® n ä¹ããã颿° pow(x, n) ãä½ãããã¨ãã¾ããããnâ¥0 ã¨ä»®å®ãã¾ãã
ãã®ã¿ã¹ã¯ã¯ä¾ã§ã: JavaScriptã«ã¯åæ§ã®ãã¨ãè¡ã ** æ¼ç®åãããã¾ãããããã§ã¯ããè¤éãªã¿ã¹ã¯ã«å¯¾ãã¦ãåæ§ã«é©ç¨ãå¯è½ãª éçºããã¼ ã«éä¸ãã¾ãã
pow ã®ã³ã¼ãã使ããåã«ã颿°ãä½ããã¹ãããèãããããè¨è¿°ãã¾ãã
ãã®ãããªãã¨ã«é¢ããè¨è¿°ã¯ specificationï¼ä»æ§ï¼ãããã㯠spec ã¨å¼ã°ããæ¬¡ã®ããã«ãªãã¾ã:
describe("pow", function() {
it("raises to n-th power", function() {
assert.equal(pow(2, 3), 8);
});
});
ä¸è¨ã®éããspec ã¯ä¸ã¤ã®ä¸»è¦ãªæ§æè¦ç´ ãæã£ã¦ãã¾ã:
describe("title", function() { ... })-
ã©ã®ãããªæ©è½ã«ã¤ãã¦è¨è¿°ãã¦ããããâã¯ã¼ã«ã¼â â
itã®ããã㯠â ãã°ã«ã¼ãåããããã«ä½¿ç¨ãã¾ãããã®ã±ã¼ã¹ã§ã¯ã颿°powã«ã¤ãã¦è¨è¿°ãã¦ãã¾ãã it("title", function() { ... })-
itã®titleã§ã¯ãç¹å®ã®ã¦ã¼ã¹ã±ã¼ã¹ã人éãèªããããã«è¨è¿°ãã2çªç®ã®å¼æ°ã¯ãããããã¹ãããããã®é¢æ°ã§ãã assert.equal(value1, value2)-
ããå®è£ ãæ£ãããã°ã
itãããã¯å ã®ã³ã¼ãã¯ã¨ã©ã¼ãªãå®è¡ãããã¯ãã§ãã颿°
assert.*ã¯powãæå¾ éãåä½ãããããã§ãã¯ããããã«ä½¿ããã¾ããããã§ã¯ãã®ãã¡ã®1ã¤ãassert.equalã使ç¨ãã¦ãã¾ããããã¯å¼æ°ãæ¯è¼ããçãããªãå ´åã«ã¨ã©ã¼ãè¿ãã¾ããããã§ã¯pow(2, 3)ã®çµæã8ã¨çãããããã§ãã¯ãã¾ããä»ã®ã¿ã¤ãã®æ¯è¼ããã§ãã¯ãããã¾ãã®ã§ãå¾ã»ã©ç´¹ä»ãã¾ãã
ãã®ä»æ§ã¯å®è¡å¯è½ã§ãããå®è¡ããã㨠it ãããã¯å
ã§æå®ããããã¹ãã宿½ããã¾ããããã«ã¤ãã¦ã¯å¾ã»ã©è¦ã¦ããã¾ãã
éçºããã¼
éçºããã¼ã¯é常ãã®ããã«ãªãã¾ã:
- æãåºæ¬çãªæ©è½ã®ãã¹ãã¨ã¨ãã«ãåæã® spec ãæ¸ããã¾ãã
- æåã®å®è£ ã使ããã¾ãã
- åä½ãããã©ããã確èªããããããã¹ããã¬ã¼ã ã¯ã¼ã¯ã§ãã Mocha (詳細ã¯å¾è¿°) ã使ç¨ã㦠spec ãå®è¡ãã¾ããæ©è½ãå®å ¨ã§ã¯ãªãå ´åãã¨ã©ã¼ã表示ããã¾ãããã¹ã¦ãåä½ããã¾ã§ä¿®æ£ãè¡ãã¾ãã
- ããã§ããã¹ãä»ãã®åä½å¯è½ãªåæã®å®è£ ãã§ããããã¾ãã
- ã¾ã å®è£ ã§ã¯ãµãã¼ãããã¦ããªãã§ãããã¦ã¼ã¹ã±ã¼ã¹ããããã« spec ã«è¿½å ãã¦ããã¾ããããã«ãããã¹ãã¯å¤±æãå§ãã¾ãã
- 3ã«æ»ãããã¹ãã®ã¨ã©ã¼ãç¡ããªãã¾ã§å®è£ ãæ´æ°ãã¾ãã
- æ©è½ã宿ããã¾ã§3ã6ã®ã¹ããããç¹°ãè¿ãã¾ãã
ä¸ã§åããéããéçºã¯ å復 ã§ããspec ãæ¸ãããããå®è£ ãããã¹ããéããã¨ã確èªããããã«ãã¹ããæ¸ãã¦ãããããåä½ãããã¨ã確èªãã¾ããæçµçã«ãåä½ããå®è£ ã¨ãã¹ããã§ãä¸ããã¾ãã
å®è·µçãªã±ã¼ã¹ã§ãã®éçºããã¼ãã¿ã¦ããã¾ãããã
æåã®ã¹ãããã¯ãã§ã«å®äºã§ã: pow ã®åæ spec ãæã£ã¦ãã¾ããã§ã¯ãå®è£
ãè¡ãåã«ããã¹ããå®è¡ããããã®ããã¤ãã® JavaScript ã©ã¤ãã©ãªãå©ç¨ãã¦ããããåä½ãããã¨ãè¦ã¦ã¦ã¿ã¾ããã(ãã¹ãèªä½ã¯å¤±æãã¾ã)ã
ã¢ã¯ã·ã§ã³ã® spec
ãã®ãã¥ã¼ããªã¢ã«ã§ã¯ããã¹ãã®ããã«æ¬¡ã®JavaScriptã©ã¤ãã©ãªã使ãã¾ã:
- Mocha â ã³ã¢ãã¬ã¼ã ã¯ã¼ã¯:
describeããitãå«ãå ±éã®ãã¹ã颿°ã¨ããã¹ããå®è¡ããã¡ã¤ã³æ©è½ãæä¾ãã¾ãã - Chai â å¤ãã®ã¢ãµã¼ã·ã§ã³ãæã¤ã©ã¤ãã©ãªãæ§ã
ãªã¢ãµã¼ã·ã§ã³ã使ãäºãã§ãã¾ãããä»ã¯
assert.equalã ããå¿ è¦ã§ãã - Sinon â 颿°ãã¹ãã¤ããããçµã¿è¾¼ã¿é¢æ°ãã¨ãã¥ã¬ã¼ããããããã©ã¤ãã©ãªã§ãå¾ã å¿ è¦ã¨ãªãã¾ãã
ãããã®ã©ã¤ãã©ãªã¯ãã©ã¦ã¶ã¨ãµã¼ããµã¤ã両æ¹ã®ãã¹ãã§å©ç¨ãããã¨ãã§ãã¾ããããã§ã¯ããã©ã¦ã¶ã®å ´åã«ã¤ãã¦é²ãã¾ãã
ãããã®ãã¬ã¼ã ã¯ã¼ã¯ã¨ pow ã® spec ã®å®å
¨ãªHTMLãã¼ã¸ã§ã:
<!DOCTYPE html>
<html>
<head>
<!-- add mocha css, to show results -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/3.2.0/mocha.css">
<!-- add mocha framework code -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/3.2.0/mocha.js"></script>
<script>
mocha.setup('bdd'); // minimal setup
</script>
<!-- add chai -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.js"></script>
<script>
// chai has a lot of stuff, let's make assert global
let assert = chai.assert;
</script>
</head>
<body>
<script>
function pow(x, n) {
/* function code is to be written, empty now */
}
</script>
<!-- the script with tests (describe, it...) -->
<script src="test.js"></script>
<!-- the element with id="mocha" will contain test results -->
<div id="mocha"></div>
<!-- run tests! -->
<script>
mocha.run();
</script>
</body>
</html>
ãã¼ã¸ã¯ï¼ã¤ã®ãã¼ãã«åããã¦ãã¾ã:
<head>â ãã¹ãã®ããã®ãµã¼ããã¼ãã£ã¼ã®ã©ã¤ãã©ãªãã¹ã¿ã¤ã«ã®è¿½å- ãã¹ãããããã®é¢æ°ã®
<script>ããã®ã±ã¼ã¹ã§ã¯ âpowã®ã³ã¼ãã§ãã - ãã¹ã â æã
ã®ã±ã¼ã¹ã§ã¯ãä¸ã«ãã£ã
describe("pow", ...)ãæã¤å¤é¨ã¹ã¯ãªããtest.jsã - Mocha ãçµæãåºåããããã«ãHTMLè¦ç´
<div id="mocha">ã使ããã¾ãã - ãã¹ãã¯ã³ãã³ã
mocha.run()ã§éå§ããã¾ãã
çµæ:
ç¾æç¹ã§ã¯ãã¹ãã¯å¤±æãã¨ã©ã¼ãèµ·ãã¾ããããã¯å½ç¶ã§ã: pow ã®ã³ã¼ãã¯ç©ºãªã®ã§ãpow(2, 3) 㯠8 ã§ã¯ãªã undefined ãè¿ãã¾ãã
ãªããå°æ¥çã«ã¯ãkarma ã®ãããªé«åº¦ãªãã¹ãã©ã³ãã¼ããããã¨ãå¿ã«çãã¦ããã¾ããããä¸è¬çã«ã¯ãããããå©ç¨ãããã¨ã§å¤æ°ã®ç°ãªããã¹ãã®ã»ããã¢ããã¯åé¡ã«ã¯ãªãã¾ããã
åæã®å®è£
ãã¹ããéããããpow ãå®è£
ãã¾ããã:
function pow() {
return 8; // :) we cheat!
}
ãããããã§ãåä½ãã¾ã!
spec ãæ¹åãã
ç§ãã¡ããããã¨ã¯å®å
¨ã«ããã§ãã颿°ã¯åä½ãã¾ãã: pow(3, 4) ã¯æ£ãããªãçµæãè¿ãã¾ããããã¹ãã¯éãã¾ãã
â¦ãã¹ãã¯éããã颿°ã¯èª¤ã£ãåä½ããã¨ããç¶æ³ã¯é常ã«å ¸åçã§ãå®è·µã§èµ·ããå¾ã¾ããç§ãã¡ã®ä»æ§ã¯ä¸å®å ¨ã§ãããã¦ã¼ã¹ã±ã¼ã¹ã®è¿½å ãå¿ è¦ã§ãã
pow(3, 4) = 81 ã確èªãããã¹ãã追å ãã¾ãããã
ããã§ããã¹ããæ´çããããã«ã次ã®ããããã®æ¹æ³ãé¸ã¶ãã¨ãã§ãã¾ã:
-
æåã®æ¹æ³ã¯ â åã
itã«assertã追å ãã¾ã:describe("pow", function() { it("raises to n-th power", function() { assert.equal(pow(2, 3), 8); assert.equal(pow(3, 4), 81); }); }); -
ï¼ã¤ç®ã¯ â ï¼ã¤ã®ãã¹ããä½ãã¾ã:
describe("pow", function() { it("2 raised to power 3 is 8", function() { assert.equal(pow(2, 3), 8); }); it("3 raised to power 3 is 27", function() { assert.equal(pow(3, 3), 27); }); });
主ãªéãã¯ãassert ãã¨ã©ã¼ãããªã¬ããã¨ãã it ãããã¯ã¯ç´ã¡ã«çµäºãããã¨ã§ãããã®ãããæåã®æ¹æ³ã§ã¯ãæåã® assert ã失æããã¨2ã¤ç®ã® assert ã®çµæã¯è¦ããã¾ããã
ãã¹ããåãã¦ä½ãã¨ãèµ·ãã£ã¦ãããã¨ã«é¢ãã¦ããå¤ãã®æ å ±ãå¾ããã¨ãã§ããã®ã§ã2ã¤ç®ã®æ¹æ³ã®ã»ããè¯ãã§ãããã
ããã«å ãã¦ãå¾ãã¹ãããä¸ã¤ã®ã«ã¼ã«ãããã¾ãã
1ã¤ã®ãã¹ãã¯1ã¤ã®ãã¨ã確èªãã¾ã
ãããã¹ããè¦ã¦ãï¼ã¤ã®ç¬ç«ãããã§ãã¯ããã®ä¸ã«ããå ´åãåå²ãã¦2ã¤ã®ã·ã³ãã«ãªãã¹ãã«ããã»ããè¯ãã§ãããã
ãªã®ã§ã2ã¤ç®ã®æ¹æ³ã§é²ãã¦ããã¾ãããã
çµæ:
äºæ³éãã2ã¤ç®ã®ãã¹ãã¯å¤±æãã¾ããããã¡ãããassert ã 27 ãæå¾
ãã¦ããã«ããããããã颿°ã常㫠8 ãè¿ãããã§ãã
å®è£ ãæ¹åãã
ãã¹ããéããããããå®éã®ã³ã¼ããæ¸ãã¾ããã:
function pow(x, n) {
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
颿°ã䏿ãåä½ãããã¨ã確èªããããã«ãããå¤ãã®å¤ããã¹ããã¦ã¿ã¾ããããit ãããã¯ãæåã§æ¸ã代ããã«ãfor ã§çæãããã¨ãã§ãã¾ã:
describe("pow", function() {
function makeTest(x) {
let expected = x * x * x;
it(`${x} in the power 3 is ${expected}`, function() {
assert.equal(pow(x, 3), expected);
});
}
for (let x = 1; x <= 5; x++) {
makeTest(x);
}
});
çµæ:
ãã¹ããããè¨è¿°
ç§ãã¡ã¯ããã«å¤ãã®ãã¹ãã追å ãã¾ããããããã®åã«ãã«ãã¼é¢æ° makeTest 㨠for ãä¸ç·ã«ã°ã«ã¼ãåãããã¹ããã¨ã«æ³¨æãã¾ããããä»ã®ãã¹ãã§ã¯ makeTest ã¯ä¸è¦ã§ãããfor ã®ä¸ã§ã®ã¿å¿
è¦ã§ã: ãããã®å
±éã®ã¿ã¹ã¯ã¯ãä¸ããããç´¯ä¹ã§ pow ãã©ã®ããã«ãªããã確èªãããã¨ã§ãã
ã°ã«ã¼ãåã¯ã describe ããã¹ããããã¨ã§ã§ãã¾ã:
describe("pow", function() {
describe("raises x to power n", function() {
function makeTest(x) {
let expected = x * x * x;
it(`${x} in the power 3 is ${expected}`, function() {
assert.equal(pow(x, 3), expected);
});
}
for (let x = 1; x <= 5; x++) {
makeTest(x);
}
});
// ... ããå¤ãã®ãã¹ããç¶ãã¾ãã descript 㨠it 両æ¹ã追å ããã¾ã
});
ãã¹ãããã describe ã¯ãã¹ãã®æ°ãã âãµãã°ã«ã¼ãâ ãå®ç¾©ãã¾ããåºåã§ã¯ãã¿ã¤ãã«ä»ããããã¤ã³ãã³ãã¨ãã¦è¦ããã¨ãåºæ¥ã¾ã:
ä»å¾ãèªèº«ã®ãã«ãã¼é¢æ°ã¨ä¸ç·ã«ããããé層ã«ããå¤ãã® it ã describe ã追å ãããã¨ãã§ãã¾ããã¾ãããããã« makeTest ã¯è¦ãã¾ããã
before/after 㨠beforeEach/afterEachãã¹ããå®è¡ããåå¾ã«å®è¡ãã before/after 颿°ãè¨å®ãããã¨ãã§ãã¾ããã¾ã ãã¹ã¦ã® it ã®åå¾ã§å®è¡ãã beforeEach/afterEach ãããã¾ãã
ä¾:
describe("test", function() {
before(() => alert("Testing started â before all tests"));
after(() => alert("Testing finished â after all tests"));
beforeEach(() => alert("Before a test â enter a test"));
afterEach(() => alert("After a test â exit a test"));
it('test 1', () => alert(1));
it('test 2', () => alert(2));
});
å®è¡é åºã¯ãããªãã¾ã:
Testing started â before all tests (before)
Before a test â enter a test (beforeEach)
1
After a test â exit a test (afterEach)
Before a test â enter a test (beforeEach)
2
After a test â exit a test (afterEach)
Testing finished â after all tests (after)
é常ãbeforeEach/afterEach (before/each) ã¯åæåã®å®è¡ã®ããã«ä½¿ãããã«ã¦ã³ã¿ãã¼ãã«ãããããã¹ãã®éã§ä½ããããã¨ãã«ä½¿ããã¾ãã
spec ãæ¡å¼µãã
pow ã®åºæ¬çãªæ©è½ã¯å®æã§ããéçºã®æåã®ã¤ãã¬ã¼ã·ã§ã³ãå®äºãã¾ãããç¥æ¯ãæããå¾ã¯ãããã«æ¹è¯ãéãã¦ããã¾ãããã
åè¿°ã®éãã颿° pow(x, n) ã¯æ£ã®æ´æ°å¤ nãæ±ããã¨ãæå³ãã¦ãã¾ãã
æ°å¦çãªã¨ã©ã¼ãç¤ºãæ¹æ³ã¨ãã¦ãJavaScript颿°ã¯é常 NaN ãè¿ãã¾ããn ã®ä¸æ£å¤ãåãããã«ãã¾ãããã
spec ã¸ããã®æ¯ãèãã追å ãã¾ãããã:
describe("pow", function() {
// ...
it("for negative n the result is NaN", function() {
assert.isNaN(pow(2, -1));
});
it("for non-integer n the result is NaN", function() {
assert.isNaN(pow(2, 1.5));
});
});
æ°ãããã¹ãã®çµæ:
ç¾æç¹ã®å®è£ ã§ã¯ãµãã¼ãããã¦ããªãã®ã§ãæ°ãã«è¿½å ããããã¹ãã¯å¤±æãã¾ããããã BDD ã®ä»çµã¿ã§ã: æåã«å¤±æãããã¹ããæ¸ããæ¬¡ã«ãããã®ããã®å®è£ ãä½ãã¾ãã
assert.isNaN ã®ã¢ãµã¼ã·ã§ã³ã«æ³¨ç®ãã¦ãã ãã: NaN ã®ãã§ãã¯ã§ãã
Chai ã«ã¯ä»ã«ãã¢ãµã¼ã·ã§ã³ãããã¾ããä¾ãã°:
assert.equal(value1, value2)â çãããã©ããããã§ãã¯ãã¾ãvalue1 == value2.assert.strictEqual(value1, value2)â å³å¯ãªç価ãã§ãã¯ããã¾ãvalue1 === value2.assert.notEqual,assert.notStrictEqualâ ä¸ã¨éã®ãã§ãã¯ããã¾ããassert.isTrue(value)âvalue === trueããã§ãã¯ãã¾ããassert.isFalse(value)âvalue === falseããã§ãã¯ãã¾ãã- â¦docsã«å®å ¨ãªãªã¹ããããã¾ãã
å¾ã£ã¦ãpow ã«ããã¤ãã®è¡ã追å ãã¾ã:
function pow(x, n) {
if (n < 0) return NaN;
if (Math.round(n) != n) return NaN;
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
ããã§åä½ãããã¹ã¦ã®ãã¹ããéãã¾ã:
ãµããª
BDDã§ã¯ãspec ãæåã§å®è£ ã¯ããã«å¾ãã¾ããæçµçã« spec ã¨ã³ã¼ããæã¤äºã«ãªãã¾ãã
spec ã¯ï¼ã¤ã®æ¹æ³ã§ä½¿ããã¨ãåºæ¥ã¾ã:
- ãã¹ã ã³ã¼ããæ£ããåä½ããããã¨ä¿è¨¼ãã¾ãã
- ããã¥ã¡ã³ã â
describeã¨itã®ã¿ã¤ãã«ã¯ãã®é¢æ°ããããã¨ã示ãã¾ãã - ä¾ â ãã¹ãã¯å®éã«ã¯é¢æ°ãã©ã®ããã«ä½¿ãããã®ããè¦ãããåä½ãããµã³ãã«ã§ãã
spec ãããã¨ãå®å ¨ã«æ¹åã夿´ãã¹ã¯ã©ããã§é¢æ°ã®æ¸ãç´ãã§ãããã§ãããããã¾ã æ£ããåããã¨ã確èªãããã¨ãã§ãã¾ãã
颿°ãå¤ãã®å ´æã§ä½¿ãããå ´åãå¤§è¦æ¨¡ãªããã¸ã§ã¯ãã§ã¯ãããç¹ã«éè¦ã«ãªãã¾ãããã®ãããªé¢æ°ã夿´ããã¨ããããã使ããã¹ã¦ã®ç®æã§æ£ããåä½ããããæåã§ç¢ºèªããæ¹æ³ã¯ããã¾ããã
ãã¹ãããªãå ´åã2ã¤ã®éãããã¾ã:
- ãã¨ãä½ãèµ·ãããã¨é¢ä¿ãªãã夿´(ä¿®æ£)ãè¡ãã¾ããããã¦ãæããæåã§ã¯ä½ãããã§ãã¯ããããªããã¦ã¼ã¶ããã°ã«ééãã¾ãã
- ãããã¯ãã¨ã©ã¼ã¸ã®ç½°ãå³ããå ´åã人ã ã¯ãã®ãããªé¢æ°ã夿´ãããã¨ãæããããã«ãªãã¾ããããã¦é¢æ°ã¯å¤ããªããã¯ã¢ã®å·£ãçãèã誰ããã®ä¸ã«å ¥ããããªããªãã¾ããããã¯è¯ããã¨ã§ã¯ããã¾ããã
èªåãã¹ãã³ã¼ãã¯ãã®å対ã§ã!
ããããã¸ã§ã¯ãããã¹ãã§ã«ãã¼ããã¦ããã°ããã®ãããªåé¡ã¯ããã¾ãããç§ãã¡ã¯ãã¹ããèµ°ããããã£ã¨ããéã«å¤ãã®ç¢ºèªçµæãç¥ããã¨ãã§ãã¾ãã
ããã«ããããã¹ããããã³ã¼ãã¯ãããè¯ãã¢ã¼ããã¯ãã£ãæã£ã¦ãã¾ãã
ãã¡ãããèªåãã¹ããããã³ã¼ãã¯ä¿®æ£ãæ¹åã容æã ããã§ããããä»ã®çç±ãããã¾ãã
ãã¹ããæ¸ãããã«ã¯ããã¹ã¦ã®é¢æ°ãæç¢ºã«è¨è¿°ãããã¿ã¹ã¯ãããå®ç¾©ãããå ¥åã¨åºåãæã¤ããã«ã³ã¼ããç·¨æããå¿ è¦ãããã¾ããããã¯æåããããã¢ã¼ããã¯ãã£ã§ãããã¨ãæå³ãã¾ãã
å®éã«ã¯ããç°¡åãªãã¨ã§ã¯ããã¾ãããã©ã®ãããªæåãããã¹ããã¾ã æç¢ºã§ãªãå ´åãå®éã®ã³ã¼ãã®åã« spec ãæ¸ãã®ãé£ããã¨ããããã¾ããããããä¸è¬çã«ã¯ããã¹ããæ¸ããã¨ã¯éçºãéããããå®å®ããã¾ãã
ãã¥ã¼ããªã¢ã«ã®å¾åã§ã¯ããã¹ããçµã¿è¾¼ã¾ããå¤ãã®ã¿ã¹ã¯ã«åºä¼ãã¾ãããªã®ã§ããå®ç¨çãªä¾ãè¦ãããã§ãããã
ãã¹ããæ¸ãã«ã¯ãJavaScript ã«é¢ããååãªç¥èãå¿ è¦ã§ããããããã¾ã ããããå¦ã³å§ããã°ãããªã®ã§ããã¾æç¹ã§ã¯ãã¹ããæ¸ãã®ã¯å¿ é ã§ã¯ããã¾ãããããã®ãã£ãã¿ã¼ãããå°ãè¤éãªä¾ã§ãã£ã¦ããã§ãã¹ããèªããã¨ãã§ããã¯ãã§ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã