投稿

#6 C#で学ぶループの基本

C#のループは、Javaとよく似た書き方に加えて、コレクションを扱いやすいforeach文が用意されています。この記事では、C#におけるループの基本を解説します。 for文の基本 for (int i = 0; i foreach文 配列やリストの中身を1つずつ処理したい場合は、`foreach`を使います。 string[] fruits = {"りんご", "みかん", "ぶどう"}; foreach (string fruit in fruits) { Console.WriteLine(fruit); } Javaの拡張for文にあたる書き方で、`foreach`という専用のキーワードが用意されているのがC#の特徴です。インデックス番号も一緒に使いたい場合は、`Select`と組み合わせる方法があります。 foreach (var (fruit, index) in fruits.Select((f, i) => (f, i))) { Console.WriteLine($"{index}: {fruit}"); } while文とdo-while文 int count = 0; while (count 「最低1回は処理を実行してから条件を判定したい」場合は、`do-while`文を使います。 int n = 0; do { Console.WriteLine(n); n++; } while (n ループの制御:break/continue 特定の条件でループを抜けたい場合は`break`、その回だけスキップしたい場合は`continue`を使います。 for (int i = 0; i 7) break; Console.WriteLine(i); } C#ならではの注意点 `foreach`はコレクションの中身を順番に取り出すだけの書き方のため、添字が必要な処理(例えば「3番目の要素だけ特別扱いしたい」など)には向いていません。そのような場合は従来の`for`を使うか、`Select`で添字を付与する方法を検討しましょう。また、`foreach`でコレクションの中身を走査しながら要素...

#5 C#で学ぶ条件分岐の基本

C#の条件分岐は、Javaとよく似た書き方に加えて、簡潔に書けるいくつかの便利な機能が用意されています。この記事では、C#における条件分岐の基本と、新しい書き方を解説します。 if文の基本 int age = 20; if (age >= 18) { Console.WriteLine("成人です"); } else { Console.WriteLine("未成年です"); } 複数の条件を順に確認する if (age >= 65) { Console.WriteLine("高齢者です"); } else if (age >= 18) { Console.WriteLine("成人です"); } else { Console.WriteLine("未成年です"); } switch文とswitch式 C#にも switch がありますが、近年のC#では、より簡潔に書ける「switch式」という新しい書き方も使えます。 string result = score switch { >= 90 => "優", >= 70 => "良", _ => "可" }; break を書く必要がなく、1行で条件と結果の対応を表現できるのが特徴です。従来の switch 文が「処理を実行する」ものだったのに対し、switch式は「値を返す」という発想の違いも押さえておきましょう。 三項演算子 簡単な条件分岐であれば、三項演算子を使って1行で書くこともできます。 string message = age >= 18 ? "成人です" : "未成年です"; null条件演算子との組み合わせ 値がnullかもしれない変数を安全に扱うため、 ?. と ?? を条件分岐と組み合わせて使うこともよくあります。 string displayName = person?.Name ?? "ゲスト"; person がnull...

#5 C++で学ぶ条件分岐の基本

C++の条件分岐は、C言語系の言語に共通する標準的な書き方が基本です。この記事では、C++における条件分岐の基本と、注意すべき仕様を解説します。 if文の基本 int age = 20; if (age >= 18) { std::cout 複数の条件を順に確認する if (age >= 65) { std::cout = 18) { std::cout switch文 候補が多い場合は switch を使います。 switch (day) { case 1: std::cout Javaと同じく、 break を書き忘れると次の case まで処理が続けて実行されてしまいます。 三項演算子 簡単な条件分岐は、三項演算子で1行にまとめられます。 std::string message = age >= 18 ? "成人です" : "未成年です"; if文の中で変数を宣言する 比較的新しいC++では、if文の条件を書く前に、その場限りの変数を宣言できる書き方も使えます。 if (int result = calculate(); result > 0) { std::cout result という変数は、このif文(とelseブロック)の中だけで使える一時的な変数になります。 複数の条件をまとめて評価する 複数の条件を組み合わせたい場合は && (かつ)・ || (または)を使います。 if (age >= 18 && age C++の && ・ || は「短絡評価」という性質を持ち、左側の条件だけで結果が確定する場合、右側の条件は評価されません。この性質を利用して、 if (ptr != nullptr && ptr->value > 0) のように、安全確認と本来の判定を1つの条件式にまとめる書き方もよく使われます。 C++ならではの注意点 C++のif文の条件には、真偽値だけでなく数値をそのまま書くこともできます。この場合、0は「偽」、0以外の数値は「真」として扱われます。この仕様は歴史的な経緯によるもので、...

#1 C++で学ぶ環境構築の基本

C++は、ゲーム開発や組み込み機器など、実行速度が重視される分野で今も広く使われている言語です。歴史が長く情報も豊富にある一方、環境構築でつまずきやすい言語としても知られています。この記事では、C++を学ぶための準備を解説します。 C++にはコンパイラが必要 PythonやJavaScriptと違い、C++にはパソコンにあらかじめ実行環境が入っていません。書いたコードを機械が理解できる形式に変換する「コンパイラ」というソフトウェアを、自分でインストールする必要があります。 OSごとのインストール方法 Windowsの場合 「MinGW」というツール一式を使うか、Microsoft公式の「Visual Studio」をインストールする方法が一般的です。初心者のうちは、エディタとデバッグ機能がセットになったVisual Studio(Community版は無料)を使うと迷いにくいでしょう。 macOS・Linuxの場合 macOSでは「Xcode Command Line Tools」、Linuxでは g++ というコンパイラをパッケージ管理ツール経由でインストールするのが一般的です。 ファイルをコンパイルして実行する 拡張子 .cpp のファイルを用意したら、次のようにコンパイルします。 g++ ファイル名.cpp -o app 生成された実行ファイルを動かします。 ./app エディタの選択肢 本格的な開発にはVisual Studioが便利ですが、より軽量な環境を好む場合はVS CodeにC/C++拡張機能を入れる方法もよく使われます。設定ファイル( tasks.json など)を用意する必要があり、慣れるまでは少し手間がかかります。 CMakeというビルドツール 複数のファイルで構成される本格的なプロジェクトでは、コンパイルの手順そのものを管理する「CMake」というツールがよく使われます。プロジェクトが大きくなってきたら、手動でのコンパイルコマンドから移行を検討するとよいでしょう。 C++ならではの注意点 C++の環境構築でつまずく人の多くは、「コンパイラが見つかりません」というエラーに遭遇しています。これは大抵の場合、インストールしたコンパイラの場所がパソコンの設定(パス)に正しく登録されていないことが原因です...

#2 C++で学ぶ変数とデータ型の基本

C++は、コンピュータのメモリを細かく意識できる言語のため、変数やデータ型の扱いにも独自の考え方があります。この記事では、C++における変数の作り方と、代表的なデータ型について解説します。 型を明示して変数を作る C++の変数は、Javaと同様に型を明示して作ります。 int age = 20; 代表的なデータ型 C++の基本的なデータ型には、次のようなものがあります。 整数(int) 浮動小数点数(double) 1文字(char) 真偽値(bool) 複数の文字を扱う「文字列」は、 std::string という型を使うのが現代的な書き方です。 std::string name = "太郎"; autoによる型推論 C++にも、代入する値から型を自動で判断してくれる auto というキーワードがあります。 auto age = 20; // int型と推論される auto name = std::string("太郎"); // std::string型と推論される 長くて複雑な型名を毎回書く手間を省けるため、現代的なC++のコードでは積極的に使われています。 変更を禁止するconst 値を後から変更されたくない変数には、 const というキーワードを付けます。 const int MAX = 100; // MAX = 200; // コンパイルエラー const を付けた変数への再代入は、コンパイルの段階でエラーとして検出されます。変更する予定のない値には積極的に const を付けておくと、意図しない書き換えバグを防げます。 変数のサイズを調べる sizeof という演算子を使うと、変数や型がメモリ上で何バイトを占めるかを調べられます。 std::cout メモリを直接扱うC++ならではの機能で、低レイヤーな処理を書く際に役立ちます。 符号なし整数という選択肢 マイナスの値を取らないと分かっている場合、 unsigned int という符号なしの整数型を使うこともできます。 unsigned int count = 0; 同じビット数でより大きな正の値を表現できますが、意図せず負の数を代入すると非常に大きな値に化けてしまう(オーバ...

#6 C++で学ぶループの基本

C++のループは、C言語系の言語に共通する標準的な書き方に加えて、現代的な範囲for文も使えるようになっています。この記事では、C++におけるループの基本を、つまずきやすいポイントも含めて解説します。 for文の基本 for (int i = 0; i for文のカッコの中は「初期化式; 条件式; 更新式」の3つに分かれています。 int i = 0 で変数 i を用意し、 i < 5 が真である間だけループを繰り返し、1周するたびに i++ で i を1増やします。この3点セットは他のC系言語(Java、C#など)ともほぼ共通の書き方なので、一度覚えると応用が利きます。 範囲for文(C++11以降) 比較的新しいC++では、配列やベクター(可変長のリストのようなもの)の中身を1つずつ処理する、簡潔な書き方が使えます。 std::vector<std::string> fruits = {"りんご", "みかん", "ぶどう"}; for (const auto& fruit : fruits) { std::cout << fruit << std::endl; } auto を使うことで、型を書く手間を省きながら、簡潔にループを書けます。ここで const auto& としているのは、要素をコピーせず参照で受け取ることでムダな処理を減らすためです。中身を書き換えたい場合は & だけを付け( auto& fruit )、コピーで十分な小さな型(int等)ならそのまま auto fruit でも構いません。 while文とdo-while文 int count = 0; while (count while文は「条件を先に確認してから」ループ本体を実行します。条件が最初から偽であれば、本体は一度も実行されません。一方、C++にはdo-while文もあり、こちらは「本体を1回実行してから」条件を確認します。 int count = 0; do { std::cout << count << std::endl; count++; } while (count ...

#7 C++で学ぶ配列の基本

C++には、複数の値をまとめて扱うデータ構造として、伝統的な「配列」と、現代的な「vector」という2種類の仕組みがあります。この記事では、それぞれの違いと基本的な使い方を解説します。 配列(固定長) C++の伝統的な配列は、大きさがあらかじめ決まっていて、後から変更できません。 std::string fruits[3] = {"りんご", "みかん", "ぶどう"}; vector(可変長) 大きさを自由に変えたい場合は、 std::vector を使うのが現代的な書き方です。 #include std::vector fruits = {"りんご", "みかん", "ぶどう"}; fruits.push_back("メロン"); 値を追加するには push_back() を使います。要素数を調べたい場合は fruits.size() が使えます。 要素にアクセスする・繰り返す 配列・vectorどちらも、角かっこ [] を使って0から始まる添字でアクセスします。 std::cout for (const auto& fruit : fruits) という書き方は「範囲for文」と呼ばれ、他の言語のfor-eachに相当する、現代的なC++でよく使われる書き方です。 範囲外アクセスを検出するat() [] による添字アクセスは範囲外でもエラーにならない一方、 at() という別のメソッドを使うと、範囲外アクセス時に例外を発生させて教えてくれます。 try { std::cout デバッグ中や、入力値によって添字が変わる場面では、 at() を使うことでバグの早期発見につながります。 C++ならではの注意点 C++の伝統的な配列は、範囲外の添字を指定してもエラーにならず、意図しないメモリを読み書きしてしまうことがあります。これは重大なバグの原因になりやすいため、特別な理由がない限り、安全性の高い vector を使うことが強く推奨されています。 vector の [] も同様に範囲外チェックを行わないため、確実性が必要な場面では at() を使い分けましょう。...