Program Pertama

Menulis dan menjalankan program C# pertama dengan top-level statement dan Console.WriteLine.

Daftar isi

Topik ini memandu pembuatan program C# pertama secara lengkap, mulai dari menulis berkas Program.cs, menjalankannya dari terminal, sampai membaca keluarannya. Program ditulis dengan top-level statement, yaitu pernyataan tingkat atas yang membuat program C# tidak perlu lagi dibungkus kelas dan metode Main. Setelah topik ini diselesaikan, siklus menulis, menjalankan, dan memperbaiki program kecil dapat dilakukan secara mandiri.

Program.cs dan top-level statement#

Kode sumber C# disimpan dalam berkas dengan ekstensi .cs. Nama Program.cs adalah konvensi umum untuk berkas yang memuat titik masuk program, yaitu tempat eksekusi pertama dimulai. Sejak C# 9, pernyataan boleh ditulis langsung di bagian atas berkas tanpa deklarasi kelas. Gaya penulisan ini disebut top-level statement (pernyataan tingkat atas) dan hanya boleh muncul pada satu berkas dalam satu program.

Satu berkas hanya boleh memuat satu bagian pernyataan tingkat atas. Berkas lainnya dalam program yang sama tetap berupa deklarasi tipe, seperti kelas atau interface, sebagaimana lazimnya proyek yang sudah berkembang. Batasan ini membuat titik masuk program selalu dapat ditemukan dengan cepat.

Bentuk lama tetap sah dan masih banyak ditemukan pada dokumentasi yang lebih tua. Program tersebut memakai kelas Program dengan metode statis Main sebagai titik masuknya. Perbandingan berikut memperlihatkan gaya tersebut agar tidak asing ketika ditemui di tempat lain.

csharp Contoh: gaya lama dengan kelas dan metode Main
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Halo, C#!");
    }
}
text Keluaran
Halo, C#!

Kedua gaya menghasilkan keluaran yang persis sama. Saat kompilator (compiler), perangkat lunak yang menerjemahkan kode sumber menjadi instruksi yang dapat dijalankan, menemukan top-level statement, ia secara otomatis membungkus pernyataan tersebut ke dalam kelas Program dan metode Main. Gaya baru menghilangkan seremoni tersebut, sehingga berkas program pertama cukup berisi pernyataan yang langsung dieksekusi.

Buat sebuah folder baru, kemudian buat berkas Program.cs di dalamnya dengan editor teks apa pun. Isi berkasnya persis seperti berikut.

csharp Program.cs
// Program pertama: setiap pernyataan dieksekusi berurutan, dari atas ke bawah.
Console.WriteLine("Halo, C#!");
Console.WriteLine();
Console.WriteLine("Program ini ditulis tanpa kelas dan tanpa metode Main.");
Console.WriteLine("Setiap baris keluaran dihasilkan oleh satu pernyataan Console.WriteLine.");
text Keluaran
Halo, C#!

Program ini ditulis tanpa kelas dan tanpa metode Main.
Setiap baris keluaran dihasilkan oleh satu pernyataan Console.WriteLine.

Baris pertama adalah komentar, yaitu teks yang diawali // dan diabaikan oleh kompilator. Empat pernyataan berikutnya dieksekusi berurutan dari atas ke bawah. Pemanggilan Console.WriteLine() tanpa argumen mencetak satu baris kosong, sedangkan pemanggilan dengan satu argumen mencetak teksnya lalu memindahkan kursor ke baris baru. Perhatikan bahwa penulisan Console wajib diawali huruf besar karena C# peka huruf besar dan huruf kecil.

Menjalankan program dari terminal#

.NET SDK menyediakan command line interface (antarmuka baris perintah) bernama dotnet. Perintah dotnet run --file mengompilasi satu berkas C# lalu langsung menjalankannya tanpa perlu membuat proyek. Masuk ke folder tempat Program.cs berada, kemudian jalankan perintah berikut.

bash
# jalankan berkas Program.cs secara langsung, tanpa membuat proyek
dotnet run --file Program.cs
text Keluaran
Halo, C#!

Program ini ditulis tanpa kelas dan tanpa metode Main.
Setiap baris keluaran dihasilkan oleh satu pernyataan Console.WriteLine.

Keluarannya identik dengan yang ditempel di atas karena programnya sama. Perintah ini tidak menghasilkan berkas program di folder kerja, sehingga folder tetap hanya berisi Program.cs. Perubahan pada berkas cukup diikuti dengan menjalankan ulang perintah yang sama.

Apa yang terjadi di balik layar#

Kode sumber C# tidak dijalankan langsung oleh sistem operasi. Kompilator menerjemahkannya menjadi intermediate language (bahasa antara), yaitu instruksi netral yang dipahami oleh runtime .NET, kemudian runtime menerjemahkan instruksi tersebut menjadi instruksi prosesor saat program berjalan. Seluruh proses ini terjadi otomatis setiap kali dotnet run dipanggil. Metode Console.WriteLine menulis teks ke keluaran standar (standard output) terminal, yaitu aliran tempat program umumnya menampilkan teksnya.

Pemanggilan dotnet run --file paling cocok untuk program satu berkas seperti contoh di topik ini. Berkas yang dijalankan dengan cara ini dikompilasi ke folder sementara milik SDK, sehingga folder kerja tetap hanya memuat kode sumbernya. Ketika program tumbuh menjadi banyak berkas dan bergantung pada package pihak lain, program perlu dipindahkan ke proyek dengan berkas .csproj yang mengatur detail build-nya, dan hasil build disimpan pada folder bin dan obj milik proyek tersebut.

Kesalahan umum#

  • Titik koma di akhir pernyataan terlupa. Kompilator menampilkan error CS1002: ; expected beserta nomor barisnya. Perbaikannya dengan menambahkan titik koma pada posisi yang disebut pesan error.
  • Huruf besar dan huruf kecil tertukar. Menulis console.WriteLine menghasilkan error CS0103: The name 'console' does not exist in the current context. Karena C# peka huruf besar dan huruf kecil, nama Console wajib ditulis persis seperti itu.
  • Tanda kutip penutup terlupa. String yang tidak ditutup menimbulkan error CS1010: Newline in constant. Pastikan setiap string dibuka dan ditutup dengan tanda kutip ganda yang berpasangan.
  • Perintah dijalankan dari folder yang salah. Apabila dotnet run --file Program.cs dipanggil dari folder yang tidak memuat berkas tersebut, kompilasi gagal karena berkasnya tidak ditemukan. Periksa lokasi folder kerja dengan perintah pwd sebelum menjalankannya.

Ringkasan#

  • Program C# terkecil cukup berisi pernyataan tingkat atas tanpa kelas dan tanpa metode Main, sebagaimana Program.cs yang dibuat pada topik ini.
  • Perintah dotnet run --file Program.cs mengompilasi dan menjalankan satu berkas C# langsung dari terminal tanpa meninggalkan berkas program di folder kerja.
  • Console.WriteLine mencetak teks beserta pindah baris, sedangkan Console.WriteLine() tanpa argumen mencetak baris kosong.
  • Kompilator menampilkan pesan error bernomor (format CSxxxx) beserta nomor barisnya, sehingga kesalahan sintaks mudah dilacak.

Referensi#