C# を学習する Python 開発者向けのロードマップ
C# と Python は同様の概念を共有しています。 これらの使い慣れた構造は、Python を既に知っている場合に C# を学習するのに役立ちます。
- オブジェクト指向: Python と C# はどちらもオブジェクト指向言語です。 構文が異なる場合でも、Python のクラスに関する概念はすべて C# にも当てはまります。
- クロスプラットフォーム: Python と C# はどちらもクロスプラットフォームの言語です。 どちらの言語で作成されたアプリも、多くのプラットフォームで実行できます。
- ガベージ コレクション: どちらの言語も、ガベージ コレクションによる自動メモリ管理を採用しています。 ランタイムは、参照されていないオブジェクトのメモリを再利用します。
- 強い型付け: Python と C# はどちらも強く型付けされた言語です。 強制型変換は暗黙的には行われません。 C# は静的に型付けされるのに対し、Python は動的に型付けされるため、後で説明する違いがあります。
- Async / Await: Python の
async
とawait
の機能は、C# のasync
とawait
のサポートから直接触発されています。 - パターン マッチング: Python の
match
式とパターン マッチングは、C# のパターン マッチングswitch
式に似ています。 これらを使って、複雑なデータ式を検査し、パターンに一致するかどうかを判断します。 - ステートメントのキーワード: Python と C# は、
if
、else
、while
、for
などの多くのキーワードを共有します。 すべての構文が同じというわけではありませんが、Python を知っていれば C# を読めるほどの十分な類似性があります。
C# の学習を始めると、C# が Python とは異なる次の重要な概念について学ぶことができます。
- インデントとトークン: Python では、改行とインデントは第一級の構文要素です。 C# では、空白は重要ではありません。
;
の個別のステートメントなどのトークン、他のトークン{
および}
は、if
および他のブロック ステートメントのブロック スコープを制御します。 ただし、読みやすさを考慮して、ほとんどのコーディング スタイル (これらのドキュメントで使われているスタイルを含む) では、インデントを使って、{
と}
で宣言されたブロック スコープを強化しています。 - 静的型付け: C# では、変数宣言にその型が含まれます。 変数を別の型のオブジェクトに再割り当てすると、コンパイラ エラーが発生します。 Python では、再割り当て時に型を変更できます。
- null 許容型: C# 変数は、"null 許容" または "null 非許容" にすることができます。 null 非許容型とは、null (または nothing) にできない型です。 常に有効なオブジェクトを参照します。 対照的に、null 許容型は、有効なオブジェクトか null のいずれかを参照する可能性があります。
- LINQ: 統合言語クエリ (LINQ) を構成するクエリ式のキーワードは、Python のキーワードではありません。 ただし、
itertools
、more-itertools
、py-linq
などの Python ライブラリは同様の機能を提供します。 - ジェネリック: C# ジェネリックは、C# 静的型付けを使って、型パラメーターに指定された引数に関するアサーションを行います。 ジェネリックのアルゴリズムでは、引数の型が満たさなければならない制約を指定する必要がある場合があります。
最後に、C# では使用できない Python の機能がいくつかあります。
- 構造的型付け (ダック タイピング): C# では、型には名前と宣言があります。 タプルを除き、同じ構造を持つ型は交換可能ではありません。
- REPL: C# には、ソリューションのプロトタイプを迅速に作成するための Read-Eval-Print Loop (REPL) がありません。
- 重要な空白: ブロック スコープを示すには中かっこ
{
と}
を正しく使う必要があります。
Python を知っていれば、C# を学ぶのはスムーズです。 これらの言語には、使用できる同様の概念と同様のイディオムがあります。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET