Menu

Hello World C#: Main, Console.WriteLine dan ReadLine

Program C# pertamamu, baris demi baris: method Main, Console.WriteLine dan Write, membaca input dengan Console.ReadLine, komentar, membuat dan menjalankan proyek dengan dotnet CLI, serta top-level statements.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Program pertama yang klasik mencetak satu baris teks. Di C#, bentuknya seperti ini:

Output:

Hello, World!

Baris demi baris

  • using System; membuatmu bisa menulis Console, bukan nama lengkapnya System.Console. Console adalah class di namespace System (lihat namespace dan using).
  • class Program mendeklarasikan sebuah class. Semua kode C# berada di dalam sebuah tipe; nama Program hanya kebiasaan, bukan keharusan.
  • static void Main() adalah titik masuk program. Saat program dimulai, runtime mencari method static bernama Main lalu memanggilnya. static berarti method ini milik class itu sendiri, jadi tidak perlu membuat objek terlebih dahulu. void berarti method ini tidak mengembalikan apa pun.
  • Console.WriteLine("Hello, World!"); memanggil method WriteLine dengan argumen berupa string. Setiap pernyataan diakhiri titik koma.
  • Kurung kurawal { } menandai badan class dan badan method.

C# membedakan huruf besar dan kecil. console.writeline dan main adalah nama yang berbeda dari Console.WriteLine dan Main, dan keduanya tidak ada.

Console.WriteLine vs Console.Write

WriteLine menambahkan baris baru setelah teks. Write tidak, jadi output berikutnya berlanjut di baris yang sama. Keduanya menerima tipe apa saja, bukan hanya string: angka, boolean dan objek dikonversi dengan method ToString() miliknya.

Output:

Loading.. done
42
True

Item: coffee
coffee costs 3.20
coffee costs 3.20

Perhatikan bahwa true dicetak sebagai True: itulah yang dikembalikan bool.ToString(). Bentuk $"...", yang disebut string interpolation, adalah bentuk yang paling sering akan kamu pakai; lihat string interpolation untuk kode format seperti :F2.

Membaca input dengan Console.ReadLine

Console.ReadLine() menunggu pengguna mengetik satu baris lalu menekan Enter, kemudian mengembalikan baris itu sebagai string tanpa karakter baris baru. Saat input habis (misalnya saat input dialihkan dari sebuah file yang isinya sudah habis dibaca), method ini mengembalikan null.

Output:

What is your name? How old are you? 
Hi Maya, next year you will be 28.

Saat kamu menjalankannya di terminal, teks yang kamu ketik muncul setelah setiap pertanyaan. Output di atas tidak berisi teks yang diketik karena input-nya dialihkan (di-pipe) dan bukan diketik, jadi yang muncul hanya apa yang ditulis oleh program itu sendiri.

ReadLine selalu mengembalikan teks. Untuk memakai nilainya sebagai angka, kamu harus mengonversinya. int.Parse(text) melempar FormatException saat teksnya bukan angka; int.TryParse justru mengembalikan false, itulah sebabnya method ini pilihan yang tepat untuk input pengguna. Detailnya ada di konversi tipe.

Dua method yang berkaitan: Console.Read() mengembalikan karakter berikutnya sebagai kode int, dan Console.ReadKey() membaca satu tombol yang ditekan tanpa menunggu Enter (hanya bekerja di terminal interaktif).

Bentuk lain method Main

Main bisa menerima argumen baris perintah dan bisa mengembalikan kode keluar. Semua ini adalah titik masuk yang valid:

static void Main()
static void Main(string[] args)
static int Main()
static int Main(string[] args)
static async Task Main()             // C# 7.1 and later
static async Task<int> Main(string[] args)  // C# 7.1 and later

int yang dikembalikan menjadi kode keluar proses, yang dibaca oleh script dan sistem CI untuk menentukan apakah program berhasil (menurut kebiasaan, 0 berarti berhasil).

Output:

Got 0 argument(s)

Jalankan dengan dotnet run -- apples pears, maka args berisi "apples" dan "pears". Tanda -- memisahkan argumen untuk programmu dari argumen untuk tool dotnet.

Komentar

C# punya tiga jenis komentar. Compiler mengabaikan semuanya.

// A single-line comment runs to the end of the line.

/* A block comment
   can span several lines. */

/// <summary>
/// An XML documentation comment. Editors show it as the tooltip for the method.
/// </summary>
static decimal ApplyDiscount(decimal price) => price * 0.9m;

Pakai // untuk catatan di dalam kode. Komentar /// ditaruh pada tipe dan member publik; IDE menampilkannya saat kamu mengarahkan kursor ke sebuah pemanggilan, dan compiler bisa mengekspornya ke file XML untuk tool dokumentasi.

Membuat dan menjalankan proyek dengan dotnet

Di komputermu sendiri, instal .NET SDK dari dotnet.microsoft.com, lalu:

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

dotnet new console membuat dua file: HelloApp.csproj (file proyek: target framework, pengaturan, referensi package) dan Program.cs. dotnet run melakukan compile pada proyek lalu menjalankannya. dotnet build melakukan compile tanpa menjalankan dan menulis hasilnya ke bin/Debug/net8.0/ (nama folder-nya mengikuti target framework-mu).

Top-level statements (C# 9 ke atas)

Buka Program.cs yang dibuat tadi dan kamu akan menemukan ini, tanpa apa pun yang lain:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

Ini adalah program top-level statements, fitur dari C# 9. Compiler membuatkan class Program dan method Main di sekitar pernyataanmu. using System; juga tidak ada karena proyek .NET 6 ke atas mengaktifkan implicit usings: namespace yang umum seperti System, System.IO, System.Linq dan System.Collections.Generic di-import untuk seluruh proyek.

Program top-level tetap bisa membaca args, memakai await, dan melakukan return kode keluar:

// C# 9 and later: the whole Program.cs
Console.Write("Name: ");
string? name = Console.ReadLine();
Console.WriteLine($"Hello, {name}! You passed {args.Length} arguments.");
return 0;

Hanya satu file per proyek yang boleh berisi top-level statements, dan tipe (class, record) harus ditulis setelahnya. Anotasi string? adalah nullable reference type (C# 8), dan ada di sana karena ReadLine bisa mengembalikan null. Bentuk eksplisit class Program yang dipakai di contoh-contoh pada halaman ini setara, dan bentuk itulah yang akan kamu lihat di kode lama dan di sebagian besar script Unity, jadi ada gunanya bisa membaca keduanya. Kirim --use-program-main ke dotnet new console kalau kamu lebih suka bentuk eksplisit di proyek baru.

Error yang pertama kali akan kamu lihat

  • CS1002: ; expected. Sebuah pernyataan tidak diakhiri titik koma. Error-nya dilaporkan di akhir baris yang kehilangan titik koma itu.
  • CS0103: The name 'console' does not exist in the current context. Huruf besar dan kecilnya salah, atau using System; tidak ada di proyek yang tidak memakai implicit usings.
  • CS5001: Program does not contain a static 'Main' method suitable for an entry point. Penulisan Main salah, tidak static, atau signature-nya tidak didukung.
  • CS0017: Program has more than one entry point defined. Dua class masing-masing punya Main. Simpan satu saja, atau pilih salah satunya dengan pengaturan StartupObject di .csproj.
  • Jendelanya langsung tertutup. Saat aplikasi console dijalankan dengan klik ganda, jendelanya tertutup ketika Main selesai. Jalankan dari terminal, atau tambahkan Console.ReadKey(); di akhir selama pengujian.

Pertanyaan yang sering diajukan

Bagaimana cara menulis Hello World di C#?

Taruh Console.WriteLine("Hello, World!"); di dalam method static void Main() milik sebuah class, dengan using System; di bagian atas. Di proyek yang dibuat dengan dotnet new console pada .NET 6 ke atas, seluruh file bisa berisi satu baris itu saja, karena top-level statements membuatkan class dan Main untukmu.

Apa itu method Main di C#?

Main adalah titik masuk program: method yang dipanggil runtime saat program dimulai. Method ini harus static, bisa mengembalikan void atau int (kode keluar), dan bisa menerima parameter string[] args berisi argumen baris perintah. Sebuah program butuh tepat satu method seperti itu.

Apa perbedaan Console.Write dan Console.WriteLine?

Console.WriteLine menulis teks lalu diikuti baris baru, jadi output berikutnya dimulai di baris baru. Console.Write hanya menulis teksnya, jadi output berikutnya berlanjut di baris yang sama. Console.WriteLine() tanpa argumen mencetak satu baris kosong.

Bagaimana cara membaca input pengguna di C#?

Console.ReadLine() membaca satu baris teks dan mengembalikannya sebagai string (tanpa karakter baris baru), atau null saat input sudah habis. Untuk mendapatkan angka, konversi string-nya: int.TryParse(Console.ReadLine(), out int n) mengembalikan false, bukan crash, saat teksnya bukan angka.

Bagaimana cara menjalankan program C# dari baris perintah?

Instal .NET SDK, lalu jalankan dotnet new console -o HelloApp untuk membuat proyek, cd HelloApp, dan dotnet run untuk build lalu menjalankannya. dotnet build hanya melakukan compile, dan menaruh hasilnya di bin/Debug/net8.0/ (atau versi yang kamu targetkan).

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai