cv.cm

Pemrograman · Bahasa pemrograman

Tutorial C# untuk pemula

6 menit baca

Jawaban singkat

C# adalah bahasa berorientasi objek dengan tipe statis dari Microsoft yang berjalan di .NET, runtime gratis lintas platform untuk Windows, macOS, dan Linux. Instal .NET SDK, jalankan dotnet new console, lalu dotnet run mencetak "Hello, World!". Konsep intinya: class dan record, collection generik seperti List<T> dan Dictionary<K, V>, query LINQ, async/await, pattern matching, dan exception.

Buka Pemformat JSON

Apa itu C# dan untuk apa dipakai

C# (dibaca "C sharp") dirancang di Microsoft oleh tim yang dipimpin Anders Hejlsberg dan pertama kali dirilis pada 2002. C# distandarkan oleh Ecma (ECMA-334) dan dikembangkan secara terbuka bersama .NET. C# dipakai untuk web API dan situs (ASP.NET Core), aplikasi desktop Windows, aplikasi mobile dan desktop lintas platform (.NET MAUI), layanan cloud, serta game: engine Unity memakai C# untuk skrip game. Sintaksnya termasuk keluarga C, sehingga terasa akrab bagi developer Java, C++, dan JavaScript.

Instal .NET dan jalankan Hello, world

Unduh .NET SDK dari dot.net dan periksa dengan dotnet --version. Buat dan jalankan proyek console:

dotnet new console -o HelloApp
cd HelloApp
dotnet run
# Hello, World!

Template ini membuat Program.cs, yang memakai top-level statement, jadi tidak perlu class atau method Main untuk program kecil:

Console.WriteLine("Hello, World!");

Variabel dan tipe data dasar

Setiap variabel punya tipe statis. var membuat compiler menyimpulkannya dari nilai. Value type (angka, bool, struct) menyimpan datanya langsung; reference type (string, class, array) merujuk ke sebuah objek.

TipeContohCatatan
intint n = 42;Bilangan bulat 32-bit
longlong big = 10_000_000_000;Bilangan bulat 64-bit
doubledouble x = 3.14;Floating point 64-bit
decimaldecimal price = 19.99m;Basis 10, cocok untuk uang
boolbool ok = true;true atau false
charchar c = 'A';Code unit UTF-16
stringstring s = "hi";Teks immutable
var name = "Ada";
int count = 7;
double avg = count / 2.0;
Console.WriteLine($"{name} has {count} items, avg {avg}");  // Ada has 7 items, avg 3.5
Console.WriteLine(count / 2);                              // 3 (integer division)
Console.WriteLine(int.Parse("12") + 1);                    // 13
string? nickname = null;   // ? marks a nullable reference
Console.WriteLine(nickname ?? "none");                     // none

$"..." adalah interpolated string. Proyek baru mengaktifkan nullable reference type, sehingga compiler memberi peringatan saat nilai yang mungkin null dipakai tanpa pemeriksaan.

Alur kontrol dan method

int score = 72;
if (score >= 90) Console.WriteLine("A");
else if (score >= 70) Console.WriteLine("B");   // B
else Console.WriteLine("C");

for (int i = 0; i < 3; i++) Console.Write($"{Square(i)} ");  // 0 1 4
Console.WriteLine();

foreach (var fruit in new[] { "apple", "pear" }) Console.WriteLine(fruit);

string day = "SAT";
string kind = day switch
{
    "SAT" or "SUN" => "weekend",
    _ => "weekday",
};
Console.WriteLine(kind);   // weekend
Console.WriteLine(Greet("Lin"));                // Hello, Lin!

static int Square(int x) => x * x;
static string Greet(string name, string greeting = "Hello") => $"{greeting}, {name}!";

Ekspresi switch dan pola or adalah bagian dari pattern matching C#. Method bisa punya nilai parameter default, named argument (Greet(name: "Lin")), dan expression body dengan =>.

Class, property, dan record

Class memiliki field, property (field dengan logika get dan set), dan method. record adalah tipe yang kesetaraannya berdasarkan nilai, ideal untuk data immutable.

var acc = new Account("Ann");
acc.Deposit(50);
Console.WriteLine($"{acc.Owner}: {acc.Balance}");   // Ann: 50

var p1 = new Point(3, 4);
var p2 = p1 with { Y = 5 };                         // copy with one change
Console.WriteLine(p1);                              // Point { X = 3, Y = 4 }
Console.WriteLine(p1 == new Point(3, 4));           // True

public class Account
{
    public string Owner { get; }
    public decimal Balance { get; private set; }

    public Account(string owner) => Owner = owner;

    public void Deposit(decimal amount)
    {
        if (amount <= 0) throw new ArgumentException("amount must be positive");
        Balance += amount;
    }
}

public record Point(int X, int Y);

Deklarasi tipe harus berada setelah top-level statement dalam file yang sama. Class mendukung pewarisan tunggal (class Savings : Account) dan sejumlah interface.

Collection dan LINQ

Collection generik di System.Collections.Generic adalah struktur data sehari-hari. LINQ (Language Integrated Query) menambahkan method seperti Where, Select, OrderBy, dan GroupBy ke setiap collection.

var nums = new List<int> { 3, 1, 2, 5 };
nums.Add(4);
nums.Sort();
Console.WriteLine(string.Join(", ", nums));      // 1, 2, 3, 4, 5

var ages = new Dictionary<string, int> { ["ann"] = 31, ["bob"] = 25 };
ages["cy"] = 40;
if (ages.TryGetValue("bob", out int bobAge)) Console.WriteLine(bobAge);  // 25

var evenSquares = nums.Where(n => n % 2 == 0).Select(n => n * n).ToList();
Console.WriteLine(string.Join(" ", evenSquares)); // 4 16

var oldest = ages.OrderByDescending(kv => kv.Value).First();
Console.WriteLine(oldest.Key);                    // cy

Collection umum lainnya adalah HashSet<T> untuk item unik, Queue<T>, Stack<T>, dan array berukuran tetap seperti int[].

Fitur khas: async dan await

C# memperkenalkan model async/await yang kemudian diadopsi banyak bahasa. Method async mengembalikan Task dan dapat await operasi lambat, seperti request web atau pembacaan file, tanpa memblokir thread.

using System.Net.Http;

using var http = new HttpClient();
var sizes = await Task.WhenAll(
    GetLengthAsync(http, "https://example.com"),
    GetLengthAsync(http, "https://example.org"));
Console.WriteLine($"downloaded {sizes.Sum()} characters");

static async Task<int> GetLengthAsync(HttpClient http, string url)
{
    string html = await http.GetStringAsync(url);
    return html.Length;
}

Task.WhenAll menjalankan kedua request secara bersamaan dan menunggu keduanya. Deklarasi using var membuang (dispose) HttpClient di akhir scope.

Exception

Error berupa exception. Tangkap tipe yang spesifik terlebih dahulu, dan gunakan finally atau using untuk pembersihan. Pola TryParse menghindari exception untuk input yang sering tidak valid.

try
{
    int age = int.Parse("abc");
}
catch (FormatException ex)
{
    Console.WriteLine($"not a number: {ex.Message}");
}
finally
{
    Console.WriteLine("done");
}

if (!int.TryParse("41", out int parsed)) parsed = 0;
Console.WriteLine(parsed);   // 41

Program kecil yang lengkap: frekuensi kata

Ganti Program.cs di proyek console dengan kode ini, lalu jalankan dotnet run -- notes.txt.

using System.Text.RegularExpressions;

if (args.Length != 1)
{
    Console.Error.WriteLine("usage: dotnet run -- FILE");
    return 1;
}

try
{
    string text = File.ReadAllText(args[0]).ToLowerInvariant();
    var top = Regex.Matches(text, "[a-z']+")
        .GroupBy(m => m.Value)
        .Select(g => (Word: g.Key, Count: g.Count()))
        .OrderByDescending(t => t.Count)
        .Take(5);

    foreach (var (word, count) in top)
        Console.WriteLine($"{count,5}  {word}");
    return 0;
}
catch (FileNotFoundException)
{
    Console.Error.WriteLine($"file not found: {args[0]}");
    return 1;
}

Top-level statement dapat membaca args baris perintah dan mengembalikan exit code. System.IO, System.Linq, dan System.Collections.Generic diimpor otomatis lewat implicit usings di proyek baru.

Kesalahan umum pemula

  • Memakai double untuk uang; gunakan decimal untuk menghindari kesalahan pembulatan biner.
  • Mengabaikan peringatan nullable, yang kemudian menjadi NullReferenceException saat runtime.
  • Mengubah List<T> di dalam foreach atas list yang sama, yang melempar InvalidOperationException.
  • Membuat HttpClient baru untuk setiap request di aplikasi yang berjalan lama. Pakai ulang satu instance atau gunakan IHttpClientFactory.
  • Lupa bahwa query LINQ berjalan secara lazy: query dijalankan lagi setiap kali dienumerasi kecuali Anda memanggil ToList().

Langkah selanjutnya

Microsoft Learn memiliki dokumentasi C# resmi, termasuk tur bahasa dan tutorial interaktif. Setelah itu pelajari ASP.NET Core untuk web API, Entity Framework Core untuk database, atau Unity untuk game, dan gunakan xUnit atau NUnit untuk tes. Visual Studio, VS Code dengan C# Dev Kit, dan JetBrains Rider adalah editor yang umum dipakai.

FAQ

Apakah C# hanya untuk Windows?

Tidak. .NET modern berjalan di Windows, macOS, dan Linux, dan aplikasi C# bisa di-deploy ke server Linux dan container. Hanya beberapa framework UI desktop, seperti WPF dan Windows Forms, yang khusus Windows.

Apa perbedaan C# dan .NET?

C# adalah bahasa pemrograman. .NET adalah runtime dan pustaka yang mengompilasi dan menjalankan kode C# (juga F# dan Visual Basic).

Apakah C# mirip Java?

Ya, dalam banyak hal: keduanya bahasa berorientasi objek dengan tipe statis, garbage collection, dan sintaks gaya C. C# menambahkan fitur seperti property, LINQ, async/await, struct value type, dan record.

Apakah C# bagus untuk pengembangan game?

Ya. Unity, salah satu game engine yang paling banyak dipakai, menggunakan C# untuk skrip game, dan engine Godot juga mendukung C#.

Semua tutorial pemrograman