Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion public/docs/cpp/0-intro/4-1-include.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ question:
`#include` は、他のファイルに書かれた機能を利用するための**プリプロセッサ命令**です。ここでは、コンソールへの入出力機能を提供する `iostream` という標準ライブラリのヘッダファイルを読み込んでいます。これにより、`std::cout` などが使えるようになります。

* `< >` で囲む: 標準ライブラリのヘッダファイルをインクルードする場合
* `" "` で囲む: 自分で作成したヘッダファイルをインクルードする場合 (後の章で学びます)
* `" "` で囲む: 自分で作成したヘッダファイルをインクルードする場合 ([[./5]]で学びます)
2 changes: 1 addition & 1 deletion public/docs/cpp/0-intro/5-0-summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ question: []
* すべてのC++プログラムは `main` 関数から実行が始まります。
* `#include` で外部ライブラリの機能を読み込み、`namespace` で名前の衝突を避けます。

これであなたもC++プログラマの仲間入りです!次の章では、C++の根幹をなす型システムとメモリの仕組みについて学んでいきましょう。
これであなたもC++プログラマの仲間入りです![[./next]]では、C++の根幹をなす型システムとメモリの仕組みについて学んでいきましょう。
2 changes: 1 addition & 1 deletion public/docs/cpp/10-stl-containers/1-0-about.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ STLは、主に3つの要素から構成されています。
2. **アルゴリズム (Algorithms)**: ソート、検索、変換など、コンテナ上のデータに対して操作を行う関数群です。
3. **イテレータ (Iterators)**: コンテナの要素を指し示し、アルゴリズムがコンテナの種類に依存せずに各要素にアクセスするための統一的なインターフェースを提供します。ポインタを一般化したようなものです。

これら3つが連携することで、C++プログラマは効率的で再利用性の高いコードを素早く書くことができます。この章では「コンテナ」を、次の章では「アルゴリズム」と、それらをつなぐ「イテレータ」の応用を詳しく見ていきます。
これら3つが連携することで、C++プログラマは効率的で再利用性の高いコードを素早く書くことができます。この章では「コンテナ」を、[[./11]]では「アルゴリズム」と、それらをつなぐ「イテレータ」の応用を詳しく見ていきます。
2 changes: 1 addition & 1 deletion public/docs/cpp/11-stl-algorithms/-intro.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
前の章ではSTLのコンテナについて学び、様々なデータを効率的に格納する方法を見てきました。しかし、データを格納するだけではプログラムは完成しません。そのデータを並べ替えたり、検索したり、特定の処理を施したりといった「操作」が必要です。
[[./10]]ではSTLのコンテナについて学び、様々なデータを効率的に格納する方法を見てきました。しかし、データを格納するだけではプログラムは完成しません。そのデータを並べ替えたり、検索したり、特定の処理を施したりといった「操作」が必要です。

この章では、STLのもう一つの強力な柱である**アルゴリズム**ライブラリを学びます。これらのアルゴリズムは、コンテナ内のデータを操作するための汎用的な関数群です。そして、アルゴリズムをさらに柔軟かつ強力にするための現代的なC++の機能、**ラムダ式**についても解説します。これらをマスターすれば、驚くほど少ないコードで複雑なデータ操作が実現できるようになります。
2 changes: 1 addition & 1 deletion public/docs/cpp/12-raii-smart-ptrs/-intro.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
これまでの章で、`new` と `delete` を使った動的なメモリ管理を学びました。しかし、これらの手動管理は `delete` の呼び忘れによるメモリリークや、複雑なコードでのリソース管理の煩雑さを引き起こす原因となりがちです。
[[./3]]で、`new` と `delete` を使った動的なメモリ管理を学びました。しかし、これらの手動管理は `delete` の呼び忘れによるメモリリークや、複雑なコードでのリソース管理の煩雑さを引き起こす原因となりがちです。

C++11以降の「モダンC++」では、こうした問題を解決するための洗練された仕組みが導入されました。この章では、エラーハンドリングのための**例外処理**、リソース管理の基本思想である **RAIIイディオム**、そしてそれを具現化する**スマートポインタ** (`std::unique_ptr`, `std::shared_ptr`) について学び、より安全で堅牢なコードを書くための流儀を身につけます。
2 changes: 1 addition & 1 deletion public/docs/cpp/2-data-containers/4-0-range-based-for.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` でループが回せる」と覚えておけば十分です。

4 changes: 2 additions & 2 deletions public/docs/cpp/3-pointers/-intro.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
ようこそ、C++学習の最大の山場へ。
第3章までは、`std::vector`や`std::string`といった便利な機能を使ってきましたが、今回はその「裏側」で何が起きているかを覗き込みます。
[[./2]]では、`std::vector`や`std::string`といった便利な機能を使ってきましたが、今回はその「裏側」で何が起きているかを覗き込みます。

他の言語(Java, Python, C\#など)では言語機能やガベージコレクション(GC)が隠蔽してくれている「メモリ」という物理的なリソースを、C++では直接操作することができます。これがC++の強力な武器であり、同時にバグの温床でもあります。

ここを理解すれば、第3章の機能がいかに偉大だったか、そしてコンピュータが実際にどう動いているかが手に取るようにわかるようになります。
ここを理解すれば、[[./2]]の機能がいかに偉大だったか、そしてコンピュータが実際にどう動いているかが手に取るようにわかるようになります。
2 changes: 1 addition & 1 deletion public/docs/cpp/3-pointers/2-0-array.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ question:

## 配列とポインタの関係

第3章では `std::vector` を使いましたが、C++にはC言語互換の「生の配列(Cスタイル配列)」も存在します。これはサイズが固定で、機能が制限されています。
[[./2]]では `std::vector` を使いましたが、C++にはC言語互換の「生の配列(Cスタイル配列)」も存在します。これはサイズが固定で、機能が制限されています。

* **配列名の減衰(Decay):** 配列の名前は式の中で使うと、**「先頭要素へのポインタ」**として扱われます。これを「減衰(Decay)」と呼びます。
* **ポインタ演算:** ポインタに対して数値を足し引きすると、**「その型のサイズ分」**だけアドレスが移動します。`int`(通常4バイト)のポインタに `+1` すると、メモリアドレスは4増えます。
Expand Down
2 changes: 1 addition & 1 deletion public/docs/cpp/3-pointers/4-4-memory-leak.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ question:
もし `delete` を忘れるとどうなるでしょう?
確保されたメモリは、プログラムが終了するまで「使用中」のまま残ります。これを**メモリリーク**と呼びます。長時間動くサーバーなどでこれが起きると、メモリを食いつぶしてシステムがクラッシュします。

**第3章の振り返り:**
**[[./2]]の振り返り:**
`std::vector` や `std::string` は、内部で `new` と `delete` を自動的に行ってくれています。

* 作成時に `new` で確保。
Expand Down
2 changes: 1 addition & 1 deletion public/docs/cpp/4-functions/-intro.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
前章(第4章)では、C++のメモリモデルの核心である「ポインタ」について学びました。ポインタは強力ですが、構文が複雑になりがちで、バグの温床にもなりえます。
[[./3]]では、C++のメモリモデルの核心である「ポインタ」について学びました。ポインタは強力ですが、構文が複雑になりがちで、バグの温床にもなりえます。

C++では、C言語から受け継いだポインタに加え、より安全で直感的な**「参照(Reference)」**という概念が導入されています。本章では、関数の設計を通して、この「参照」がいかに強力な武器になるかを学びます。「データをどう渡すか」は、C++のパフォーマンスと設計の良し悪しを決める最も重要な要素の一つです。
2 changes: 1 addition & 1 deletion public/docs/cpp/4-functions/1-1-prototype-declaration.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,4 @@ Hello C++!
Hello C++!
```

実際の開発では、プロトタイプ宣言をヘッダーファイル(`.h`)に書き、定義をソースファイル(`.cpp`)に書くことで、大規模なプログラムを管理します(これについては次章で詳しく解説します)。
実際の開発では、プロトタイプ宣言をヘッダーファイル(`.h`)に書き、定義をソースファイル(`.cpp`)に書くことで、大規模なプログラムを管理します(これについては[[./5]]で詳しく解説します)。
2 changes: 1 addition & 1 deletion public/docs/cpp/4-functions/1-2-void.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ question:
void printMessage(std::string message);
```

第2章で学んだように、`int`や`double`などの型は変数を定義するために使えましたが、`void`は「型がない」ことを示す特殊な型なので、`void my_variable;` のように変数を定義することはできません。あくまで関数の戻り値の型としてのみ使います。
[[./1]]で学んだように、`int`や`double`などの型は変数を定義するために使えましたが、`void`は「型がない」ことを示す特殊な型なので、`void my_variable;` のように変数を定義することはできません。あくまで関数の戻り値の型としてのみ使います。
2 changes: 1 addition & 1 deletion public/docs/cpp/4-functions/2-2-arg-by-pointer.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ question:

### 2\. ポインタ渡し (Pass by Pointer)

C言語からある手法です。第4章で学んだポインタ(アドレス)を渡します。
C言語からある手法です。[[./3]]で学んだポインタ(アドレス)を渡します。

* **メリット:** コピーが発生しない(アドレス値のコピーのみ)。呼び出し元のデータを変更できる。
* **デメリット:** 呼び出す際に `&` を付ける必要がある。関数内で `*` や `->` を使う必要があり、構文が汚れる。`nullptr` チェックが必要になることがある。
Expand Down
2 changes: 1 addition & 1 deletion public/docs/cpp/6-classes-basics/4-2-destructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)という重要な概念に繋がります。
2 changes: 1 addition & 1 deletion public/docs/cpp/6-classes-basics/5-0-summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ question: []
- **コンストラクタ**は、オブジェクト生成時に自動で呼ばれ、初期化を行います。
- **デストラクタ**は、オブジェクト破棄時に自動で呼ばれ、後片付けを行います。

クラスを使いこなすことで、プログラムの部品化が進み、再利用性やメンテナンス性が格段に向上します。次の章では、クラスのさらに進んだ機能について学んでいきましょう。
クラスを使いこなすことで、プログラムの部品化が進み、再利用性やメンテナンス性が格段に向上します。[[./next]]では、クラスのさらに進んだ機能について学んでいきましょう。
2 changes: 1 addition & 1 deletion public/docs/cpp/7-classes-advanced/-intro.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
第7章では、C++のオブジェクト指向プログラミングの核となる`class`の基本的な使い方を学びました。しかし、クラスを真に強力なツールとして使いこなすには、もう少し知識が必要です。この章では、オブジェクトのコピー、演算子のオーバーロード、クラスで共有されるメンバなど、より実践的でパワフルな機能について掘り下げていきます。これらの概念をマスターすることで、あなたの書くクラスはより安全で、直感的で、再利用性の高いものになるでしょう。
[[./6]]では、C++のオブジェクト指向プログラミングの核となる`class`の基本的な使い方を学びました。しかし、クラスを真に強力なツールとして使いこなすには、もう少し知識が必要です。この章では、オブジェクトのコピー、演算子のオーバーロード、クラスで共有されるメンバなど、より実践的でパワフルな機能について掘り下げていきます。これらの概念をマスターすることで、あなたの書くクラスはより安全で、直感的で、再利用性の高いものになるでしょう。
2 changes: 1 addition & 1 deletion public/docs/cpp/9-templates/2-1-class-template-detail.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ question:

`Pair<int, std::string>`と`Pair<std::string, double>`は、コンパイルされると全く別のクラスとして扱われることに注意してください。

クラステンプレートは、C++の強力なライブラリである**STL (Standard Template Library)**の根幹をなす技術です。次章で学ぶ`vector`や`map`といった便利なコンテナは、すべてクラステンプレートで実装されています。
クラステンプレートは、C++の強力なライブラリである**STL (Standard Template Library)**の根幹をなす技術です。[[./next]]で学ぶ`vector`や`map`といった便利なコンテナは、すべてクラステンプレートで実装されています。
4 changes: 2 additions & 2 deletions public/docs/javascript/1-basics/3-0-object.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ question:

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

* **Object**: キーと値のペアの集合(辞書、ハッシュマップに近い)。詳しくは5章で解説します
* **Array**: 順序付きリスト。詳しくは7章で解説します
* **Object**: キーと値のペアの集合(辞書、ハッシュマップに近い)。詳しくは[[./5]]で解説します
* **Array**: 順序付きリスト。詳しくは[[./7]]で解説します
* **Function**: JavaScriptでは関数もオブジェクトであり、変数に代入したり引数として渡すことができます(第一級関数)。

```js-repl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@ question:
{ id: 1, name: 'Gemini' }
```

> **注意:** アロー関数は単なる短縮記法ではありません。「`this` を持たない」という重要な特徴がありますが、これについては**第5章**で詳しく解説します。
> **注意:** アロー関数は単なる短縮記法ではありません。「`this` を持たない」という重要な特徴がありますが、これについては[[./5]]で詳しく解説します。
2 changes: 1 addition & 1 deletion public/docs/javascript/4-this/1-0-this-basic.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` が変わる様子を確認しましょう。

Expand Down
2 changes: 1 addition & 1 deletion public/docs/javascript/4-this/4-0-summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ JavaScriptの `this` は、他の静的な言語とは異なり「呼び出し
3. **明示的な指定**: `call`, `apply` で一時的に、`bind` で永続的に `this` を指定可能。
4. **アロー関数**: 独自の `this` を持たず、外側のスコープの `this` をそのまま使う(レキシカルスコープ)。

次の章では、この `this` を活用してオブジェクト指向プログラミングの核心である「オブジェクトとプロトタイプ」について学びます。
[[./next]]では、この `this` を活用してオブジェクト指向プログラミングの核心である「オブジェクトとプロトタイプ」について学びます。
2 changes: 1 addition & 1 deletion public/docs/javascript/5-objects-prototype/-intro.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
他の言語(Java, C\#, Pythonなど)の経験がある方にとって、JavaScriptの「オブジェクト」と「継承」のモデルは最も混乱しやすい部分の一つです。JavaScriptはクラスベースではなく、**プロトタイプベース**のオブジェクト指向言語です。

本章では、ES6(ECMAScript 2015)以降の`class`構文(第7章で扱います)の裏側で実際に何が起きているのか、その仕組みの根幹である「プロトタイプチェーン」について解説します。
本章では、ES6(ECMAScript 2015)以降の`class`構文([[./6]]で扱います)の裏側で実際に何が起きているのか、その仕組みの根幹である「プロトタイプチェーン」について解説します。
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ question:
## メソッドと this(復習)

オブジェクトのプロパティには関数も設定できます。これを**メソッド**と呼びます。
第5章で学んだ通り、メソッド呼び出しにおける `this` は、「ドットの左側にあるオブジェクト(レシーバ)」を指します。
[[./4]]で学んだ通り、メソッド呼び出しにおける `this` は、「ドットの左側にあるオブジェクト(レシーバ)」を指します。

```js-repl
> const counter = {
Expand Down
Loading
Loading