Skip to content

Commit a1ba5b3

Browse files
committed
モジュール化の説明の例を変更 (#474)
1 parent 7e678f8 commit a1ba5b3

File tree

1 file changed

+44
-23
lines changed
  • docs/1-trial-session/09-functions

1 file changed

+44
-23
lines changed

docs/1-trial-session/09-functions/index.md

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -143,44 +143,65 @@ increment();
143143

144144
:::
145145

146-
## パーツに分割する
146+
## 処理の分割
147147

148-
複雑な操作を複数の<Term type="javascriptFunction">関数</Term>ブロックに分解することで、コードの可読性を上げることができます。この操作を <Term strong type="javascriptModularization">モジュール化</Term> と呼びます。
149-
パーツに分割すると、次のようなメリットがあります。
148+
<p><Term type="javascriptFunction">関数</Term>は、複数回使用する処理を簡便に記述するためだけでなく、複雑で長い処理の一部を切り出し、プログラム全体の見通しを良くするために用いることもできます。</p>
150149

151-
- ブロックあたりのコードが短くなるので、読みやすい
152-
- パーツごとにテストができるので、デバッグがしやすい
153-
- 汎用性のあるパーツなら、使いまわしができる
154-
155-
以下の例では、階段を表示する操作の中の、文字列を繰り返す操作を `repeat` 関数というパーツに分けています。
150+
次の例は、`totalTicketCount` 枚のくじから `hitTicketCount` 枚を引いたときに、当たりが少なくとも 1 枚出る確率 `winningProbability` を、`■■■□□□□□□□` のようなグラフ形式で表示するプログラムです。
156151

157152
```javascript
158-
const stringToRepeat = "";
159-
for (let i = 0; i < 10; i += 1) {
160-
let result = "";
161-
for (let j = 0; j < i; j += 1) {
162-
result += stringToRepeat;
153+
const totalTicketCount = 10;
154+
const hitTicketCount = 5;
155+
const drawnTicketCount = 3;
156+
157+
let losingProbability = 1;
158+
for (let i = 0; i < drawnTicketCount; i++) {
159+
losingProbability *=
160+
(totalTicketCount - hitTicketCount - i) / (totalTicketCount - i);
161+
}
162+
const winningProbability = 1 - losingProbability;
163+
164+
for (let p = 0; p < 1; p += 0.1) {
165+
if (p < winningProbability) {
166+
document.write("");
167+
} else {
168+
document.write("");
163169
}
164-
document.write(result);
165-
document.write("<br>");
166170
}
167171
```
168172

173+
このプログラムを、<Term type="javascriptFunction">関数</Term>を用いて確率を計算する部分とグラフとして表示する部分に分割すると、次のようになります。先頭の 2 行を読むだけでプログラム全体の処理の流れが追えるようになりました。
174+
169175
```javascript
170-
function repeat(stringToRepeat, count) {
171-
let result = "";
172-
for (let j = 0; j < count; j += 1) {
173-
result += stringToRepeat;
176+
const winningProbability = calculateWinningProbability(10, 5, 3);
177+
showProbabilityAsGraph(winningProbability);
178+
179+
function calculateWinningProbability(
180+
totalTicketCount,
181+
hitTicketCount,
182+
drawnTicketCount,
183+
) {
184+
let losingProbability = 1;
185+
for (let i = 0; i < drawnTicketCount; i++) {
186+
losingProbability *=
187+
(totalTicketCount - hitTicketCount - i) / (totalTicketCount - i);
174188
}
175-
return result;
189+
return 1 - losingProbability;
176190
}
177191

178-
for (let i = 0; i < 10; i += 1) {
179-
document.write(repeat("", i));
180-
document.write("<br>");
192+
function showProbabilityAsGraph(probability) {
193+
for (let p = 0; p < 1; p += 0.1) {
194+
if (p < probability) {
195+
document.write("");
196+
} else {
197+
document.write("");
198+
}
199+
}
181200
}
182201
```
183202

203+
このように、大きなプログラムを意味的に独立した小さなまとまりに分割する操作を、**<Term type="javascriptModularization">モジュール化</Term>**と呼ぶ場合があります。
204+
184205
---
185206

186207
## 基礎課題

0 commit comments

Comments
 (0)