Skip to content

Commit 4aae52b

Browse files
committed
3日目
1 parent 6977521 commit 4aae52b

File tree

12 files changed

+263
-17
lines changed

12 files changed

+263
-17
lines changed

docs/day03/07.md

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class Dog {
2626
}
2727
```
2828

29-
上の例の`Dog`クラスの定義は、現実世界の犬を表す設計図です。犬を表すためのデータには、例えば「年齢」や「名前」があります。これが`age`フィールドや`name`フィールドです。
29+
JavaScriptにおいてクラスを定義するためには、`class`構文を用います。上の例で示した`Dog`クラスの定義は、現実世界の犬を表す設計図です。犬を表すためのデータには、例えば「年齢」や「名前」があります。これが`age`フィールドや`name`フィールドです。
3030

3131
犬に関わる動作には、例えば「吠える」などがあります。`bark`メソッドとしてみましょう。メソッドの中の`this`キーワードは、設計図から生まれた実体を表します。
3232

@@ -43,5 +43,35 @@ pochi.bark();
4343

4444
なお、これ以降、クラスのメソッドは`#`記号を用いて表すこととします。例えば、`Dog`クラスの`bark`メソッドは`Dog#bark`メソッドと表記します。
4545

46+
## コンストラクタ
47+
48+
コンストラクタは、`new`演算子が使用された際に呼び出される関数です。`JavaScript`では、`constructor`という名前のメソッドを定義することで使用することができます。
49+
50+
```js
51+
class Dog {
52+
age;
53+
constructor(age) {
54+
this.age = age;
55+
}
56+
}
57+
58+
const pochi = new Dog(8);
59+
console.log(pochi.age); // 8
60+
```
61+
62+
コンストラクタは、他の関数と同じように、引数を取ることができます。通常、コンストラクタに渡される値は、フィールドの初期化などに用いられます。
63+
64+
## コンストラクタを使用する
65+
66+
JavaScriptには、日時を表すための`Date`クラスが用意されています。`Date`クラスのコンストラクタは、例えば文字列引数1つにより呼び出すことができ、その文字列を日付として解釈しようと試みます。`Date`クラスには、日時を扱うための様々な便利メソッドが用意されています。
67+
68+
```js
69+
const valentinesDay = new Date('2020-02-14 00:00:00');
70+
console.log(valentinesDay.getDate()); // 14
71+
```
72+
73+
例えば、`Date#getDate`メソッドは、その日の日付を返すメソッドです。
74+
4675
## 課題
47-
`Dog`クラスに、`私の名前は〜です。`(〜の部分に`name`プロパティを埋め込む)とコンソールに出力する`introduceSelf`メソッドを追加してください。
76+
77+
`Dog`クラスに、`私の名前は〜です。`(〜の部分に`name`プロパティを埋め込む)とコンソールに出力する`introduceSelf`メソッドを追加してください。実際に`introduceSelf`メソッドを実行させ、正常に動作することを確認してください。

docs/day03/08.md

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,67 @@
11
---
2-
title: コンストラクタと継承
2+
title: 組み込みクラス
33
---
44

5-
## コンストラクタ
5+
## Arrayクラス
66

7-
コンストラクタは、`new`演算子が使用された際に呼び出される関数です。`JavaScript`では、`constructor`という名前のメソッドを定義することで使用することができます。
7+
今まで何気なく扱ってきたJavaScriptの配列ですが、実は`Array`クラスのインスタンスです。具体的に言えば、配列リテラルが生成するオブジェクトは、`Array`クラスのインスタンスです。
8+
9+
Arrayクラスには、開発効率を劇的に変える便利なメソッドが大量に定義されています。
10+
11+
### `map`メソッド
12+
13+
`Array#map`メソッドは、関数の引数をひとつとり、配列の各要素に対して関数を実行し、それらの戻り値からなる新たな配列を返します。
814

915
```js
10-
class Dog {
11-
age;
12-
constructor(age) {
13-
this.age = age;
14-
}
15-
}
16-
17-
const pochi = new Dog(8);
18-
console.log(pochi.age); // 8
16+
const numbers = [1, 3, 6, 8];
17+
const doubledNumbers = numbers.map(value => value * 2); // [2, 6, 12, 16]
1918
```
2019

21-
コンストラクタは、他の関数と同じように、引数を取ることができます。通常、コンストラクタに渡される値は、フィールドの初期化などに用いられます。
20+
2行目の`map`メソッドの引数として渡しているアロー関数式`value => value * 2`は、引数をひとつとり、その値を2倍にして返す関数です。この関数が配列の各要素に対して実行されて、その戻り値の集合が`doubledNumber`となっています。
21+
22+
### `filter`メソッド
2223

23-
## コンストラクタを使用する
24+
`Array#filter`メソッドは、関数の引数をひとつとり、配列の各要素に対して関数を実行し、それらの戻り値がtruthyだったもののみからなる新しい配列を返します。
25+
26+
```js
27+
const evenNumbers = numbers.filter(value => value % 2 === 0); // [6, 8]
28+
```
29+
30+
アロー関数式`value => value % 2 === 0`は、引数が偶数の場合`false`を、奇数の場合`true`を返す関数です。`numbers`のうち`6``8`の場合のみ戻り値が`true`となるので、その2つのみからなる新しい配列が`evenNumbers`に入ります。
31+
32+
## DOMオブジェクトと継承
33+
34+
DOMオブジェクトも、何らかのクラスのインスタンスだとみなせます。例えば、
35+
36+
```js
37+
document.querySelector('div');
38+
```
2439

25-
JavaScriptには、日時を表すための`Date`クラスが用意されています。`Date`クラスのコンストラクタは、例えば文字列引数1つにより呼び出すことができ、その文字列を日付として解釈しようと試みます。`Date`クラスには、日時を扱うための様々な便利メソッドが用意されています
40+
のようにして取得された`div`要素は、`HTMLDivElement`クラスのインスタンスだと考えられます
2641

42+
[`HTMLDivElement`について記述している文書](https://developer.mozilla.org/ja/docs/Web/API/HTMLDivElement)を読んでみましょう。おなじみ`textContent`プロパティや`style`プロパティが存在していませんね。
2743

44+
これには、**継承**と呼ばれる仕組みが関係しています。継承とは、その名の通り機能を受け継ぐための仕組みです。ここでいう機能とは、例えばプロパティやメソッドです。継承先のオブジェクトでは、継承元のプロパティやメソッドを使用することができます。
45+
46+
DOMは非常に高度な枠組みです。今回の例でいえば、`HTMLDivElement``HTMLElement`を継承しており、`HTMLElement``Element`を、そして`Element``Node`を継承しています。そして`HTMLDivElement`は、そのすべてを利用できるのです。
47+
48+
実は、`textContent``Node`オブジェクトのプロパティで、`style``HTMLElement`オブジェクトのプロパティです。どのプロパティがどのオブジェクトに所属するのかを具体的に記憶する必要性はあまりありませんが、リファレンスを調べる場合にこの知識は大変有用です。
49+
50+
## 課題
51+
52+
[`Array#reduce`メソッド](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)は、配列のすべての要素から、単一の値を導き出す(次元を下げる)メソッドです。
53+
54+
```js
55+
const sum = [1, 2, 3, 4, 5].reduce((previous, current) => previous + current, 0);
56+
console.log(sum); // 15
57+
```
58+
59+
`reduce`メソッドの第一引数は、引数を2つとる関数です。配列の各要素をこの関数の第二引数に渡し、戻り値を次の実行時に第一引数として渡します。この第一引数は、初回実行時には`reduce`メソッド自体の第二引数が用いられます(ただしこの引数が省略された場合は配列の最初の要素が用いられ、実行回数が1回分減ります)。
60+
61+
`reduce`メソッドを使用して、配列の最小値を求めてみてください。
62+
63+
```js
64+
const numbers = [6, 9, 1, 3, 2];
65+
const minimumNumber = numbers.reduce(/** ここに記述 */);
66+
console.log(minimumNumber); // 1
67+
```

docs/day03/09.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
---
2+
title: プルリクエストを用いた共同開発
3+
---
4+
5+
GitHubには、**プルリクエスト**と呼ばれる、変更を提案するための機能があります。この機能を正しく利用することで、複数人による開発を円滑に進めることができます。
6+
7+
## ブランチ
8+
9+
以前少し触れたとおりGitにおける**ブランチ**とは、ソースコードの分岐です。複数人で開発をする場合は、同じソースコードに複数人が同時に触れることのないよう、編集を枝分かれさせます。
10+
11+
![ブランチ](09/branch.svg)
12+
13+
作業しているブランチを切り替えるためには、`git checkout`コマンドを使用します。ただし、ブランチがまだ存在せず、新しく作成することが必要な場合は`-b`オプションを付けます。
14+
15+
複数のブランチをひとつのブランチに統合する作業を**マージ**といいます。分岐したブランチでいくつかのコミットをしたら、もとのブランチをチェックアウトした状態で`git merge`コマンドを実行しましょう。**マージコミット**が作成され、分岐先のブランチの変更を取り込むことができます。
16+
17+
## プルリクエストを利用してマージする
18+
19+
Gitのリポジトリを作成すると、通常`master`ブランチが作成されます。`master`ブランチは、すべての起点となる重要なブランチです。このため、`master`ブランチへのマージ作業は慎重に行うべきでしょう。GitHubのプルリクエスト機能を使用すれば、マージ前に様々な確認作業を行うことができます。
20+
21+
まずは、**トピックブランチ**(あるひとつの変更を加えるためのブランチ)を作成します。どのような変更を行うかを把握しやすいネーミングを心がけましょう。
22+
23+
```
24+
$ git checkout -b add-something
25+
```
26+
27+
続いて、トピックブランチ上で適当な編集を行い、コミットします。
28+
29+
```
30+
$ git add -A
31+
$ git commit -m "somethingを追加した"
32+
```
33+
34+
リモートリポジトリにプッシュしましょう。
35+
36+
```
37+
$ git push -u origin add-something
38+
```
39+
40+
:::tip
41+
`git checkout`コマンドで作成したブランチは、まだローカルリポジトリにしか存在していないため、プッシュする際に`-u`オプションを指定して、リモートリポジトリを指定する必要があります。2回目以降のプッシュでは`git push`のみで構いません。
42+
:::
43+
44+
続いて、GitHubの`Pull requests`タブから、`New pull request`もしくは`New`をクリックします。
45+
46+
![プルリクエストの準備](09/new-pull-request-preparation.png)
47+
48+
`base`をマージ先のブランチ、`compare`を先ほど作成したブランチに設定し、プルリクエストのタイトルとメッセージを記入します。
49+
50+
:::tip
51+
先ほどの画面で`Compare & pull request`のボタンが表示されていた場合は自動的に`base``compare`が設定されます。
52+
:::
53+
54+
![プルリクエストの作成](09/new-pull-request.png)
55+
56+
`Create pull request`を選択すると、プルリクエストが作成されます。
57+
58+
![作成されたプルリクエスト](09/pull-request-created.png)
59+
60+
`Merge pull request`を押して確認すれば、変更が`base`に指定したブランチに反映されます。
61+
62+
```
63+
$ git checkout master
64+
$ git pull
65+
```
66+
67+
`master`ブランチをプルして、変更が正しく反映されていることを確認しましょう。
68+
69+
## ほかの人のリポジトリの開発に参加する
70+
71+
### 権限の付与
72+
73+
`Settings``Manage access`から、`Invite a collaborator`を押すことで、ほかの人をリポジトリに招待することができます。
74+
75+
![権限の付与](09/authorize-others.png)
76+
77+
### 開発の開始
78+
79+
権限が付与されると、メールでその旨が通知されます。リポジトリの`Code`ボタンからリポジトリのURLを取得し
80+
81+
```
82+
$ git clone [リポジトリのURL]
83+
```
84+
85+
としてリモートリポジトリをクローンしましょう。
86+
87+
![リポジトリのクローン](09/clone-repository.png)
88+
89+
:::tip
90+
`git clone`を用いてリポジトリをクローンした場合には、はじめからリモートリポジトリが結びついているため、
91+
92+
```
93+
$ git remote add origin [リポジトリのURL]
94+
```
95+
96+
を実行する必要はありません。
97+
:::
98+
99+
## 課題
100+
101+
ut.code(); Learn(このウェブサイト)は、[GitHubにて管理](https://github.com/ut-code/utcode-learn)されています。編集権限を受け取り、何かしらの編集をして、プルリクエストを作成してみましょう。

docs/day03/09/authorize-others.png

154 KB
Loading

docs/day03/09/branch.svg

Lines changed: 68 additions & 0 deletions
Loading

docs/day03/09/clone-repository.png

161 KB
Loading

docs/day03/09/fork.png

190 KB
Loading
114 KB
Loading

docs/day03/09/new-pull-request.png

110 KB
Loading
231 KB
Loading

0 commit comments

Comments
 (0)