Skip to content

Commit 5389e00

Browse files
authored
Merge pull request #207 from ut-code/copilot/update-javascript-chapter-1-explanations
JavaScript1章: プリミティブ型説明の分割・補強とオブジェクト例追加、練習問題の簡素化
2 parents d1c9dc7 + eb07e77 commit 5389e00

File tree

9 files changed

+174
-73
lines changed

9 files changed

+174
-73
lines changed

public/docs/javascript/1-basics/2-0-primitive-type.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ id: javascript-basics-primitive-type
33
title: 'データ型: プリミティブ型'
44
level: 2
55
question:
6+
- プリミティブ型とは、ざっくり言うとどういう値のことですか?
67
- プリミティブ型がイミュータブル(変更不可)というのは、どういう状態を指しますか?
7-
- String型で「テンプレートリテラル」を使うと、具体的に何が便利になるのですか?
8-
- Number型で整数と浮動小数点数の区別がないというのは、何か問題になることはありますか?
98
- SymbolやBigIntは、通常の開発でどのくらいの頻度で使うものですか?
109
---
1110

@@ -15,10 +14,12 @@ JavaScriptは動的型付け言語であり、変数は特定の型に紐付き
1514

1615
プリミティブ型はイミュータブル(変更不可)であり、以下の7種類が存在します。
1716

18-
1. **String**: 文字列。ES6から導入された「テンプレートリテラル(バッククォート `` ` ``)」を使うと、変数の埋め込みが容易です。
19-
2. **Number**: 数値。整数と浮動小数点数の区別はなく、すべて倍精度浮動小数点数(IEEE 754)として扱われます。
20-
3. **Boolean**: `true` または `false`
21-
4. **undefined**: 「値が未定義である」ことを表す型。変数を宣言して値を代入していない状態です。
22-
5. **null**: 「値が存在しない」ことを意図的に示す型。
23-
6. **Symbol**: 一意で不変な識別子。オブジェクトのプロパティキーなどに使われます。
24-
7. **BigInt**: `Number`型では表現できない巨大な整数を扱います(末尾に `n` をつけます)。
17+
1. **String**: 文字列
18+
2. **Number**: 数値
19+
3. **Boolean**: `true` または `false`
20+
4. **undefined**: 「値が未定義である」ことを表す型
21+
5. **null**: 「値が存在しない」ことを意図的に示す型
22+
6. **Symbol**: 一意で不変な識別子(主にオブジェクトのプロパティキー用途)
23+
7. **BigInt**: `Number`型では表現できない巨大な整数を扱う型(末尾に `n`
24+
25+
この章では、まず最もよく使う `String` / `Number` / `Boolean` / `undefined` / `null` を順に見ていきます。`Symbol``BigInt` は用途が限定的なため、ここでは「プリミティブ型の一種」であることだけ押さえれば十分です。

public/docs/javascript/1-basics/2-1-null-undefined.md

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
id: javascript-basics-string
3+
title: 文字列(String)
4+
level: 3
5+
question:
6+
- シングルクォートとダブルクォートで文字列を囲むことの違いは何ですか?
7+
- テンプレートリテラルは、どんな場面で使うと便利ですか?
8+
- テンプレートリテラルの `${}` の中に計算式を書けますか?
9+
---
10+
11+
### 文字列(String)
12+
13+
JavaScriptの文字列は、シングルクォート (`'`) またはダブルクォート (`"`) で作成します。
14+
15+
また、バッククォート (`` ` ``) で囲む**テンプレートリテラル**を使うと、変数や式を文字列に埋め込めます。文字列の連結(`+`)より読みやすくなることが多いため、こちらを使うのが一般的です。
16+
17+
```js-repl
18+
> const name = "Ada";
19+
undefined
20+
> const language = 'JavaScript';
21+
undefined
22+
> // + で連結
23+
> "Hello, " + name + "!"
24+
'Hello, Ada!'
25+
> // テンプレートリテラルで埋め込み
26+
> `Hello, ${name}!`
27+
'Hello, Ada!'
28+
> // 式も埋め込める
29+
> `${language}は${10 + 5}日で入門できます`
30+
'JavaScriptは15日で入門できます'
31+
```
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
id: javascript-basics-number
3+
title: 数値(Number)
4+
level: 3
5+
question:
6+
- JavaScriptで整数と小数を区別しないのは、どういう意味ですか?
7+
- 除算や剰余など、基本的な計算はどのように書けば良いですか?
8+
- 小数計算で誤差が出ることがあるのはなぜですか?
9+
---
10+
11+
### 数値(Number)
12+
13+
JavaScriptの数値は `Number` 型で表され、**整数と小数を区別しません**。どちらも同じ `number` として扱われます。
14+
15+
四則演算は直感的に行えます。べき乗は `**`、剰余は `%` を使います。
16+
17+
```js-repl
18+
> const a = 10; // 整数
19+
undefined
20+
> const b = 3.14; // 小数
21+
undefined
22+
> typeof a
23+
'number'
24+
> typeof b
25+
'number'
26+
> 10 + 3
27+
13
28+
> 10 / 3
29+
3.3333333333333335
30+
> 10 % 3
31+
1
32+
> 2 ** 4
33+
16
34+
> 0.1 + 0.2
35+
0.30000000000000004
36+
```
37+
38+
`0.1 + 0.2` のような小数計算で誤差が出るのは、JavaScriptが数値を内部的に2進数の浮動小数点として扱うためです。
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
id: javascript-basics-boolean
3+
title: 真偽値(Boolean)
4+
level: 3
5+
question:
6+
- Boolean型はどんな場面で使いますか?
7+
- '`true` / `false` は文字列の `"true"` / `"false"` と何が違いますか?'
8+
---
9+
10+
### 真偽値(Boolean)
11+
12+
真偽値は `true``false` の2つの値を持ちます。条件分岐や判定処理で使う基本的な型です。
13+
14+
論理演算子には、AND(`&&`)、OR(`||`)、NOT(`!`)があります。
15+
16+
```js-repl
17+
> const isActive = true;
18+
undefined
19+
> const hasPermission = false;
20+
undefined
21+
> typeof isActive
22+
'boolean'
23+
> // AND: 両方 true なら true
24+
> isActive && hasPermission
25+
false
26+
> // OR: どちらかが true なら true
27+
> isActive || hasPermission
28+
true
29+
> // NOT: true/false を反転
30+
> !isActive
31+
false
32+
```
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
id: javascript-basics-null-undefined
3+
title: undefined と null
4+
level: 3
5+
question:
6+
- undefinedとnullは、どう使い分けるのが良いですか?
7+
- 変数を宣言しただけの状態がundefinedになるのはなぜですか?
8+
- '`typeof null` が `''object''` になるのは本当に正しいのですか?'
9+
---
10+
11+
### undefined と null
12+
13+
他言語経験者が最初に混乱しやすいのが、この `undefined``null` の違いです。
14+
15+
- **undefined**: JavaScriptエンジンが「値がまだない」ことを示すときに現れます(例: 宣言だけして代入していない変数)。
16+
- **null**: プログラマが「ここには値がない」と明示したいときに代入します。
17+
18+
```js-repl
19+
> let unassigned;
20+
undefined
21+
> unassigned
22+
undefined
23+
> let empty = null;
24+
undefined
25+
> typeof unassigned
26+
'undefined'
27+
> typeof empty
28+
'object'
29+
```
30+
31+
`typeof null``'object'` になるのは、JavaScript初期から残っている歴史的な仕様です。`null` 自体はオブジェクトではなく、プリミティブ型の値です。

public/docs/javascript/1-basics/3-0-object.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,23 @@ question:
1414

1515
主なオブジェクト型には以下があります。
1616

17-
* **Object**: キーと値のペアの集合(辞書、ハッシュマップに近い)。
18-
* **Array**: 順序付きリスト。
17+
* **Object**: キーと値のペアの集合(辞書、ハッシュマップに近い)。詳しくは5章で解説します。
18+
* **Array**: 順序付きリスト。詳しくは7章で解説します。
1919
* **Function**: JavaScriptでは関数もオブジェクトであり、変数に代入したり引数として渡すことができます(第一級関数)。
20+
21+
```js-repl
22+
> // Object: キーと値のペアの集合
23+
> const user = { name: "Alice", age: 25 };
24+
undefined
25+
> user.name
26+
'Alice'
27+
> user["age"]
28+
25
29+
> // Array: 順序付きリスト(インデックスは 0 から始まる)
30+
> const colors = ["Red", "Green", "Blue"];
31+
undefined
32+
> colors[0]
33+
'Red'
34+
> colors.length
35+
3
36+
```
Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,19 @@
11
---
22
id: javascript-basics-practice1
3-
title: '練習問題1: テンプレートリテラルと型変換'
3+
title: '練習問題1: テンプレートリテラル'
44
level: 3
55
question:
6-
- テンプレートリテラルを使って自己紹介文を作る具体的なコード例を見せてもらえますか?
7-
- 論理和演算子 `||` と Null合体演算子 `??` は、どちらを使っても良いのですか?違いはありますか?
8-
- 年齢がnullまたはundefinedの場合に「不明」と表示させる部分について、コードのヒントが欲しいです。
6+
- テンプレートリテラルの `${}` の中に計算式を書けますか?
7+
- バッククォートの中でバッククォート自体を使いたい場合はどうすれば良いですか?
98
---
109

11-
### 練習問題1: テンプレートリテラルと型変換
10+
### 練習問題1: テンプレートリテラル
1211

13-
ユーザーの年齢(数値)と名前(文字列)を受け取り、自己紹介文を作成する関数を作成してください。
14-
ただし、年齢が `null` または `undefined` の場合は「不明」と表示するようにしてください。論理和演算子 `||` または Null合体演算子 `??` を活用してみましょう。
12+
`itemName` という変数に商品名(文字列)、`price` という変数に価格(数値)、`stock` という変数に在庫数(数値)をそれぞれ代入してください。その後、テンプレートリテラルを使って「商品: [商品名], 価格: [価格]円, 在庫: [在庫数]個」という形式の文字列を作り、`console.log()` で出力するコードを書いてみましょう。
1513

1614
```js:practice2_1.js
17-
// 以下の関数を完成させてください
18-
function introduce(name, age) {
19-
// ここにコードを記述
20-
}
21-
22-
console.log(introduce("Tanaka", 25));
23-
console.log(introduce("Sato", null));
2415
```
2516

2617
```js-exec:practice2_1.js
27-
My name is Tanaka and I am 25 years old.
28-
My name is Sato and I am 不明 years old.
18+
(出力例) 商品: 高性能マウス, 価格: 4500円, 在庫: 2
2919
```
Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,20 @@
11
---
22
id: javascript-basics-practice2
3-
title: '練習問題2: オブジェクトの操作と参照'
3+
title: '練習問題2: constとオブジェクトの変更'
44
level: 3
55
question:
6-
- なぜ `newList = originalList` だと `originalList` も変更されてしまうのですか?
7-
- 「参照コピー」とはどういう状態ですか?
8-
- スプレッド構文 `...` を使って、この問題をどう解決すれば良いですか?
9-
- 配列をコピーする他の方法はありますか?
6+
- constで宣言したのにプロパティを変更できるのはなぜですか?
7+
- プロパティの変更と、変数への再代入の違いは何ですか?
108
---
119

12-
### 練習問題2: オブジェクトの操作と参照
10+
### 練習問題2: constとオブジェクトの変更
1311

14-
以下のコードにはバグ(意図しない挙動)があります。
15-
`originalList` の内容を保持したまま、新しい要素を追加した `newList` を作成したいのですが、現状では `originalList` も変更されてしまいます。
16-
スプレッド構文 `...` などを使い、`originalList` を変更せずに `newList` を作成するように修正してください。
12+
`const` を使って、`name`(商品名・文字列)と `price`(価格・数値)を持つ商品オブジェクト `product` を作成してください。
13+
次に、`price` を別の値に変更し、さらに `stock`(在庫数・数値)プロパティを新たに追加してから、`console.log()` でオブジェクトの内容を出力してみましょう。
1714

1815
```js:practice2_2.js
19-
const originalList = ["Apple", "Banana"];
20-
21-
// 参照コピーになっているため originalList も変わってしまう
22-
const newList = originalList;
23-
newList.push("Orange");
24-
25-
console.log("Original:", originalList); // ["Apple", "Banana"] と出力させたい
26-
console.log("New:", newList); // ["Apple", "Banana", "Orange"] と出力させたい
2716
```
2817

2918
```js-exec:practice2_2.js
19+
(出力例) { name: 'コーヒー', price: 550, stock: 30 }
3020
```

0 commit comments

Comments
 (0)