Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
0baea27
Bandwidthは帯域幅であり、通信量ではない
aster-void Sep 25, 2023
157933e
returnによる条件分岐の説明追加
aster-void Sep 25, 2023
1c1d18b
モジュール化追加
aster-void Sep 25, 2023
2f6682e
typo fix
aster-void Sep 25, 2023
e30b9d9
コメント削除
aster-void Sep 25, 2023
774ca64
コメントアウト消し忘れ
aster-void Sep 25, 2023
f31c99e
Update definitions.js
aster-void Sep 25, 2023
62d39a5
Update index.md
aster-void Sep 25, 2023
b4771ce
typo fix
aster-void Sep 26, 2023
06dfb82
referencePage追加
aster-void Sep 26, 2023
4542878
空行削除 車の運転可能年齢の修正
aster-void Sep 26, 2023
b4bb3e9
strongタグ=>**
aster-void Sep 26, 2023
9336203
Update index.md
aster-void Sep 26, 2023
107e9e1
if~elseのリンクの修正
aster-void Sep 26, 2023
5d0d40c
Fixed docusaurus reference link of mudularization
aster-void Sep 26, 2023
7c3e5d4
index.mdがあっても動くとは思いますが一応消。しました
aster-void Sep 27, 2023
0271244
docusaurusの"バグ"対応
aster-void Sep 27, 2023
07d1942
Merge pull request #399 from Fridge0/rewrite-functions
aster-void Sep 27, 2023
264037d
間違えてタイトルになってたので修正
aster-void Sep 27, 2023
9c3cb10
リンクとリンクタイトルが壊れてたので修正
aster-void Sep 27, 2023
d280f4e
index.mdがついてると動かないっぽいですね。修正
aster-void Sep 27, 2023
f12cd3d
docusaurusインストールすると勝手に入る。存在しない必要があるなら後で消してください
aster-void Sep 27, 2023
8e1b456
モジュール化の説明をより分かりやすいように
aster-void Sep 27, 2023
0a7a4cc
言葉遣い(使い?)の修正
aster-void Sep 27, 2023
3de879e
Prettierかけてコメント/タイトル以外の"関数"をTermに
aster-void Sep 27, 2023
54b41d1
もう一回prettierかけたらなんか変わった
aster-void Sep 27, 2023
874f588
monthlyDataUse -> monthlyDataUsageに
aster-void Sep 27, 2023
d43bac6
prettierかけたり半角スペース入れたり消したり
aster-void Sep 27, 2023
6520cf2
永谷式にフォーマット
aster-void Sep 27, 2023
723b8e9
一応文字列の加算について説明の追加
aster-void Sep 27, 2023
3d37c49
Revert よくわからないけどciなら入らないので無視します
aster-void Sep 30, 2023
824d79b
change ===false to ! operator
aster-void Oct 1, 2023
e27bfd8
get rid of ++ operator
aster-void Oct 1, 2023
12da21f
if構文「で」実行に変更、半角スペース追加
aster-void Oct 1, 2023
1690041
Update docs/1-trial-session/09-functions/index.md
aster-void Oct 7, 2023
5d195bb
Update src/components/Term/definitions.js
aster-void Oct 7, 2023
08c5dab
Update src/components/Term/definitions.js
aster-void Oct 7, 2023
c6d9d72
mig from ++ to += 1
aster-void Oct 7, 2023
4f090f1
mig from ++ to += 1
aster-void Oct 7, 2023
2deb868
mig from ++ to += 1
aster-void Oct 7, 2023
728cc9e
文字列結合の説明の追加
aster-void Oct 7, 2023
65935b4
リンク切れの修正
aster-void Oct 7, 2023
bc8573a
コードブロックの外側に移動
aster-void Oct 7, 2023
2107f7e
fix link anchor from if statement #if-elseif-else to #if-else
aster-void Oct 8, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 59 additions & 7 deletions docs/1-trial-session/09-functions/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ greet("morning", "佐藤");

## <Term type="javascriptReturnValue">戻り値</Term>

<p><Term type="javascriptFunction">関数</Term>呼び出しは<Term type="javascriptExpression">式</Term>の一種です。<Term type="javascriptFunction">関数</Term>定義内で <strong>return 文</strong>を用いると、<Term type="javascriptFunction">関数</Term>の実行が停止され、<Term type="javascriptFunction">関数</Term>呼び出し<Term type="javascriptExpression">式</Term>の<Term type="javascriptEvaluation">評価</Term>結果が確定します。この値を<Term strong type="javascriptReturnValue">戻り値</Term>と呼びます。ある<Term type="javascriptValue">値</Term>を<Term type="javascriptReturnValue">戻り値</Term>として設定して関数の実行を終了することを、<Term type="javascriptFunction">関数</Term>がその<Term type="javascriptValue">値</Term>を<Term strong type="javascriptReturn">返す</Term>と表現します。</p>
<p><Term type="javascriptFunction">関数</Term>呼び出しは<Term type="javascriptExpression">式</Term>の一種です。<Term type="javascriptFunction">関数</Term>定義内で <strong>return 文</strong> を用いると、<Term type="javascriptFunction">関数</Term>の実行が停止され、<Term type="javascriptFunction">関数</Term>呼び出し<Term type="javascriptExpression">式</Term>の<Term type="javascriptEvaluation">評価</Term>結果が確定します。この値を<Term strong type="javascriptReturnValue">戻り値</Term>と呼びます。ある<Term type="javascriptValue">値</Term>を<Term type="javascriptReturnValue">戻り値</Term>として設定して<Term type="javascriptFunction">関数</Term>の実行を終了することを、<Term type="javascriptFunction">関数</Term>がその<Term type="javascriptValue">値</Term>を<Term strong type="javascriptReturn">返す</Term>と表現します。</p>

```javascript
function add(a, b) {
Expand All @@ -61,6 +61,24 @@ document.write(add(3, 4));

<video src={returnValueVideo} controls autoPlay muted loop />

:::tip
**return 文** が実行された時点で<Term type="javascriptFunction">関数</Term>の処理が終了するため、次のように書くことで [if ~ else 文](../if-statement/#if--else) や [&& (AND) 演算子](../boolean/#論理演算子)の繰り返しを避けつつ、複数の条件のついた処理を実行することができます。

```javascript
let age = 21;
let hasDriverLicense = true;
let isDrunk = true;
function tryToDrive() {
// if 構文で実行する式が一行だけの場合、{} を省略できます。
if (age < 18) return;
if (!hasDriverLicense) return;
if (isDrunk) return;
document.write("車を運転できます。");
}
```

:::

## <Term type="javascriptVariable">変数</Term>の<Term type="javascriptScope">スコープ</Term>

<p><Term type="javascriptFunction">関数</Term>内で<Term type="javascriptDeclaration">宣言</Term>された<Term type="javascriptVariable">変数</Term>は、<Term type="javascriptFunction">関数</Term>内でのみ有効です。<Term type="javascriptVariable">変数</Term>が有効な範囲のことを、その<Term type="javascriptVariable">変数</Term>の<Term type="javascriptScope" strong>スコープ</Term>と呼んでいます。</p>
Expand Down Expand Up @@ -102,23 +120,57 @@ increment();

:::

## モジュール化

複雑な操作を <Term type="javascriptFunction">関数</Term> として <Term strong type="javascriptModularization">モジュール化</Term> して複数のブロックに分解することで、コードの可読性を上げることができます。

モジュール化前:

```javascript
const stringToRepeat = "☆";
for (let i = 0; i < 10; i += 1) {
let result = "";
for (let j = 0; j < i; j += 1) {
result += stringToRepeat;
}
document.write(result);
document.write("<br>");
}
```

モジュール化後:

```javascript
function repeat(stringToRepeat, times) {
let result = "";
for (let j = 0; j < times; j += 1) {
result += stringToRepeat;
}
return result;
}
for (let i = 0; i < 10; i += 1) {
document.write(repeat("☆", i));
document.write("<br>");
}
```

この例における`repeat`<Term type="javascriptFunction">関数</Term>は、第一<Term type="javascriptParameter">引数</Term>の<Term type="javascriptString">文字列</Term>を第二<Term type="javascriptParameter">引数</Term>回だけ繰り返し<Term type="javascriptStringConcatenation">足した</Term>ものを返します。

## 演習

携帯電話料金を計算する<Term type="javascriptFunction">関数</Term>を作ってみましょう。

```javascript
function calculateCost(monthlyBandwidth) {
function calculateCost(monthlyDataUsage) {
// ここに処理を書く
}

document.write(calculateCost(3.5));
```

`calculateCost` は、<Term type="javascriptParameter">引数</Term>に月間転送量 `monthlyBandwidth` を取り、その月の携帯電話料金を<Term type="javascriptReturnValue">戻り値</Term>として<Term type="javascriptReturn">返す</Term><Term type="javascriptFunction">関数</Term>です。携帯電話料金は、下のルールで決定されるとします。
`calculateCost` は、<Term type="javascriptParameter">引数</Term>に月間転送量 `monthlyDataUsage` を取り、その月の携帯電話料金を<Term type="javascriptReturnValue">戻り値</Term>として<Term type="javascriptReturn">返す</Term><Term type="javascriptFunction">関数</Term>です。携帯電話料金は、下のルールで決定されるとします。

> 月間転送量を _monthlyBandwidth_ (GB) とします。
>
> - _monthlyBandwidth_ < 5.0 のとき、携帯電話料金は _monthlyBandwidth_ × 600 (円)
> - _monthlyBandwidth_ >= 5.0 のとき、携帯電話料金は 3000 (円)
> - 月間転送量 < 5.0 (GB) のとき、携帯電話料金は 月間転送量 × 600 (円/GB)
> - 月間転送量 >= 5.0 (GB) のとき、携帯電話料金は 3000 (円)
Comment thread
chvmvd marked this conversation as resolved.

<ViewSource url={import.meta.url} path="_samples/mobile-phone-bill" />
14 changes: 13 additions & 1 deletion src/components/Term/definitions.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ export default {
"/docs/trial-session/html/": "HTML",
"/docs/trial-session/javascript/": "JavaScriptことはじめ",
"/docs/trial-session/expressions/": "値と式と演算子",
"/docs/trial-session/expressions/#いろいろな演算子": "いろいろな演算子",
"/docs/trial-session/variables/": "変数",
"/docs/trial-session/boolean/": "論理値と論理演算子",
"/docs/trial-session/if-statement/": "条件分岐",
"/docs/trial-session/functions/": "関数",
"/docs/trial-session/functions/#モジュール化": "モジュール化",
"/docs/trial-session/css/": "ウェブサイトの見た目を整える",
"/docs/trial-session/object/": "オブジェクト",
"/docs/trial-session/dom/": "DOM",
Expand Down Expand Up @@ -165,7 +167,7 @@ export default {
},
javascriptExpression: {
name: "式 (JavaScript)",
definition: "JavaScript において、値を生成するまとまり。",
definition: "JavaScript において、計算・処理されて値を生成するまとまり。",
referencePage: "/docs/trial-session/expressions/",
},
javascriptEvaluation: {
Expand All @@ -179,6 +181,11 @@ export default {
"複数の演算子を含む式の評価順序を決定するための指標。例えば、乗算演算子は加算演算子より優先順位が高いため、 3 + 4 * 5 は 3 + (4 * 5) と評価される。",
referencePage: "/docs/trial-session/expressions/",
},
javascriptStringConcatenation: {
name: "文字列の結合",
definition: "文字列に加算演算子を使うと、一個目の文字列の後ろに二個目の文字列が追加される。",
referencePage: "/docs/trial-session/expressions/#いろいろな演算子",
},
javascriptVariable: {
name: "変数",
definition: "JavaScriptで値を一時的に保存しておくための入れ物。",
Expand Down Expand Up @@ -256,6 +263,11 @@ export default {
definition: "変数が有効な範囲",
referencePage: "/docs/trial-session/functions/",
},
javascriptModularization: {
name: "モジュール化",
definition: "ひとまとまりの煩雑なものや操作を一つにまとめて、コードを複数のブロックに分解すること。",
referencePage: "/docs/trial-session/functions/#モジュール化",
},
javascriptObject: {
name: "オブジェクト (JavaScript)",
definition:
Expand Down