Bagikan melalui


Tur bahasa C#

Bahasa C# adalah bahasa yang paling populer untuk platform .NET, lingkungan pengembangan gratis, lintas platform, sumber terbuka. Program C# dapat berjalan di banyak perangkat yang berbeda, dari perangkat Internet of Things (IoT) ke cloud dan di mana-mana di antaranya. Anda dapat menulis aplikasi untuk komputer dan server telepon, desktop, dan laptop.

C# adalah bahasa tujuan umum lintas platform yang membuat pengembang produktif sambil menulis kode dengan performa tinggi. Dengan jutaan pengembang, C# adalah bahasa .NET paling populer. C# memiliki dukungan luas dalam ekosistem dan semua beban kerja .NET. Berdasarkan prinsip-prinsip berorientasi objek, ini menggabungkan banyak fitur dari paradigma lain, terutama pemrograman fungsional. Fitur tingkat rendah mendukung skenario efisiensi tinggi tanpa menulis kode yang tidak aman. Sebagian besar runtime dan pustaka .NET ditulis dalam C#, dan kemajuan di C# sering menguntungkan semua pengembang .NET.

C# berada dalam keluarga bahasa C. Sintaks C# akrab jika Anda menggunakan C, C++, JavaScript, TypeScript, atau Java. Seperti C dan C++, titik koma (;) menentukan akhir pernyataan. Pengidentifikasi C# peka huruf besar/kecil. C# memiliki penggunaan kurung kurawal yang sama, { dan }, pernyataan kontrol seperti if, else dan switch, dan konstruksi perulangan seperti for, dan while. C# juga memiliki foreach pernyataan untuk jenis koleksi apa pun.

Halo Dunia

Program "Halo, Dunia" secara tradisional digunakan untuk memperkenalkan bahasa pemrograman. Berikut adalah dalam C#:

// This line prints "Hello, World" 
Console.WriteLine("Hello, World");

Baris yang dimulai dengan // adalah komentar baris tunggal. Komentar baris tunggal C# dimulai dengan // dan lanjutkan ke akhir baris saat ini. C# juga mendukung komentar multibaris. Komentar multibaris dimulai dengan /* dan diakhir dengan */. Metode WriteLine dari kelas Console, yang berada di ruang nama System, menghasilkan keluaran dari program. Kelas ini disediakan oleh pustaka kelas standar, yang, secara default, secara otomatis direferensikan dalam setiap program C#. Formulir program lain mengharuskan Anda untuk mendeklarasikan kelas dan metode yang berisi untuk titik masuk program. Pengkompilasi mensintesis elemen-elemen ini saat Anda menggunakan pernyataan tingkat atas.

Format alternatif ini masih valid dan berisi banyak konsep dasar di semua program C#. Banyak sampel C# yang ada menggunakan format yang setara berikut:

using System;
namespace TourOfCsharp;

class Program
{
    static void Main()
    {
        // This line prints "Hello, World" 
        Console.WriteLine("Hello, World");
    }
}

Program sebelumnya "Hello, World" dimulai dengan using direktif yang mengacu pada System namespace. Namespace menyediakan cara hierarkis untuk mengatur program dan pustaka C#. Namespace berisi tipe dan ruang nama lainnya—contohnya, ruang nama System berisi banyak tipe, seperti kelas Console yang dirujuk dalam program, dan banyak ruang nama lainnya, seperti IO dan Collections. Arahan using yang mereferensikan namespace tertentu memungkinkan penggunaan langsung jenis yang merupakan anggota namespace tersebut. Karena direktif using, program dapat menggunakan Console.WriteLine sebagai singkatan untuk System.Console.WriteLine. Dalam contoh sebelumnya, namespace tersebut secara implisit disertakan.

Kelas Program yang dideklarasikan oleh program "Halo, Dunia" memiliki satu anggota, metode bernama Main. Metode Main ini dideklarasikan dengan pengubah static. Meskipun metode instans dapat mereferensikan instans objek penutup tertentu menggunakan kata kunci this, metode statis beroperasi tanpa mereferensikan ke objek tertentu. Menurut konvensi, ketika tidak ada pernyataan tingkat atas metode statis bernama Main berfungsi sebagai titik masuk program C#. Kelas yang Main berisi metode ini biasanya bernama Program.

Petunjuk / Saran

Contoh dalam artikel ini memberi Anda melihat kode C# terlebih dahulu. Beberapa sampel mungkin menunjukkan elemen C# yang tidak Anda kenal. Ketika Anda siap untuk mempelajari C#, mulailah dengan tutorial pemula kami, atau selidiki tautan di setiap bagian. Jika Anda berpengalaman di Java, JavaScript, TypeScript, atau Python, baca tips kami untuk membantu Anda menemukan informasi yang Anda butuhkan untuk mempelajari C#dengan cepat.

Aplikasi berbasis file

C# adalah bahasa yang dikompilasi . Di sebagian besar program C#, Anda menggunakan dotnet build perintah untuk mengkompilasi sekelompok file sumber ke dalam paket biner. Kemudian, Anda menggunakan dotnet run perintah untuk menjalankan program. (Anda dapat menyederhanakan proses ini karena dotnet run mengkompilasi program sebelum menjalankannya jika perlu.) Alat-alat ini mendukung bahasa yang kaya opsi konfigurasi dan sakelar baris perintah. Antarmuka dotnet baris perintah (CLI), yang disertakan dalam .NET SDK, menyediakan banyak alat untuk menghasilkan dan memodifikasi file C#.

Dimulai dengan C# 14 dan .NET 10, Anda dapat membuat aplikasi berbasis file, yang menyederhanakan pembangunan dan menjalankan program C#. Anda menggunakan dotnet run perintah untuk menjalankan program yang terkandung dalam satu *.cs file. Misalnya, jika kode berikut disimpan dalam file bernama hello-world.cs, Anda dapat menjalankannya dengan mengetik dotnet run hello-world.cs:

#!/usr/local/share/dotnet/dotnet run
Console.WriteLine("Hello, World!");

Baris pertama program berisi #! urutan (shebang) untuk shell Unix. Lokasi dotnet CLI dapat bervariasi pada distribusi yang berbeda. Pada sistem unix apa pun, jika Anda mengatur izin jalankan (+x) pada file C# seperti itu yang berisi arahan shebang, Anda dapat menjalankan file C# langsung dari baris perintah:

./hello-world.cs

Sumber untuk program ini harus berupa satu file, tetapi jika tidak, semua sintaks C# valid. Anda dapat menggunakan aplikasi berbasis file untuk utilitas baris perintah kecil, prototipe, atau eksperimen lainnya.

Fitur C# yang familier

C# dapat didekati untuk pemula namun menawarkan fitur canggih untuk pengembang berpengalaman yang menulis aplikasi khusus. Anda bisa produktif dengan cepat. Anda dapat mempelajari lebih lanjut teknik khusus saat Anda membutuhkannya untuk aplikasi Anda.

Aplikasi C# mendapat manfaat dari manajemen memori otomatis .NET Runtime. Aplikasi C# juga menggunakan pustaka runtime ekstensif yang disediakan oleh .NET SDK. Beberapa komponen independen platform, seperti pustaka sistem file, pengumpulan data, dan pustaka matematika. Lainnya khusus untuk satu beban kerja, seperti pustaka web ASP.NET Core, atau pustaka UI .NET MAUI. Ekosistem Open Source yang kaya di NuGet menambah pustaka yang merupakan bagian dari runtime. Pustaka ini menyediakan lebih banyak komponen yang dapat Anda gunakan.

C# adalah bahasa yang bertipe kuat. Setiap variabel yang Anda deklarasikan memiliki jenis yang diketahui pada waktu kompilasi. Pengkompilasi, atau alat pengeditan memberi tahu Anda jika Anda salah menggunakan jenis tersebut. Anda dapat memperbaiki kesalahan tersebut sebelum menjalankan program Anda. Tipe data dasar dibangun dalam bahasa dan runtime: jenis nilai seperti int, double, char, jenis referensi seperti string, array, dan koleksi lainnya. Saat Anda menulis program, Anda membuat jenis Anda sendiri. Jenis tersebut dapat berupa struct jenis untuk nilai, atau class jenis yang menentukan perilaku berorientasi objek. Anda dapat menambahkan pengubah record ke salah satu struct atau class jenis sehingga pengkompilasi mensintesis kode untuk perbandingan kesetaraan. Anda juga dapat membuat interface definisi, yang menentukan kontrak, atau sekumpulan anggota, yang harus disediakan oleh jenis yang menerapkan antarmuka tersebut. Anda juga dapat menentukan jenis dan metode generik. Generik menggunakan parameter tipe untuk menyediakan tempat penampung untuk tipe aktual saat digunakan.

Saat menulis kode, Anda menentukan fungsi, juga disebut metode, sebagai anggota struct dan class tipe. Metode ini menentukan perilaku jenis Anda. Metode dapat kelebihan beban, dengan jumlah atau jenis parameter yang berbeda. Metode dapat secara opsional mengembalikan nilai. Selain metode, jenis C# dapat memiliki properti, yang merupakan elemen data yang didukung oleh fungsi yang disebut aksesor. Jenis C# dapat menentukan peristiwa, yang memungkinkan jenis untuk memberi tahu pelanggan tentang tindakan penting. C# mendukung teknik berorientasi objek seperti warisan dan polimorfisme untuk class jenis.

Aplikasi C# menggunakan pengecualian untuk melaporkan dan menangani kesalahan. Praktik ini sudah tidak asing lagi jika Anda menggunakan C++ atau Java. Kode Anda melemparkan pengecualian ketika tidak dapat melakukan apa yang dimaksudkan. Kode lain, tidak peduli berapa banyak tingkat tumpukan panggilan, dapat secara opsional pulih dengan menggunakan try - catch blok.

Fitur C# yang khas

Beberapa elemen C# mungkin kurang akrab.

C# menyediakan pencocokan pola. Ekspresi tersebut memungkinkan Anda memeriksa data dan membuat keputusan berdasarkan karakteristiknya. Pencocokan pola menyediakan sintaks yang bagus untuk alur kontrol berdasarkan data. Kode berikut menunjukkan bagaimana metode untuk operasi boolean dan, atau, dan xor dapat diekspresikan menggunakan sintaks pencocokan pola:

public static bool Or(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (true, false) => true,
        (false, true) => true,
        (false, false) => false,
    };

public static bool And(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (true, false) => false,
        (false, true) => false,
        (false, false) => false,
    };
public static bool Xor(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => false,
        (true, false) => true,
        (false, true) => true,
        (false, false) => false,
    };

Ekspresi pencocokan pola dapat disederhanakan menggunakan _ sebagai penanganan umum untuk nilai apa pun. Contoh berikut menunjukkan cara Anda bisa menyederhanakan metode and :

public static bool ReducedAnd(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (_, _) => false,
    };

Contoh sebelumnya juga mendeklarasikan tuple, struktur data ringan. Tuple adalah urutan nilai yang diurutkan dan panjang tetap dengan nama opsional dan jenis individual. Anda mengapit urutan dalam karakter ( dan ). Deklarasi (left, right) mendefinisikan tuple dengan dua nilai boolean: left dan right. Setiap "switch arm" menetapkan nilai tuple seperti (true, true). Tuple menyediakan sintaksis yang nyaman untuk mendeklarasikan satu nilai dengan beberapa nilai.

Ekspresi koleksi menyediakan sintaks umum untuk menyediakan nilai koleksi. Anda menulis nilai atau ekspresi antara [ karakter dan ] dan pengkompilasi mengonversi ekspresi tersebut ke jenis koleksi yang diperlukan:

int[] numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
List<string> names = ["Alice", "Bob", "Charlie", "David"];

IEnumerable<int> moreNumbers = [.. numbers, 11, 12, 13];
IEnumerable<string> empty = [];

Contoh sebelumnya memperlihatkan berbagai jenis koleksi yang dapat diinisialisasi menggunakan ekspresi koleksi. Salah satu contoh menggunakan [] ekspresi koleksi kosong untuk mendeklarasikan koleksi kosong. Contoh lain menggunakan ..elemen spread untuk memperluas koleksi dan menambahkan semua nilainya ke ekspresi koleksi.

Anda dapat menggunakan ekspresi indeks dan rentang untuk mengambil satu atau beberapa elemen dari koleksi yang dapat diindeks:

string second = names[1]; // 0-based index
string last = names[^1]; // ^1 is the last element
int[] smallNumbers = numbers[0..5]; // 0 to 4

Indeks ^ menunjukkan dari akhir daripada dari awal. Elemen ^0 berada tepat setelah akhir koleksi, sehingga ^1 adalah elemen terakhir. Ekspresi rentang dengan .. menunjukkan rentang elemen yang akan disertakan. Rentang dimulai dengan indeks pertama dan mencakup semua elemen hingga, tetapi tidak termasuk, elemen pada indeks terakhir.

Kueri terintegrasi bahasa (LINQ) menyediakan sintaks berbasis pola umum untuk mengkueri atau mengubah kumpulan data apa pun. LINQ menyaingkan sintaks untuk mengkueri koleksi dalam memori, data terstruktur seperti XML atau JSON, penyimpanan database, dan bahkan API data berbasis cloud. Anda mempelajari satu set sintaks dan Anda dapat mencari dan memanipulasi data terlepas dari penyimpanannya. Kueri berikut menemukan semua siswa yang rata-rata poin nilainya lebih besar dari 3,5:

var honorRoll = from student in Students
                where student.GPA > 3.5
                select student;

Kueri sebelumnya berfungsi untuk banyak jenis penyimpanan yang diwakili oleh Students. Ini bisa berupa kumpulan objek, tabel database, blob penyimpanan cloud, atau struktur XML. Sintaks kueri yang sama berfungsi untuk semua jenis penyimpanan.

Model pemrograman asinkron berbasis Tugas memungkinkan Anda menulis kode yang berbunyi seolah-olah berjalan secara sinkron, meskipun berjalan secara asinkron. Ini menggunakan async dan await kata kunci untuk menggambarkan metode yang bersifat asinkron dan saat ekspresi dievaluasi secara asinkron. Sampel berikut menunggu permintaan web asinkron. Ketika operasi asinkron selesai, metode mengembalikan panjang respons:

public static async Task<int> GetPageLengthAsync(string endpoint)
{
    var client = new HttpClient();
    var uri = new Uri(endpoint);
    byte[] content = await client.GetByteArrayAsync(uri);
    return content.Length;
}

C# juga mendukung await foreach pernyataan untuk melakukan iterasi koleksi yang didukung oleh operasi asinkron, seperti GraphQL paging API. Sampel berikut membaca data dalam gugus, mengembalikan iterator yang menyediakan akses ke setiap elemen saat tersedia:

public static async IAsyncEnumerable<int> ReadSequence()
{
    int index = 0;
    while (index < 100)
    {
        int[] nextChunk = await GetNextChunk(index);
        if (nextChunk.Length == 0)
        {
            yield break;
        }
        foreach (var item in nextChunk)
        {
            yield return item;
        }
        index++;
    }
}

Penelepon dapat mengulangi koleksi menggunakan await foreach pernyataan:

await foreach (var number in ReadSequence())
{
    Console.WriteLine(number);
}

Terakhir, sebagai bagian dari ekosistem .NET, Anda dapat menggunakan Visual Studio, atau Visual Studio Code dengan C# DevKit. Alat-alat ini memberikan pemahaman yang kaya tentang C#, termasuk kode yang Anda tulis. Mereka juga menyediakan kemampuan penelusuran kesalahan.