【学習】なぜC#の写経はつらいのか:赤い波線の正体
はじめに
C# の写経を始めたとき、こんな状況になっていませんか?
- コードを書くほどに赤い波線が増える
- 途中でエラーが大量に出て何も動かない
- IntelliSense(コード補完)が全然効かない
- 何をしているのか分からないまま写している
これは「理解不足」でも「センスがない」からでもありません。
書く順番に問題があります。
このシリーズのサンプルについて
コンソールアプリでは、Program クラスに Main を書くのが一般的です(ここがアプリの入口になります)。一方、Sample や Program という名前だけでは「何のコードか」がイメージしにくいので、同じ namespace の中に Player という空のクラスも並べます。ゲームや Unity の学習ともつながりやすく、第3回以降のプロパティや複数クラスの話の伏線にもなります。
写経のよくある失敗パターン
多くの学習者がやっているのは「テキストの上から順番にコードを入力する」方法です。
例えば、次のような順番で入力していきます。
using System;namespace Sampleclass Programこのように1行ずつ追加していくと…
using System;
namespace Sample
class Program
static void Main(string[] args)
Console.WriteLine("Hello");この状態で、エディタ上には赤い波線だらけになります。
なぜ赤い波線が出るのか
Visual Studio(やVisual Studio Code)が赤い波線を出す理由は一つです。
構造が未完成だから
C# のコードには、決まった構造(入れ物)があります。
namespace(名前空間)
├── class Program(入口・Main を置く)
│ └── method(メソッド)
│ └── 処理
└── class Player(あとからデータや処理を足す例)この構造が完成していない状態では、コンパイラ(プログラムを実行可能な形に変換するもの)がコードを理解できません。理解できないから、エラーを出します。
プログラムは「文章」ではない
多くの人が「プログラムは上から下へ順番に読む文章」だと思っています。
確かに実行されるときは上から下へ処理が進みます。しかし書くときは違います。
プログラムは入れ子になった構造を持つものです。
using System;
namespace Sample // 一番外側の入れ物
{
class Program // アプリの入口(Main を置く)
{
static void Main(string[] args) // さらに中の入れ物
{
Console.WriteLine("Hello"); // 処理はここに入る
}
}
class Player // 「プレイヤー」という意味のある枠(中身は後から)
{
}
}外側の入れ物が閉じられていない({ に対応する } がない)状態では、その中の内容は正しく認識されません。
IntelliSenseが効かない理由も同じ
IntelliSense とは、コードを入力中に候補を表示してくれる補完機能のことです。
IntelliSense が効かない状態になる原因も同じです。
構造が未完成の状態では、今どのスコープ(範囲)にいるかが分からないから
Console.WriteLine を入力しようとして補完が出ないのは、Visual Studio がその入力位置が有効かどうかを判断できていないためです。
構造という考え方
ここで理解してほしいのは「構造」という概念です。
C# においてコードが動く条件は次の通りです。
| 要素 | 役割 |
|---|---|
| namespace | コードを整理するグループ |
| class | 処理とデータをまとめる単位(Program は入口、Player はドメインの例 など) |
| method | 実際に実行される処理のまとまり |
この3つが正しく入れ子になっていて初めて、C# のコードは「成立している」状態になります。
「上から書く」こと自体は悪くありません。問題は構造が完成する前に処理を書こうとすることです。1行書くたびに { がない・} がないというエラーが積み重なり、収拾がつかなくなります。
解決策は次の記事へ
写経がつらくなる根本原因は分かりました。
次は「どう書けばいいのか」を具体的な手順で解説します。
→ 第2回:正しいC#の書き方:namespace→class→methodの順番
まとめ
- 写経がつらいのはセンスではなく手順の問題
- 赤い波線の正体は「構造が未完成」
- IntelliSenseが効かないのも同じ理由
- プログラムは文章ではなく、入れ子になった構造を持つ
- 外側の入れ物から順番に作ることが解決策
- サンプルでは
Program(入口)とPlayer(例の空クラス) を並べ、名前に意味を持たせる
シリーズ一覧
| 回 | タイトル |
|---|---|
| ハブ | C#の写経がつらい理由と、正しい学習手順【完全版】 |
| 第1回(この記事) | なぜC#の写経はつらいのか:赤い波線の正体 |
| 第2回 | 正しいC#の書き方:namespace→class→methodの順番 |
| 第3回 | プロパティはいつ書くべきか:最後でOKな理由 |
| 第4回 | エラーが出たらどうするか:その場で潰す技術 |
| 第5回 | 複数クラスで止まる理由:依存関係を理解する |
| 第6回 | Unityで同じことが起きる理由:置き場所という考え方 |
| 第7回 | プログラミングは構造で考える:写経を超えた先にあるもの |