diff --git a/public/docs/cpp/0-intro/4-1-include.md b/public/docs/cpp/0-intro/4-1-include.md index 00b6c4eb..a6113935 100644 --- a/public/docs/cpp/0-intro/4-1-include.md +++ b/public/docs/cpp/0-intro/4-1-include.md @@ -14,4 +14,4 @@ question: `#include` は、他のファイルに書かれた機能を利用するための**プリプロセッサ命令**です。ここでは、コンソールへの入出力機能を提供する `iostream` という標準ライブラリのヘッダファイルを読み込んでいます。これにより、`std::cout` などが使えるようになります。 * `< >` で囲む: 標準ライブラリのヘッダファイルをインクルードする場合 - * `" "` で囲む: 自分で作成したヘッダファイルをインクルードする場合 (後の章で学びます) + * `" "` で囲む: 自分で作成したヘッダファイルをインクルードする場合 ([[./5]]で学びます) diff --git a/public/docs/cpp/0-intro/5-0-summary.md b/public/docs/cpp/0-intro/5-0-summary.md index f4886ce1..07044ea2 100644 --- a/public/docs/cpp/0-intro/5-0-summary.md +++ b/public/docs/cpp/0-intro/5-0-summary.md @@ -12,4 +12,4 @@ question: [] * すべてのC++プログラムは `main` 関数から実行が始まります。 * `#include` で外部ライブラリの機能を読み込み、`namespace` で名前の衝突を避けます。 -これであなたもC++プログラマの仲間入りです!次の章では、C++の根幹をなす型システムとメモリの仕組みについて学んでいきましょう。 +これであなたもC++プログラマの仲間入りです![[./next]]では、C++の根幹をなす型システムとメモリの仕組みについて学んでいきましょう。 diff --git a/public/docs/cpp/10-stl-containers/1-0-about.md b/public/docs/cpp/10-stl-containers/1-0-about.md index 4555e88f..9f641611 100644 --- a/public/docs/cpp/10-stl-containers/1-0-about.md +++ b/public/docs/cpp/10-stl-containers/1-0-about.md @@ -15,4 +15,4 @@ STLは、主に3つの要素から構成されています。 2. **アルゴリズム (Algorithms)**: ソート、検索、変換など、コンテナ上のデータに対して操作を行う関数群です。 3. **イテレータ (Iterators)**: コンテナの要素を指し示し、アルゴリズムがコンテナの種類に依存せずに各要素にアクセスするための統一的なインターフェースを提供します。ポインタを一般化したようなものです。 -これら3つが連携することで、C++プログラマは効率的で再利用性の高いコードを素早く書くことができます。この章では「コンテナ」を、次の章では「アルゴリズム」と、それらをつなぐ「イテレータ」の応用を詳しく見ていきます。 +これら3つが連携することで、C++プログラマは効率的で再利用性の高いコードを素早く書くことができます。この章では「コンテナ」を、[[./11]]では「アルゴリズム」と、それらをつなぐ「イテレータ」の応用を詳しく見ていきます。 diff --git a/public/docs/cpp/11-stl-algorithms/-intro.md b/public/docs/cpp/11-stl-algorithms/-intro.md index 6e0f4032..564ca962 100644 --- a/public/docs/cpp/11-stl-algorithms/-intro.md +++ b/public/docs/cpp/11-stl-algorithms/-intro.md @@ -1,3 +1,3 @@ -前の章ではSTLのコンテナについて学び、様々なデータを効率的に格納する方法を見てきました。しかし、データを格納するだけではプログラムは完成しません。そのデータを並べ替えたり、検索したり、特定の処理を施したりといった「操作」が必要です。 +[[./10]]ではSTLのコンテナについて学び、様々なデータを効率的に格納する方法を見てきました。しかし、データを格納するだけではプログラムは完成しません。そのデータを並べ替えたり、検索したり、特定の処理を施したりといった「操作」が必要です。 この章では、STLのもう一つの強力な柱である**アルゴリズム**ライブラリを学びます。これらのアルゴリズムは、コンテナ内のデータを操作するための汎用的な関数群です。そして、アルゴリズムをさらに柔軟かつ強力にするための現代的なC++の機能、**ラムダ式**についても解説します。これらをマスターすれば、驚くほど少ないコードで複雑なデータ操作が実現できるようになります。 diff --git a/public/docs/cpp/12-raii-smart-ptrs/-intro.md b/public/docs/cpp/12-raii-smart-ptrs/-intro.md index 25581898..d0f49220 100644 --- a/public/docs/cpp/12-raii-smart-ptrs/-intro.md +++ b/public/docs/cpp/12-raii-smart-ptrs/-intro.md @@ -1,3 +1,3 @@ -これまでの章で、`new` と `delete` を使った動的なメモリ管理を学びました。しかし、これらの手動管理は `delete` の呼び忘れによるメモリリークや、複雑なコードでのリソース管理の煩雑さを引き起こす原因となりがちです。 +[[./3]]で、`new` と `delete` を使った動的なメモリ管理を学びました。しかし、これらの手動管理は `delete` の呼び忘れによるメモリリークや、複雑なコードでのリソース管理の煩雑さを引き起こす原因となりがちです。 C++11以降の「モダンC++」では、こうした問題を解決するための洗練された仕組みが導入されました。この章では、エラーハンドリングのための**例外処理**、リソース管理の基本思想である **RAIIイディオム**、そしてそれを具現化する**スマートポインタ** (`std::unique_ptr`, `std::shared_ptr`) について学び、より安全で堅牢なコードを書くための流儀を身につけます。 diff --git a/public/docs/cpp/2-data-containers/4-0-range-based-for.md b/public/docs/cpp/2-data-containers/4-0-range-based-for.md index 79c5ccd1..d4c64f31 100644 --- a/public/docs/cpp/2-data-containers/4-0-range-based-for.md +++ b/public/docs/cpp/2-data-containers/4-0-range-based-for.md @@ -62,5 +62,5 @@ Total Score: 307 ``` > **Advanced Hint:** -> 上記の `auto item` は、要素を「コピー」して取り出します。`std::string` のような大きなデータを扱う場合、コピーコストを避けるために `const auto& item` (参照)を使うのが一般的ですが、これについては**第5章**で詳しく解説します。今の段階では「`auto` でループが回せる」と覚えておけば十分です。 +> 上記の `auto item` は、要素を「コピー」して取り出します。`std::string` のような大きなデータを扱う場合、コピーコストを避けるために `const auto& item` (参照)を使うのが一般的ですが、これについては[[./5]]で詳しく解説します。今の段階では「`auto` でループが回せる」と覚えておけば十分です。 diff --git a/public/docs/cpp/3-pointers/-intro.md b/public/docs/cpp/3-pointers/-intro.md index 00082dbb..0bff3f21 100644 --- a/public/docs/cpp/3-pointers/-intro.md +++ b/public/docs/cpp/3-pointers/-intro.md @@ -1,6 +1,6 @@ ようこそ、C++学習の最大の山場へ。 -第3章までは、`std::vector`や`std::string`といった便利な機能を使ってきましたが、今回はその「裏側」で何が起きているかを覗き込みます。 +[[./2]]では、`std::vector`や`std::string`といった便利な機能を使ってきましたが、今回はその「裏側」で何が起きているかを覗き込みます。 他の言語(Java, Python, C\#など)では言語機能やガベージコレクション(GC)が隠蔽してくれている「メモリ」という物理的なリソースを、C++では直接操作することができます。これがC++の強力な武器であり、同時にバグの温床でもあります。 -ここを理解すれば、第3章の機能がいかに偉大だったか、そしてコンピュータが実際にどう動いているかが手に取るようにわかるようになります。 +ここを理解すれば、[[./2]]の機能がいかに偉大だったか、そしてコンピュータが実際にどう動いているかが手に取るようにわかるようになります。 diff --git a/public/docs/cpp/3-pointers/2-0-array.md b/public/docs/cpp/3-pointers/2-0-array.md index d9408be5..e5f5f546 100644 --- a/public/docs/cpp/3-pointers/2-0-array.md +++ b/public/docs/cpp/3-pointers/2-0-array.md @@ -11,7 +11,7 @@ question: ## 配列とポインタの関係 -第3章では `std::vector` を使いましたが、C++にはC言語互換の「生の配列(Cスタイル配列)」も存在します。これはサイズが固定で、機能が制限されています。 +[[./2]]では `std::vector` を使いましたが、C++にはC言語互換の「生の配列(Cスタイル配列)」も存在します。これはサイズが固定で、機能が制限されています。 * **配列名の減衰(Decay):** 配列の名前は式の中で使うと、**「先頭要素へのポインタ」**として扱われます。これを「減衰(Decay)」と呼びます。 * **ポインタ演算:** ポインタに対して数値を足し引きすると、**「その型のサイズ分」**だけアドレスが移動します。`int`(通常4バイト)のポインタに `+1` すると、メモリアドレスは4増えます。 diff --git a/public/docs/cpp/3-pointers/4-4-memory-leak.md b/public/docs/cpp/3-pointers/4-4-memory-leak.md index e8dd1836..52e9b1c6 100644 --- a/public/docs/cpp/3-pointers/4-4-memory-leak.md +++ b/public/docs/cpp/3-pointers/4-4-memory-leak.md @@ -14,7 +14,7 @@ question: もし `delete` を忘れるとどうなるでしょう? 確保されたメモリは、プログラムが終了するまで「使用中」のまま残ります。これを**メモリリーク**と呼びます。長時間動くサーバーなどでこれが起きると、メモリを食いつぶしてシステムがクラッシュします。 -**第3章の振り返り:** +**[[./2]]の振り返り:** `std::vector` や `std::string` は、内部で `new` と `delete` を自動的に行ってくれています。 * 作成時に `new` で確保。 diff --git a/public/docs/cpp/4-functions/-intro.md b/public/docs/cpp/4-functions/-intro.md index 580dbf6a..a328d955 100644 --- a/public/docs/cpp/4-functions/-intro.md +++ b/public/docs/cpp/4-functions/-intro.md @@ -1,3 +1,3 @@ -前章(第4章)では、C++のメモリモデルの核心である「ポインタ」について学びました。ポインタは強力ですが、構文が複雑になりがちで、バグの温床にもなりえます。 +[[./3]]では、C++のメモリモデルの核心である「ポインタ」について学びました。ポインタは強力ですが、構文が複雑になりがちで、バグの温床にもなりえます。 C++では、C言語から受け継いだポインタに加え、より安全で直感的な**「参照(Reference)」**という概念が導入されています。本章では、関数の設計を通して、この「参照」がいかに強力な武器になるかを学びます。「データをどう渡すか」は、C++のパフォーマンスと設計の良し悪しを決める最も重要な要素の一つです。 diff --git a/public/docs/cpp/4-functions/1-1-prototype-declaration.md b/public/docs/cpp/4-functions/1-1-prototype-declaration.md index 86830ef1..f0c03f5a 100644 --- a/public/docs/cpp/4-functions/1-1-prototype-declaration.md +++ b/public/docs/cpp/4-functions/1-1-prototype-declaration.md @@ -45,4 +45,4 @@ Hello C++! Hello C++! ``` -実際の開発では、プロトタイプ宣言をヘッダーファイル(`.h`)に書き、定義をソースファイル(`.cpp`)に書くことで、大規模なプログラムを管理します(これについては次章で詳しく解説します)。 +実際の開発では、プロトタイプ宣言をヘッダーファイル(`.h`)に書き、定義をソースファイル(`.cpp`)に書くことで、大規模なプログラムを管理します(これについては[[./5]]で詳しく解説します)。 diff --git a/public/docs/cpp/4-functions/1-2-void.md b/public/docs/cpp/4-functions/1-2-void.md index 892ab104..549af6e1 100644 --- a/public/docs/cpp/4-functions/1-2-void.md +++ b/public/docs/cpp/4-functions/1-2-void.md @@ -16,4 +16,4 @@ question: void printMessage(std::string message); ``` -第2章で学んだように、`int`や`double`などの型は変数を定義するために使えましたが、`void`は「型がない」ことを示す特殊な型なので、`void my_variable;` のように変数を定義することはできません。あくまで関数の戻り値の型としてのみ使います。 +[[./1]]で学んだように、`int`や`double`などの型は変数を定義するために使えましたが、`void`は「型がない」ことを示す特殊な型なので、`void my_variable;` のように変数を定義することはできません。あくまで関数の戻り値の型としてのみ使います。 diff --git a/public/docs/cpp/4-functions/2-2-arg-by-pointer.md b/public/docs/cpp/4-functions/2-2-arg-by-pointer.md index 50c1f6f7..a0443684 100644 --- a/public/docs/cpp/4-functions/2-2-arg-by-pointer.md +++ b/public/docs/cpp/4-functions/2-2-arg-by-pointer.md @@ -10,7 +10,7 @@ question: ### 2\. ポインタ渡し (Pass by Pointer) -C言語からある手法です。第4章で学んだポインタ(アドレス)を渡します。 +C言語からある手法です。[[./3]]で学んだポインタ(アドレス)を渡します。 * **メリット:** コピーが発生しない(アドレス値のコピーのみ)。呼び出し元のデータを変更できる。 * **デメリット:** 呼び出す際に `&` を付ける必要がある。関数内で `*` や `->` を使う必要があり、構文が汚れる。`nullptr` チェックが必要になることがある。 diff --git a/public/docs/cpp/6-classes-basics/4-2-destructor.md b/public/docs/cpp/6-classes-basics/4-2-destructor.md index d110ef84..1b049eb0 100644 --- a/public/docs/cpp/6-classes-basics/4-2-destructor.md +++ b/public/docs/cpp/6-classes-basics/4-2-destructor.md @@ -73,4 +73,4 @@ Destructor called for Kenji. --- Back in main --- ``` -実行結果を見ると、`kenji`オブジェクトが生成されたときにコンストラクタが、`create_person_scope`関数のスコープを抜けるときにデストラクタが自動的に呼び出されていることがわかります。動的に確保したメモリの解放など、クリーンアップ処理はデストラクタに書くのが定石です。この考え方は、今後の章で学ぶRAII(Resource Acquisition Is Initialization)という重要な概念に繋がります。 +実行結果を見ると、`kenji`オブジェクトが生成されたときにコンストラクタが、`create_person_scope`関数のスコープを抜けるときにデストラクタが自動的に呼び出されていることがわかります。動的に確保したメモリの解放など、クリーンアップ処理はデストラクタに書くのが定石です。この考え方は、[[./12]]で学ぶRAII(Resource Acquisition Is Initialization)という重要な概念に繋がります。 diff --git a/public/docs/cpp/6-classes-basics/5-0-summary.md b/public/docs/cpp/6-classes-basics/5-0-summary.md index 9b2b4862..caeb7b8b 100644 --- a/public/docs/cpp/6-classes-basics/5-0-summary.md +++ b/public/docs/cpp/6-classes-basics/5-0-summary.md @@ -16,4 +16,4 @@ question: [] - **コンストラクタ**は、オブジェクト生成時に自動で呼ばれ、初期化を行います。 - **デストラクタ**は、オブジェクト破棄時に自動で呼ばれ、後片付けを行います。 -クラスを使いこなすことで、プログラムの部品化が進み、再利用性やメンテナンス性が格段に向上します。次の章では、クラスのさらに進んだ機能について学んでいきましょう。 +クラスを使いこなすことで、プログラムの部品化が進み、再利用性やメンテナンス性が格段に向上します。[[./next]]では、クラスのさらに進んだ機能について学んでいきましょう。 diff --git a/public/docs/cpp/7-classes-advanced/-intro.md b/public/docs/cpp/7-classes-advanced/-intro.md index 490d0e05..46b1d270 100644 --- a/public/docs/cpp/7-classes-advanced/-intro.md +++ b/public/docs/cpp/7-classes-advanced/-intro.md @@ -1 +1 @@ -第7章では、C++のオブジェクト指向プログラミングの核となる`class`の基本的な使い方を学びました。しかし、クラスを真に強力なツールとして使いこなすには、もう少し知識が必要です。この章では、オブジェクトのコピー、演算子のオーバーロード、クラスで共有されるメンバなど、より実践的でパワフルな機能について掘り下げていきます。これらの概念をマスターすることで、あなたの書くクラスはより安全で、直感的で、再利用性の高いものになるでしょう。 +[[./6]]では、C++のオブジェクト指向プログラミングの核となる`class`の基本的な使い方を学びました。しかし、クラスを真に強力なツールとして使いこなすには、もう少し知識が必要です。この章では、オブジェクトのコピー、演算子のオーバーロード、クラスで共有されるメンバなど、より実践的でパワフルな機能について掘り下げていきます。これらの概念をマスターすることで、あなたの書くクラスはより安全で、直感的で、再利用性の高いものになるでしょう。 diff --git a/public/docs/cpp/9-templates/2-1-class-template-detail.md b/public/docs/cpp/9-templates/2-1-class-template-detail.md index 5efc5307..bd0214d5 100644 --- a/public/docs/cpp/9-templates/2-1-class-template-detail.md +++ b/public/docs/cpp/9-templates/2-1-class-template-detail.md @@ -37,4 +37,4 @@ question: `Pair`と`Pair`は、コンパイルされると全く別のクラスとして扱われることに注意してください。 -クラステンプレートは、C++の強力なライブラリである**STL (Standard Template Library)**の根幹をなす技術です。次章で学ぶ`vector`や`map`といった便利なコンテナは、すべてクラステンプレートで実装されています。 +クラステンプレートは、C++の強力なライブラリである**STL (Standard Template Library)**の根幹をなす技術です。[[./next]]で学ぶ`vector`や`map`といった便利なコンテナは、すべてクラステンプレートで実装されています。 diff --git a/public/docs/javascript/1-basics/3-0-object.md b/public/docs/javascript/1-basics/3-0-object.md index 9aad0f6c..085f07b6 100644 --- a/public/docs/javascript/1-basics/3-0-object.md +++ b/public/docs/javascript/1-basics/3-0-object.md @@ -14,8 +14,8 @@ question: 主なオブジェクト型には以下があります。 - * **Object**: キーと値のペアの集合(辞書、ハッシュマップに近い)。詳しくは5章で解説します。 - * **Array**: 順序付きリスト。詳しくは7章で解説します。 + * **Object**: キーと値のペアの集合(辞書、ハッシュマップに近い)。詳しくは[[./5]]で解説します。 + * **Array**: 順序付きリスト。詳しくは[[./7]]で解説します。 * **Function**: JavaScriptでは関数もオブジェクトであり、変数に代入したり引数として渡すことができます(第一級関数)。 ```js-repl diff --git a/public/docs/javascript/3-functions-closures/2-2-arrow-function-simple.md b/public/docs/javascript/3-functions-closures/2-2-arrow-function-simple.md index 1cbc6de9..e5448caa 100644 --- a/public/docs/javascript/3-functions-closures/2-2-arrow-function-simple.md +++ b/public/docs/javascript/3-functions-closures/2-2-arrow-function-simple.md @@ -24,4 +24,4 @@ question: { id: 1, name: 'Gemini' } ``` -> **注意:** アロー関数は単なる短縮記法ではありません。「`this` を持たない」という重要な特徴がありますが、これについては**第5章**で詳しく解説します。 +> **注意:** アロー関数は単なる短縮記法ではありません。「`this` を持たない」という重要な特徴がありますが、これについては[[./5]]で詳しく解説します。 diff --git a/public/docs/javascript/4-this/1-0-this-basic.md b/public/docs/javascript/4-this/1-0-this-basic.md index 3f6f41c3..4d8bdad1 100644 --- a/public/docs/javascript/4-this/1-0-this-basic.md +++ b/public/docs/javascript/4-this/1-0-this-basic.md @@ -21,7 +21,7 @@ JavaScriptにおける関数(アロー関数を除く)の `this` は、**「 * **メソッド呼び出し:** オブジェクトのプロパティとして関数を呼び出した場合(`obj.method()`)、`this` は**ドットの左側のオブジェクト**(レシーバ)になります。これは他の言語のメンバ関数に近い挙動です。 * **関数呼び出し:** 関数を単体で呼び出した場合(`func()`)、`this` は**グローバルオブジェクト**(ブラウザでは `window`、Node.jsでは `global`)になります。 ただし、**Strict Mode(`"use strict"`)**では、安全のため `undefined` になります。 -* **コンストラクタ呼び出し:** `new` キーワードをつけて呼び出した場合、`this` は**新しく生成されたインスタンス**になります(これは第6章、第7章で詳しく扱います)。 +* **コンストラクタ呼び出し:** `new` キーワードをつけて呼び出した場合、`this` は**新しく生成されたインスタンス**になります(これは[[./6]]で詳しく扱います)。 以下のコードで、同じ関数でも呼び出し方によって `this` が変わる様子を確認しましょう。 diff --git a/public/docs/javascript/4-this/4-0-summary.md b/public/docs/javascript/4-this/4-0-summary.md index 9d8cb724..080c9ef5 100644 --- a/public/docs/javascript/4-this/4-0-summary.md +++ b/public/docs/javascript/4-this/4-0-summary.md @@ -14,4 +14,4 @@ JavaScriptの `this` は、他の静的な言語とは異なり「呼び出し 3. **明示的な指定**: `call`, `apply` で一時的に、`bind` で永続的に `this` を指定可能。 4. **アロー関数**: 独自の `this` を持たず、外側のスコープの `this` をそのまま使う(レキシカルスコープ)。 -次の章では、この `this` を活用してオブジェクト指向プログラミングの核心である「オブジェクトとプロトタイプ」について学びます。 +[[./next]]では、この `this` を活用してオブジェクト指向プログラミングの核心である「オブジェクトとプロトタイプ」について学びます。 diff --git a/public/docs/javascript/5-objects-prototype/-intro.md b/public/docs/javascript/5-objects-prototype/-intro.md index 45b5818e..3381679a 100644 --- a/public/docs/javascript/5-objects-prototype/-intro.md +++ b/public/docs/javascript/5-objects-prototype/-intro.md @@ -1,3 +1,3 @@ 他の言語(Java, C\#, Pythonなど)の経験がある方にとって、JavaScriptの「オブジェクト」と「継承」のモデルは最も混乱しやすい部分の一つです。JavaScriptはクラスベースではなく、**プロトタイプベース**のオブジェクト指向言語です。 -本章では、ES6(ECMAScript 2015)以降の`class`構文(第7章で扱います)の裏側で実際に何が起きているのか、その仕組みの根幹である「プロトタイプチェーン」について解説します。 +本章では、ES6(ECMAScript 2015)以降の`class`構文([[./6]]で扱います)の裏側で実際に何が起きているのか、その仕組みの根幹である「プロトタイプチェーン」について解説します。 diff --git a/public/docs/javascript/5-objects-prototype/2-0-method-this-recall.md b/public/docs/javascript/5-objects-prototype/2-0-method-this-recall.md index a739857e..c45e780b 100644 --- a/public/docs/javascript/5-objects-prototype/2-0-method-this-recall.md +++ b/public/docs/javascript/5-objects-prototype/2-0-method-this-recall.md @@ -10,7 +10,7 @@ question: ## メソッドと this(復習) オブジェクトのプロパティには関数も設定できます。これを**メソッド**と呼びます。 -第5章で学んだ通り、メソッド呼び出しにおける `this` は、「ドットの左側にあるオブジェクト(レシーバ)」を指します。 +[[./4]]で学んだ通り、メソッド呼び出しにおける `this` は、「ドットの左側にあるオブジェクト(レシーバ)」を指します。 ```js-repl > const counter = { diff --git a/public/docs/javascript/6-classes/-intro.md b/public/docs/javascript/6-classes/-intro.md index ef0c6482..172b8273 100644 --- a/public/docs/javascript/6-classes/-intro.md +++ b/public/docs/javascript/6-classes/-intro.md @@ -1,4 +1,4 @@ -前章では、JavaScriptのオブジェクト指向の核心である「プロトタイプ」について学びました。他の言語(Java, C\#, Pythonなど)の経験者にとって、プロトタイプチェーンによる継承は柔軟ですが、少し直感的ではない部分もあったかもしれません。 +[[./5]]では、JavaScriptのオブジェクト指向の核心である「プロトタイプ」について学びました。他の言語(Java, C\#, Pythonなど)の経験者にとって、プロトタイプチェーンによる継承は柔軟ですが、少し直感的ではない部分もあったかもしれません。 ES6 (ECMAScript 2015) から導入された **`class` 構文** は、プロトタイプベースの継承メカニズムを隠蔽し、一般的なクラスベースのオブジェクト指向言語に近い記述を可能にするものです。これを「糖衣構文(Syntactic Sugar)」と呼びます。 diff --git a/public/docs/javascript/8-promise/6-0-summary.md b/public/docs/javascript/8-promise/6-0-summary.md index 11de79fe..4343f3dd 100644 --- a/public/docs/javascript/8-promise/6-0-summary.md +++ b/public/docs/javascript/8-promise/6-0-summary.md @@ -13,4 +13,4 @@ question: [] * `.then()` をチェーンさせることで、非同期処理を直列に、読みやすく記述できます。 * エラーハンドリングは `.catch()` で一括して行えます。 -次章では、このPromiseをさらに同期処理のように書ける構文糖衣 **async/await** について学びます。 +[[./next]]では、このPromiseをさらに同期処理のように書ける構文糖衣 **async/await** について学びます。 diff --git a/public/docs/javascript/9-async-await/-intro.md b/public/docs/javascript/9-async-await/-intro.md index d2086d91..c6c78c61 100644 --- a/public/docs/javascript/9-async-await/-intro.md +++ b/public/docs/javascript/9-async-await/-intro.md @@ -1,3 +1,3 @@ -前回(第9章)では、JavaScriptの非同期処理の要である `Promise` について学びました。しかし、`.then()` チェーンが長く続くと、コードの可読性が下がる(いわゆる「コールバック地獄」に近い状態になる)ことがあります。 +[[./8]]では、JavaScriptの非同期処理の要である `Promise` について学びました。しかし、`.then()` チェーンが長く続くと、コードの可読性が下がる(いわゆる「コールバック地獄」に近い状態になる)ことがあります。 -第10章では、この課題を解決するために導入された **Async/Await** 構文と、現代的なHTTP通信の標準である **Fetch API** について解説します。他の言語で同期的なコード(ブロッキング処理)に慣れ親しんだ方にとって、Async/Await は非常に直感的で扱いやすい機能です。 +この章では、この課題を解決するために導入された **Async/Await** 構文と、現代的なHTTP通信の標準である **Fetch API** について解説します。他の言語で同期的なコード(ブロッキング処理)に慣れ親しんだ方にとって、Async/Await は非常に直感的で扱いやすい機能です。 diff --git a/public/docs/ruby/0-intro/5-2-run.md b/public/docs/ruby/0-intro/5-2-run.md index e53cbf77..2362c1ff 100644 --- a/public/docs/ruby/0-intro/5-2-run.md +++ b/public/docs/ruby/0-intro/5-2-run.md @@ -26,4 +26,4 @@ Hello from script file! ``` おめでとうございます! これでRubyの世界への第一歩を踏み出しました。 -次の章では、Rubyの基本的な構文、データ型、そして他の言語にはない特徴的な「シンボル」について詳しく学んでいきます。 +[[./next]]では、Rubyの基本的な構文、データ型、そして他の言語にはない特徴的な「シンボル」について詳しく学んでいきます。 diff --git a/public/docs/ruby/1-basics/1-0-variable.md b/public/docs/ruby/1-basics/1-0-variable.md index 3512c017..7ff9715c 100644 --- a/public/docs/ruby/1-basics/1-0-variable.md +++ b/public/docs/ruby/1-basics/1-0-variable.md @@ -15,9 +15,9 @@ Rubyの変数は型宣言を必要としませんが、変数の「スコープ * **ローカル変数**: `my_var` * 小文字または `_` で始まります。定義されたスコープ(メソッド定義、ブロック、ファイルのトップレベルなど)でのみ有効です。 * **インスタンス変数**: `@my_var` - * `@` で始まります。特定のオブジェクトのインスタンスに属し、そのオブジェクトのメソッド内からアクセスできます。(クラスの章で詳述します) + * `@` で始まります。特定のオブジェクトのインスタンスに属し、そのオブジェクトのメソッド内からアクセスできます。([[./6]]で詳述します) * **クラス変数**: `@@my_var` - * `@@` で始まります。クラス全体とそのサブクラスで共有されます。(クラスの章で詳述します) + * `@@` で始まります。クラス全体とそのサブクラスで共有されます。([[./6]]で詳述します) * **グローバル変数**: `$my_var` * `$` で始まります。プログラムのどこからでもアクセス可能ですが、グローバルな状態を持つため、使用は最小限に抑えるべきです。 * **定数**: `MY_CONSTANT` diff --git a/public/docs/ruby/2-control-methods/2-0-loop.md b/public/docs/ruby/2-control-methods/2-0-loop.md index a722582e..18d4e45a 100644 --- a/public/docs/ruby/2-control-methods/2-0-loop.md +++ b/public/docs/ruby/2-control-methods/2-0-loop.md @@ -9,4 +9,4 @@ question: ## 繰り返し処理 -Rubyでは、後の章で学ぶイテレータ(`each`など)が繰り返し処理の主流ですが、C言語スタイルの `while` や `until` も利用可能です。 +Rubyでは、[[./5]]で学ぶイテレータ(`each`など)が繰り返し処理の主流ですが、C言語スタイルの `while` や `until` も利用可能です。 diff --git a/public/docs/ruby/5-blocks-iterators/3-0-enumerable.md b/public/docs/ruby/5-blocks-iterators/3-0-enumerable.md index 53592380..95ab40e0 100644 --- a/public/docs/ruby/5-blocks-iterators/3-0-enumerable.md +++ b/public/docs/ruby/5-blocks-iterators/3-0-enumerable.md @@ -33,7 +33,7 @@ irb(main):016:0> numbers.select { |n| n.odd? } # select が使える => [1, 3] ``` -これは、自分で新しいコレクションクラスを作った場合でも同様です。(`include` については後の「モジュールとMix-in」の章で詳しく学びます) +これは、自分で新しいコレクションクラスを作った場合でも同様です。(`include` については[[./7]]で詳しく学びます) ```ruby:my_collection.rb # Enumerableモジュールを include する diff --git a/public/docs/ruby/6-classes/-intro.md b/public/docs/ruby/6-classes/-intro.md index 482aab4d..622eb1b3 100644 --- a/public/docs/ruby/6-classes/-intro.md +++ b/public/docs/ruby/6-classes/-intro.md @@ -1,3 +1,3 @@ -Rubyは純粋なオブジェクト指向言語であり、第4章「すべてがオブジェクト」で学んだように、数値や文字列さえもオブジェクトです。この章では、それらのオブジェクトの「設計図」である**クラス**を定義する方法について学びます。 +Rubyは純粋なオブジェクト指向言語であり、[[./3]]で学んだように、数値や文字列さえもオブジェクトです。この章では、それらのオブジェクトの「設計図」である**クラス**を定義する方法について学びます。 他のオブジェクト指向言語(Java, Python, C\#など)の経験があれば、概念は馴染み深いはずです。Ruby特有の構文(`@`や`attr_*`など)に注目してください。 diff --git a/public/docs/ruby/7-modules/6-1-practice1.md b/public/docs/ruby/7-modules/6-1-practice1.md index a4677265..b020a831 100644 --- a/public/docs/ruby/7-modules/6-1-practice1.md +++ b/public/docs/ruby/7-modules/6-1-practice1.md @@ -11,7 +11,7 @@ question: ### 練習問題1: カウンター機能のミックスイン -`Enumerable` モジュール(第6章で少し触れました)のように、`include` したクラスに便利な機能を追加するモジュールを作成します。 +`Enumerable` モジュール([[./5]]で少し触れました)のように、`include` したクラスに便利な機能を追加するモジュールを作成します。 1. `Counter` というモジュールを定義してください。 2. `Counter` モジュールは `count_items(item_to_find)` というメソッドを持つものとします。 diff --git a/public/docs/ruby/8-proc-lambda/-intro.md b/public/docs/ruby/8-proc-lambda/-intro.md index c99e3608..87a00996 100644 --- a/public/docs/ruby/8-proc-lambda/-intro.md +++ b/public/docs/ruby/8-proc-lambda/-intro.md @@ -1,3 +1,3 @@ -これまでの章で、Rubyの強力な機能である「ブロック」を `each` や `map` などのメソッドと共に使ってきました。しかし、ブロックは常にメソッド呼び出しに付随する形でしか使えませんでした。 +[[./5]]で、Rubyの強力な機能である「ブロック」を `each` や `map` などのメソッドと共に使ってきました。しかし、ブロックは常にメソッド呼び出しに付随する形でしか使えませんでした。 この章では、そのブロックを「オブジェクト」として扱い、変数に代入したり、メソッドの引数として自由に受け渡したりする方法を学びます。これにより、Rubyの表現力はさらに向上します。 diff --git a/public/docs/rust/1-basics/-intro.md b/public/docs/rust/1-basics/-intro.md index cd2dbba3..166240d5 100644 --- a/public/docs/rust/1-basics/-intro.md +++ b/public/docs/rust/1-basics/-intro.md @@ -2,4 +2,4 @@ C++やJava、Pythonなどでは「変数はデフォルトで書き換え可能(Mutable)」であることが一般的ですが、Rustでは**「デフォルトで不変(Immutable)」**です。この設計こそが、Rustがコンパイル時に多くのバグを排除できる理由の根幹にあります。 -第2章では、Rustの構文の基礎と、その背後にある哲学を学びます。 +この章では、Rustの構文の基礎と、その背後にある哲学を学びます。 diff --git a/public/docs/rust/1-basics/3-2-compound.md b/public/docs/rust/1-basics/3-2-compound.md index b15ced81..a0668c7d 100644 --- a/public/docs/rust/1-basics/3-2-compound.md +++ b/public/docs/rust/1-basics/3-2-compound.md @@ -15,7 +15,7 @@ question: * 異なる型をまとめる固定長のリストです。 2. **配列 (Array)**: * **同じ型**の要素をまとめる**固定長**のリストです。 - * ※ 長さが可変のリストが必要な場合は、後の章で学ぶ「ベクタ (`Vec`)」を使います。配列はスタック上に確保されるため、高速ですがサイズ変更はできません。 + * ※ 長さが可変のリストが必要な場合は、[[./8]]で学ぶ「ベクタ (`Vec`)」を使います。配列はスタック上に確保されるため、高速ですがサイズ変更はできません。 diff --git a/public/docs/rust/10-generics-traits/-intro.md b/public/docs/rust/10-generics-traits/-intro.md index 4fc4aabf..877da386 100644 --- a/public/docs/rust/10-generics-traits/-intro.md +++ b/public/docs/rust/10-generics-traits/-intro.md @@ -1,4 +1,3 @@ -Rustチュートリアルの第11章へようこそ。 この章では、Rustにおける抽象化とコード再利用の核心である「ジェネリクス」と「トレイト」について解説します。 他のプログラミング言語での経験がある方にとって、ジェネリクスは馴染み深い概念かもしれませんが、トレイトはクラス継承とは異なるアプローチをとります。これらを理解することで、柔軟かつ高速なRustコードが書けるようになります。 diff --git a/public/docs/rust/11-lifetimes/-intro.md b/public/docs/rust/11-lifetimes/-intro.md index 5c494b46..819127b7 100644 --- a/public/docs/rust/11-lifetimes/-intro.md +++ b/public/docs/rust/11-lifetimes/-intro.md @@ -1,5 +1,5 @@ ようこそ、Rustの学習における「最難関」とも呼ばれる章へ。 -これまで所有権や借用(第4章、第5章)を学んできましたが、**ライフタイム(Lifetimes)** はそれらを支えるコンパイラのロジックそのものです。 +これまで所有権や借用([[./3]]、[[./4]])を学んできましたが、**ライフタイム(Lifetimes)** はそれらを支えるコンパイラのロジックそのものです。 他の言語(C/C++)では、メモリが解放された後にその場所を指し続ける「ダングリングポインタ」がバグの温床でした。JavaやPythonのようなガベージコレクション(GC)を持つ言語では、これを自動で管理しますが、パフォーマンスのコストがかかります。 diff --git a/public/docs/rust/11-lifetimes/3-0-elision.md b/public/docs/rust/11-lifetimes/3-0-elision.md index 132b66b0..18649eeb 100644 --- a/public/docs/rust/11-lifetimes/3-0-elision.md +++ b/public/docs/rust/11-lifetimes/3-0-elision.md @@ -10,7 +10,7 @@ question: ## ライフタイム省略ルール -「待ってください。第4章で書いた `fn first_word(s: &str) -> &str` は注釈なしで動きましたよ?」 +「待ってください。[[./3]]で書いた `fn first_word(s: &str) -> &str` は注釈なしで動きましたよ?」 鋭い質問です。初期のRustではすべての参照に明示的なライフタイムが必要でした。しかし、あまりにも頻出するパターン(例えば「引数が1つなら、戻り値のライフタイムもそれと同じ」など)があったため、Rustチームはそれらを自動推論する**「ライフタイム省略ルール(Lifetime Elision Rules)」**をコンパイラに組み込みました。 diff --git a/public/docs/rust/3-ownership/5-0-summary.md b/public/docs/rust/3-ownership/5-0-summary.md index 2d959222..1a81a5e4 100644 --- a/public/docs/rust/3-ownership/5-0-summary.md +++ b/public/docs/rust/3-ownership/5-0-summary.md @@ -17,4 +17,4 @@ question: [] しかし、「関数に値を渡すたびに所有権がなくなってしまい、使えなくなる」のは不便だと感じたでしょう。値を一時的に関数に使わせたいだけなのに、いちいち所有権を返してもらうのは面倒です。 -次章の**「借用(Borrowing)」**では、所有権を渡さずに値を参照する方法を学びます。 +[[./next]]の**「借用(Borrowing)」**では、所有権を渡さずに値を参照する方法を学びます。 diff --git a/public/docs/rust/4-borrowing-slices/-intro.md b/public/docs/rust/4-borrowing-slices/-intro.md index 85a2f9d3..b0ff0471 100644 --- a/public/docs/rust/4-borrowing-slices/-intro.md +++ b/public/docs/rust/4-borrowing-slices/-intro.md @@ -1,3 +1,3 @@ -前章では「所有権(Ownership)」というRust独自のメモリ管理システムについて学びました。「所有権は一度に1つの変数しか持てない」というルールは強力ですが、関数に値を渡すたびに所有権が移動(ムーブ)してしまうと、毎回値を返り値として受け取らなければならず不便です。 +[[./3]]では「所有権(Ownership)」というRust独自のメモリ管理システムについて学びました。「所有権は一度に1つの変数しか持てない」というルールは強力ですが、関数に値を渡すたびに所有権が移動(ムーブ)してしまうと、毎回値を返り値として受け取らなければならず不便です。 そこで登場するのが**「参照(Reference)」**と**「借用(Borrowing)」**です。これを使うことで、所有権を渡さずに値にアクセスすることが可能になります。 diff --git a/public/docs/rust/5-structs-methods/2-2-unit-structs.md b/public/docs/rust/5-structs-methods/2-2-unit-structs.md index 9f75114a..468da045 100644 --- a/public/docs/rust/5-structs-methods/2-2-unit-structs.md +++ b/public/docs/rust/5-structs-methods/2-2-unit-structs.md @@ -9,4 +9,4 @@ question: ### ユニット様構造体 (Unit-like Structs) -フィールドを全く持たない構造体です。`struct AlwaysEqual;` のように定義します。これらは、データを持たずに振る舞い(トレイト)だけを実装したい場合に役立ちますが、詳細は後の章で扱います。 +フィールドを全く持たない構造体です。`struct AlwaysEqual;` のように定義します。これらは、データを持たずに振る舞い(トレイト)だけを実装したい場合に役立ちますが、詳細は[[./10]]で扱います。 diff --git a/public/docs/rust/5-structs-methods/3-0-ownership-structs.md b/public/docs/rust/5-structs-methods/3-0-ownership-structs.md index fd322885..6e076daa 100644 --- a/public/docs/rust/5-structs-methods/3-0-ownership-structs.md +++ b/public/docs/rust/5-structs-methods/3-0-ownership-structs.md @@ -13,7 +13,7 @@ question: 構造体における所有権の扱いは非常に重要です。 1. **所有するデータ**: `String`や`Vec`のような所有権を持つ型をフィールドにすると、その構造体のインスタンスがデータの所有者になります。構造体がドロップされると、フィールドのデータもドロップされます。 -2. **参照**: 構造体に「参照(\&strなど)」を持たせることも可能ですが、これには**ライフタイム(第12章)の指定が必要になります。そのため、現段階では構造体には(参照ではなく)`String`などの所有権のある型**を使うことを推奨します。 +2. **参照**: 構造体に「参照(\&strなど)」を持たせることも可能ですが、これには**ライフタイム([[./11]])の指定が必要になります。そのため、現段階では構造体には(参照ではなく)`String`などの所有権のある型**を使うことを推奨します。 diff --git a/public/docs/rust/5-structs-methods/5-0-summary.md b/public/docs/rust/5-structs-methods/5-0-summary.md index fed1027f..158ece22 100644 --- a/public/docs/rust/5-structs-methods/5-0-summary.md +++ b/public/docs/rust/5-structs-methods/5-0-summary.md @@ -13,4 +13,4 @@ question: [] * **関連関数** は `self` を取らず、`型名::関数名` で呼び出します(コンストラクタ `new` など)。 * Rustには継承がないため、データ構造とメソッドの組み合わせのみでオブジェクト指向的な設計を行います。 -次章では、Rustの強力な機能の一つである「列挙型(Enum)」と、フロー制御の要である「パターンマッチ」について学びます。 +[[./next]]では、Rustの強力な機能の一つである「列挙型(Enum)」と、フロー制御の要である「パターンマッチ」について学びます。 diff --git a/public/docs/rust/6-enums-pattern/-intro.md b/public/docs/rust/6-enums-pattern/-intro.md index a972d127..27c129d6 100644 --- a/public/docs/rust/6-enums-pattern/-intro.md +++ b/public/docs/rust/6-enums-pattern/-intro.md @@ -1,4 +1,3 @@ -Rustチュートリアル第7章へようこそ。 -これまでの章では、構造体を使って関連するデータをまとめる方法を学びました。この章では、**列挙型(Enum)と、それに関連する強力な制御フロー構造であるパターンマッチ**について学びます。 +[[./5]]では、構造体を使って関連するデータをまとめる方法を学びました。この章では、**列挙型(Enum)と、それに関連する強力な制御フロー構造であるパターンマッチ**について学びます。 他の言語(C、C++、Javaなど)でのEnumは、単に「名前付き定数のリスト」であることが多いですが、RustのEnumは「代数的データ型(Algebraic Data Types)」に近い性質を持っており、はるかに強力です。 diff --git a/public/docs/rust/7-modules/6-0-summary.md b/public/docs/rust/7-modules/6-0-summary.md index a876129e..241ad797 100644 --- a/public/docs/rust/7-modules/6-0-summary.md +++ b/public/docs/rust/7-modules/6-0-summary.md @@ -1,11 +1,11 @@ --- id: rust-modules-summary -title: 第8章のまとめ +title: この章のまとめ level: 2 question: [] --- -## 第8章のまとめ +## この章のまとめ * **パッケージとクレート:** `cargo new` で作るのがパッケージ、生成されるバイナリやライブラリがクレートです。 * **モジュール:** コードを整理する箱です。`mod` で定義します。 diff --git a/public/docs/rust/9-error-handling/-intro.md b/public/docs/rust/9-error-handling/-intro.md index 2b44120c..b505604b 100644 --- a/public/docs/rust/9-error-handling/-intro.md +++ b/public/docs/rust/9-error-handling/-intro.md @@ -1,4 +1,4 @@ -ようこそ、第10章へ。ここまでRustの所有権や型システムについて学んできましたが、この章では実用的なアプリケーション開発において避けては通れない「エラーハンドリング」について解説します。 +ここまでRustの所有権や型システムについて学んできましたが、この章では実用的なアプリケーション開発において避けては通れない「エラーハンドリング」について解説します。 他の多くの言語(Java, Python, C++など)とRustが最も大きく異なる点の一つが、**「例外(Exception)」が存在しない**ことです。 diff --git a/public/docs/rust/9-error-handling/3-0-result.md b/public/docs/rust/9-error-handling/3-0-result.md index 0da1604b..2d0aab0b 100644 --- a/public/docs/rust/9-error-handling/3-0-result.md +++ b/public/docs/rust/9-error-handling/3-0-result.md @@ -10,7 +10,7 @@ question: ## 回復可能なエラー (`Result`) -Rustのエラーハンドリングの主役は `Result` 列挙型です。以前の章で学んだ `Option` に似ていますが、失敗した場合に「なぜ失敗したか(エラー内容)」を持つ点が異なります。 +Rustのエラーハンドリングの主役は `Result` 列挙型です。[[./6]]で学んだ `Option` に似ていますが、失敗した場合に「なぜ失敗したか(エラー内容)」を持つ点が異なります。 定義は以下のようになっています(標準ライブラリに含まれています)。 diff --git a/public/docs/typescript/1-types/-intro.md b/public/docs/typescript/1-types/-intro.md index b7c87041..52d5812e 100644 --- a/public/docs/typescript/1-types/-intro.md +++ b/public/docs/typescript/1-types/-intro.md @@ -1,5 +1,5 @@ JavaScriptでの開発経験がある皆様、TypeScriptの世界へようこそ。 -第1章では環境構築を行いましたが、本章からいよいよ具体的なコードを書いていきます。 +[[./0]]では環境構築を行いましたが、本章からいよいよ具体的なコードを書いていきます。 TypeScriptの最大の武器は**「型(Type)」**です。しかし、すべてのコードに手動で型を書く必要はありません。TypeScriptは非常に賢い「型推論」という機能を持っており、JavaScriptを書く感覚のまま、安全性を享受できる場面も多々あります。 diff --git a/public/docs/typescript/2-objects-interfaces/4-0-type-vs-interface.md b/public/docs/typescript/2-objects-interfaces/4-0-type-vs-interface.md index 84e59ec6..3a3153b4 100644 --- a/public/docs/typescript/2-objects-interfaces/4-0-type-vs-interface.md +++ b/public/docs/typescript/2-objects-interfaces/4-0-type-vs-interface.md @@ -16,7 +16,7 @@ question: | 特徴 | type (型エイリアス) | interface (インターフェース) | | :--- | :--- | :--- | -| **主な用途** | プリミティブ、ユニオン型(第5章で解説)、タプル、関数の型など、**あらゆる型**に名前を付ける。 | **オブジェクトの構造**やクラスの実装ルールを定義する。 | +| **主な用途** | プリミティブ、ユニオン型([[./4]]で解説)、タプル、関数の型など、**あらゆる型**に名前を付ける。 | **オブジェクトの構造**やクラスの実装ルールを定義する。 | | **拡張性** | 交差型 (`&`) を使って拡張する。 | `extends` キーワードで継承できる。また、同名のinterfaceを定義すると自動でマージされる(Declaration Merging)。 | | **推奨シーン** | アプリケーション開発全般、複雑な型の組み合わせ。 | ライブラリ開発(拡張性を残すため)、オブジェクト指向的な設計。 | diff --git a/public/docs/typescript/3-function-types/6-0-type-alias.md b/public/docs/typescript/3-function-types/6-0-type-alias.md index ec3182a6..ce10b753 100644 --- a/public/docs/typescript/3-function-types/6-0-type-alias.md +++ b/public/docs/typescript/3-function-types/6-0-type-alias.md @@ -11,7 +11,7 @@ question: ## 関数の型エイリアス コールバック関数を引数に取る場合など、関数の型定義が長くなりがちです。 -第3章で学んだ `type`(型エイリアス)を使って、関数のシグネチャそのものに名前を付けることができます。 +[[./2]]で学んだ `type`(型エイリアス)を使って、関数のシグネチャそのものに名前を付けることができます。 構文: `type 型名 = (引数: 型) => 戻り値の型;` diff --git a/public/docs/typescript/4-combining-types/5-3-instanceof.md b/public/docs/typescript/4-combining-types/5-3-instanceof.md index ffa4c37d..9ed17463 100644 --- a/public/docs/typescript/4-combining-types/5-3-instanceof.md +++ b/public/docs/typescript/4-combining-types/5-3-instanceof.md @@ -8,7 +8,7 @@ question: ### `instanceof` 演算子 -クラスのインスタンスかどうかを判定します(第7章のクラスで詳しく扱いますが、Dateなどの組み込みオブジェクトでも有効です)。 +クラスのインスタンスかどうかを判定します([[./6]]のクラスで詳しく扱いますが、Dateなどの組み込みオブジェクトでも有効です)。 ```ts:type-guard-instanceof.ts function logDate(value: string | Date) { diff --git a/public/docs/typescript/5-generics/-intro.md b/public/docs/typescript/5-generics/-intro.md index 409eb298..b450867a 100644 --- a/public/docs/typescript/5-generics/-intro.md +++ b/public/docs/typescript/5-generics/-intro.md @@ -1 +1 @@ -第6章では、TypeScriptを使いこなす上で非常に強力な機能である**ジェネリクス (Generics)** について学びます。JavaやC\#などの言語経験がある方には馴染み深い概念かもしれませんが、JavaScriptの世界から来た方にとっては少し抽象的に感じるかもしれません。しかし、これを理解することで、**「柔軟性」と「安全性」を両立したコード**が書けるようになります。 +この章では、TypeScriptを使いこなす上で非常に強力な機能である**ジェネリクス (Generics)** について学びます。JavaやC\#などの言語経験がある方には馴染み深い概念かもしれませんが、JavaScriptの世界から来た方にとっては少し抽象的に感じるかもしれません。しかし、これを理解することで、**「柔軟性」と「安全性」を両立したコード**が書けるようになります。 diff --git a/public/docs/typescript/6-classes/5-0-implements.md b/public/docs/typescript/6-classes/5-0-implements.md index 6349a6bb..a4e5c949 100644 --- a/public/docs/typescript/6-classes/5-0-implements.md +++ b/public/docs/typescript/6-classes/5-0-implements.md @@ -12,7 +12,7 @@ question: ## `implements`: インターフェースによるクラスの形状の強制 -第3章で学んだインターフェースは、オブジェクトの型定義だけでなく、**クラスが特定の実装を持っていることを保証する(契約を結ぶ)**ためにも使われます。これを `implements` と呼びます。 +[[./2]]で学んだインターフェースは、オブジェクトの型定義だけでなく、**クラスが特定の実装を持っていることを保証する(契約を結ぶ)**ためにも使われます。これを `implements` と呼びます。 ```ts:implements-interface.ts interface Printable {