Peta strategi untuk pengembang JavaScript dan TypeScript mempelajari C#

Jika Anda bergabung dengan tim yang menggunakan C#, atau menjelajahinya untuk pengembangan sisi server atau pengembangan full-stack, artikel ini membantu Anda menjadi produktif dengan cepat. Ini menyoroti apa yang akrab dari JavaScript dan TypeScript dan apa yang baru di C#.

C#, TypeScript, dan JavaScript adalah anggota keluarga bahasa C. Kesamaan antara bahasa membantu Anda menjadi produktif dengan cepat di C#.

  1. Sintaks serupa: JavaScript, TypeScript, dan C# berada dalam keluarga bahasa C. Kesamaan itu berarti Anda sudah dapat membaca dan memahami C#. Ada beberapa perbedaan, tetapi sebagian besar sintaksnya sama dengan JavaScript dan C. Kurung kurawal dan titik koma sudah akrab. Pernyataan kontrol seperti if, else, dan switch sama. Pernyataan perulangan dari for, while, dan do...while sama. Kata kunci yang sama untuk class dan interface berada di C# dan TypeScript. Pengubah akses di TypeScript dan C#, dari public ke private, sama.
  2. Token =>: Semua bahasa mendukung definisi fungsi ringan. Di C#, mereka disebut sebagai ekspresi lambda. Di JavaScript, biasanya disebut fungsi panah.
  3. hierarki Fungsi: Ketiga bahasa mendukung fungsi lokal, yang merupakan fungsi yang ditentukan dalam fungsi lain.
  4. Asinkron / Tunggu: Ketiga bahasa berbagi kata kunci async dan await yang sama untuk pemrograman asinkron.
  5. pengumpulan sampah: Ketiga bahasa mengandalkan pengumpul sampah untuk manajemen memori otomatis.
  6. Model peristiwa: Sintaks event C#mirip dengan model JavaScript untuk peristiwa model objek dokumen (DOM).
  7. Manajer paket: NuGet adalah manajer paket yang paling umum untuk C#, mirip dengan npm untuk aplikasi JavaScript. Pustaka C# dikirimkan dalam rakitan .

Sekilas sintaksis

Contoh berikut menunjukkan beberapa pola umum berdampingan. Perbandingan ini tidak lengkap, tetapi memberi Anda nuansa cepat untuk perbedaan sintaks.

Ketik anotasi:

// TypeScript
let name: string = "Hello";
let count: number = 5;
// C#
string name = "Hello";
int count = 5;

Asinkron / menunggu:

// TypeScript
async function fetchData(): Promise<string> {
    const response = await fetch(url);
    return await response.text();
}
// C#
async Task<string> FetchDataAsync() {
    var response = await client.GetAsync(url);
    return await response.Content.ReadAsStringAsync();
}

Untuk mempelajari lebih lanjut, lihat Pemrograman asinkron.

Kelas:

// TypeScript
class Point {
    constructor(public x: number, public y: number) {}
}
// C#
record Point(int X, int Y);

Untuk mempelajari selengkapnya, lihat Rekaman.

Pencocokan pola:

// TypeScript - manual type checking
if (typeof value === "string") { /* ... */ }
// C# - pattern matching
if (value is string s) { /* use s */ }

Untuk mempelajari selengkapnya, lihat Pencocokan pola.

Perbedaan model runtime

Meskipun C# dan JavaScript terlihat mirip dalam sintaksis, mereka berjalan sangat berbeda:

  • JavaScript berjalan pada runtime seperti V8 dan menggunakan perulangan peristiwa untuk menangani pekerjaan asinkron.
  • C# berjalan pada runtime .NET (CLR), di mana kode dikompilasi ke dalam Bahasa Perantara (IL) dan kemudian dijalankan menggunakan kompilasi JIT atau AOT.

Apa yang baru untuk Anda di C#

Saat Anda mempelajari C#, Anda menemukan konsep yang bukan bagian dari JavaScript. Beberapa konsep ini mungkin sudah tidak asing bagi Anda jika Anda menggunakan TypeScript:

  1. C# Type System: C# adalah bahasa yang kuat dalam pengetikan. Setiap variabel memiliki jenis, dan jenis tersebut tidak dapat berubah. Anda menentukan jenis class atau struct. Anda dapat menentukan definisi interface yang mendefinisikan perilaku yang diimplementasikan oleh tipe lain. TypeScript mencakup banyak konsep ini, tetapi karena TypeScript dibangun di JavaScript, sistem jenis tidak seketat.
  2. Pencocokan pola: Pencocokan pola memungkinkan pernyataan dan ekspresi kondisional ringkas berdasarkan bentuk struktur data yang kompleks. Ekspresi is memeriksa apakah variabel "sesuai dengan" suatu pola. Ekspresi switch berbasis pola menyediakan sintaks yang kaya untuk memeriksa variabel dan membuat keputusan berdasarkan karakteristiknya.
  3. interpolasi string dan literal string mentah: Interpolasi string memungkinkan Anda menyisipkan ekspresi yang dievaluasi ke dalam sebuah string, daripada menggunakan pengidentifikasi posisi. Literal string mentah menyediakan cara untuk meminimalkan sekuens escape dalam teks.
  4. Jenis Nullable dan Non-Nullable: C# mendukung tipe nilai nullable dan tipe referensi nullable dengan menambahkan akhiran ke suatu tipe. Untuk jenis nullable, pengkompilasi memperingatkan Anda jika Anda tidak memeriksa null sebelum mendereferensiasi ekspresi. Untuk jenis yang tidak dapat diubah ke null, pengkompilasi memperingatkan Anda jika Anda mungkin menetapkan nilai null ke variabel tersebut. Fitur-fitur ini dapat meminimalkan aplikasi Anda melemparkan System.NullReferenceException. Sintaks ? mungkin sudah dikenal dari penggunaan TypeScript untuk properti opsional.
  5. LINQ: Kueri terintegrasi bahasa (LINQ) menyediakan sintaks umum untuk mengkueri dan mengubah data, terlepas dari penyimpanannya.

Tip

Untuk mempelajari selengkapnya tentang sistem jenis C#—termasuk class vs. struct, generik, dan antarmuka—kunjungi gambaran umum sistem Jenis di bagian Dasar.

Saat Anda mempelajari lebih lanjut, perbedaan lain menjadi jelas, tetapi banyak dari perbedaan tersebut lebih kecil dalam cakupan.

Beberapa fitur dan idiom yang sudah dikenal dari JavaScript dan TypeScript tidak tersedia di C#:

  1. jenis dinamis: C# menggunakan pengetikan statis. Deklarasi variabel mencakup jenis, dan jenis tersebut tidak dapat berubah. Ada jenis dynamic dalam C# yang menyediakan pengikatan runtime.
  2. warisan prototipal: Warisan C# adalah bagian dari deklarasi jenis. Deklarasi C# class menyatakan kelas dasar apa pun. Di JavaScript, Anda mengatur __proto__ properti untuk mengatur jenis dasar pada instans apa pun.
  3. Bahasa yang ditafsirkan: Kode C# harus dikompilasi sebelum Anda menjalankannya. Kode JavaScript dapat dijalankan langsung di browser.

Selain itu, beberapa fitur TypeScript lainnya tidak tersedia di C#:

  1. Jenis union: Dimulai dengan C# 15, C# mendukung jenis union. Union mendefinisikan sekumpulan kasus bernama yang terbatas yang dapat diwakili oleh nilai, dan kompiler memastikan pencocokan pola secara menyeluruh atas kasus-kasus tersebut.
  2. Dekorator: C# tidak memiliki dekorator. Beberapa dekorator umum, seperti @sealed adalah kata kunci yang telah disediakan dalam pemrograman C#. Dekorator umum lainnya mungkin memiliki Atribut yang sesuai. Untuk dekorator lainnya, Anda dapat membuat atribut Anda sendiri.
  3. Sintaks yang lebih pemaaf: Pengkompilasi C# mengurai kode lebih ketat daripada yang diperlukan JavaScript.

Jika Anda membangun aplikasi web, pertimbangkan untuk menggunakan Blazor untuk membangun aplikasi Anda. Blazor adalah kerangka kerja web full-stack yang dibangun untuk C#. Komponen Blazor dapat berjalan di server, sebagai rakitan .NET, atau pada klien dengan menggunakan WebAssembly. Blazor mendukung interop dengan pustaka JavaScript atau TypeScript favorit Anda.

Langkah selanjutnya