C# を学習する JavaScript および TypeScript 開発者向けのロードマップ
C#、TypeScript、JavaScript はすべて、C 言語ファミリのメンバーです。 言語間の類似点は、C# ですばやく生産性を高めるのに役立ちます。
- "同様の構文": JavaScript、TypeScript、C# は C 言語ファミリに含まれます。 その類似性により、C# を読んで理解することは既に可能なはずです。 いくつかの違いはありますが、ほとんどの構文は JavaScript および C と同じです。中かっことセミコロンはおなじみのものです。
if
、else
、switch
などの制御ステートメントは同じです。for
、while
、do
...while
のループ ステートメントは同じです。class
とinterface
という同じキーワードが、C# と TypeScript の両方に存在します。public
からprivate
までのアクセス修飾子は TypeScript と C# で同じです。 - "
=>
トークン": すべての言語で軽量関数定義がサポートされます。 C# では、これらは "ラムダ式" と呼ばれ、JavaScript では、通常は "アロー関数" と呼ばれます。 - "関数階層": 3 つの言語はすべて、他の関数内で定義される関数であるローカル関数をサポートします。
- Async/Await: 3 つの言語はすべて、非同期プログラミング用に同じ
async
およびawait
キーワードを持っていいます。 - "ガベージ コレクション": 3 つの言語はすべて、自動メモリ管理のためにガベージ コレクターを利用します。
- "イベント モデル": C# の
event
構文は、JavaScript のドキュメント オブジェクト モデル (DOM) イベントのモデルに類似しています。 - "パッケージ マネージャー": NuGet は、JavaScript アプリケーションの npm と同様に、C# と .NET の最も一般的なパッケージ マネージャーです。 C# ライブラリはアセンブリで提供されます。
C# の学習を続けていくと、JavaScript にはない概念を知ることになります。 TypeScript を使用している場合は、以下に示す概念の一部はおなじみのものかもしれません。
- "C# の型システム": C# は強い型付け言語です。 すべての変数には型があり、その型は変更できません。 ユーザーは
class
またはstruct
型を定義します。 他の型によって実装される動作を定義するinterface
定義を定義することができます。 TypeScript はこれらの概念の多くを含んでいますが、TypeScript は JavaScript 上に構築されているため、型システムはそれほど厳密ではありません。 - "パターン マッチング": パターン マッチングにより、複雑なデータ構造の形状に基づいた簡潔な条件付きステートメントと式が可能になります。
is
式は、変数 "is" 何らかのパターンが成り立つかどうかをチェックします。 パターンベースのswitch
式は、変数を検査し、その特性に基づいて決定を行うためのリッチな構文を提供します。 - "文字列補間" と "生文字列リテラル": 文字列補間を使用すると、位置識別子を使用するのではなく、評価された式を文字列に挿入できます。 生文字列リテラルは、テキスト内のエスケープ シーケンスを最小限に抑える方法を提供します。
- "null 許容と null 非許容": C# では、型に対して
?
サフィックスを追加することによる "null 許容値型" と "null 許容参照型" がサポートされています。 null 許容型の場合、式の参照値を取得する前にnull
のチェックを行わないと、コンパイラによる警告を受けます。 null 非許容型の場合、その変数にnull
値を割り当てている可能性がある場合に、コンパイラによる警告を受けます。 これらの機能により、アプリケーションが System.NullReferenceException をスローする可能性を最小限に抑えることができます。 この構文は、TypeScript におけるオプションのプロパティに対する?
の使用でおなじみのものかもしれません。 - LINQ: 統合言語クエリ (LINQ) は、ストレージに関係なく、データのクエリと変換を行う一般的な構文を提供します。
さらに学習するにつれてその他の違いが明らかになりますが、それらの違いの多くはスコープが比較的小さいものです。
以下に示すいくつかの JavaScript と TypeScript でおなじみの機能とイディオムは、C# では使用できません。
- "動的型": C# は静的型付けを使用します。 変数宣言には型が含まれており、その型は変更できません。 C# には、実行時バインドを提供する
dynamic
型が存在します。 - "プロトタイプ継承": C# の継承は型宣言の一部です。 C# の
class
宣言では、任意の基底クラスを記述できます。 JavaScript では、__proto__
プロパティを設定して、任意のインスタンスに基本型を設定できます。 - "インタープリタ型言語": C# コードは、実行する前にコンパイルする必要があります。 JavaScript コードは、ブラウザーで直接実行できます。
さらに、C# では以下に示すいくつかの TypeScript 機能も使用できません。
- "共用体型": C# は共用体型をサポートしていません。 ただし、設計上の提案は進行中です。
- "デコレーター": C# にはデコレーターが存在しません。
@sealed
などの一般的なデコレーターの一部は、C# での予約キーワードです。 他の一般的なデコレーターには、対応する属性が存在する場合があります。 他のデコレーターに関しては、独自の属性を作成することができます。 - "より寛容な構文": C# コンパイラは、JavaScript で要求されるよりも厳密にコードを解析します。
Web アプリケーションを構築する場合は、Blazor を使用してアプリケーションを構築することを検討するべきです。 Blazor は、.NET および C# 用に構築されたフルスタック Web フレームワークです。 Blazor コンポーネントは、サーバー上で .NET アセンブリとして、またはクライアント上で WebAssembly を使用して実行できます。 Blazor は、ユーザーの好みの JavaScript または TypeScript ライブラリとの相互運用がサポートされています。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET