Pemrograman · Bahasa pemrograman
Tutorial C# untuk pemula
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.
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.
| Tipe | Contoh | Catatan |
|---|---|---|
int | int n = 42; | Bilangan bulat 32-bit |
long | long big = 10_000_000_000; | Bilangan bulat 64-bit |
double | double x = 3.14; | Floating point 64-bit |
decimal | decimal price = 19.99m; | Basis 10, cocok untuk uang |
bool | bool ok = true; | true atau false |
char | char c = 'A'; | Code unit UTF-16 |
string | string 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); // cyCollection 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); // 41Program 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
doubleuntuk uang; gunakandecimaluntuk menghindari kesalahan pembulatan biner. - Mengabaikan peringatan nullable, yang kemudian menjadi
NullReferenceExceptionsaat runtime. - Mengubah
List<T>di dalamforeachatas list yang sama, yang melemparInvalidOperationException. - Membuat
HttpClientbaru untuk setiap request di aplikasi yang berjalan lama. Pakai ulang satu instance atau gunakanIHttpClientFactory. - 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#.