Bab II: Operator, Variabel, dan Ekspresi

Operator Penugasan dan Variabel

sunting

Komputer pada awalnya memang dibuat untuk membantu manusia dalam melakukan kalkulasi ‎numerik, sehingga memang tidak mengejutkan bahwa bahasa pemrograman juga mengadopsi beberapa ‎elemen tertentu dari aljabar, termasuk di antaranya adalah penggunaan huruf atau kata sebagai ‎pengganti angka.‎

Berikut adalah contoh dari beberapa aljabar sederhana:‎

A = 3
B = 5
C = A + B

Bagi kita, persamaan di atas memang merupakan persamaan yang sama sekali tidak rumit, tetapi ‎jika kita dapat membujuk komputer untuk menyelesaikan persamaan di atas, maka kita juga dapat ‎membujuknya untuk menyelesaikan persamaan atau masalah lainnya yang jauh lebih kompleks. Sebagai ‎langkah pertama, kita akan mencoba untuk melakukan konversi aljabar di atas ke dalam sintaksis di dalam ‎bahasa C#, dan bentuknya kira-kira seperti di bawah ini:‎

A = 3;
B = 5;
C = A + B;

Tiga baris kode di atas, tidaklah membentuk program C# yang komplet, tapi contoh kode di atas ‎dapat ditemukan dalam program C#, mungkin program yang kita dapat buat sendiri. Kita bisa menulis ‎kode di atas dengan menggunakan beberapa editor teks (semacam notepad atau WordPad) hingga ‎menggunakan alat bantu khusus yang didesain untuk menyederhanakan pemrograman dengan ‎menggunakan bahasa C#, seperti [www.icsharpcode.net/OpenSource/SD #develop (SharpDevelop)] maupun Microsoft Visual C# Express Edition (dapat di-‎download secara gratis dari situs situs Web Microsoft Developer Network (MSDN)). Setelah menuliskan kode di ‎atas, maka langkah selanjutnya yang harus kita lakukan adalah mengubah kode di atas ke dalam bentuk ‎berkas yang dapat dieksekusi (*.EXE) yang dapat kita jalankan.‎

Perbedaan yang signifikan antara bentuk pertama (aljabar) dan bentuk kedua (kode dalam ‎bentuk bahasa C#) adalah bahwa setiap baris di dalam bahasa C# selalu diakhiri dengan menggunakan ‎karakter titik koma (semicolon). Setiap baris yang diakhiri dengan karakter titik koma disebut dengan ‎pernyataan program C# (C# program statement). Sebuah program komputer yang dibuat dengan ‎menggunakan C# umumnya terdiri atas macam-macam statemen. Huruf A, B dan C yang disebut di atas ‎merupakan apa yang disebut sebagai variabel, dan setiap variabel merepresentasikan lokasi di dalam ‎memori di mana nilai dari variabel akan disimpan.‎

Bandingkan dengan aljabar dan bentuk statemen program C# di bawah ini:‎

A = 3;
B = 5;
C = A + B;

dan bentuk

A = 3;
C = A + B;
B = 5;

Sekilas, aljabar di atas terlihat sama dengan bentuk pertama dan kedua, dan hasil akhirnya ‎adalah C = 8. Akan tetapi, ketika diubah ke dalam bentuk statemen bahasa C#, hasilnya tidaklah sama, ‎karena hasil C = 3. Hal ini dikarenakan statemen-statemen program akan diproses secara berurutan oleh ‎komputer, baris demi baris. Komputer akan pertama-tama membaca nilai A = 3 seperti yang telah ‎disebutkan pada baris pertama, dan langsung menjalankan baris kedua yang berisi C = A + B. Karena nilai ‎B pada saat baris kedua dijalankan belum memiliki nilai (alias nilainya kosong), maka C = 3 + kosong, dan ‎nilai dari C = 3. Meskipun statemen program pada baris ketiga dijalankan, statemen tersebut tidak akan ‎dapat mempengaruhi nilai C yang telah ditetapkan pada baris kedua.‎

Tanda sama dengan (=) dalam C#, berbeda dengan tanda sama dengan (=) dalam aljabar. Jika ‎dalam aljabar tanda tersebut berarti persamaan dan kesetaraan, maka dalam C# berarti penugasan, atau ‎lebih tepatnya berfungsi sebagai operator penugasan (assignment operator). Operator adalah simbol atau ‎kata yang singkat yang mampu menyuruh komputer untuk melakukan sesuatu, yakni untuk melakukan ‎operasi. Setiap operator dapat memiliki apa yang dinamakan dengan operand, dan operator penugasan ‎memiliki dua buah operand, yaitu sebuah variabel yang diletakkan di sebelah kiri tanda sama dengan dan ‎operasi yang harus dilakukan yang diletakkan di sebelah kanan tanda sama dengan. Operator penugasan ‎seperti itu akan menyebabkan variabel yang terletak di sebelah kiri tanda akan diberikan nilai yang ‎diperoleh dari hasil perhitungan dari ekspresi-ekspresi yang diletakkan di sebelah kanan operator. Dalam ‎statemen program C# di atas, memang hanya disebutkan mengenai operator penugasan, tetapi di dalam ‎bahasa C#, terdapat banyak jenis operator (yang nanti akan dibahas).‎

Operator penugasan dapat memiliki beberapa bentuk. Semua statemen-statemen di bawah ini ‎adalah benar, menurut bahasa C#:‎

C = A + 5;
C = 90 + A + B;
C = B + A + A + B + A + B + 49;
C = 81 + 90;

Dalam setiap kasus di atas, sebuah variabel yang diletakkan di sebelah kiri tanda sama dengan ‎akan diberi nilai dengan ekspresi yang dievaluasi yang diletakkan pada bagian sebelah kanan. Tanda plus ‎di sana merupakan contoh dari operator aritmetika, yang berarti penjumlahan. Seperti halnya di dalam ‎aljabar yang memiliki penjumlahan, perkalian dan pembagian, C# juga memilikinya dan mengizinkan kita ‎untuk melakukannya.‎

Perhatikan jenis kode di bawah ini:‎

B + 1 = 2;

Sekilas, menurut aljabar, statemen di atas merupakan statemen yang benar adanya dan valid. ‎Akan tetapi, tidak bagi C#, karena C# hanya mengizinkan sebelah kiri tanda sama dengan sebagai tempat ‎diletakkannya variabel, bukan tempat diletakkannya ekspresi.‎

Perhatikan juga kode di bawah ini:‎

C = C + 10;

Kira-kira, berapa nilai dari C? Meskipun statemen di atas terlihat "tidak masuk akal" dalam ‎aljabar, di dalam C# hal tersebut valid adanya. Dalam C#, pernyataan di atas akan menambahkan 5 dari ‎nilai variabel C. Jika C diberi nilai 20 sebelum statemen di atas, maka nilai akhir dari C adalah 30 setelah ‎statemen tersebut dijalankan.‎

Pernyataan-pernyataan yang telah dituliskan di atas sejauh ini mengandung beberapa elemen, ‎yakni variabel, operator penugasan, tanda penjumlahan, angka-angka dan juga tanda titik koma. Angka-‎angka, di dalam C#, seperti 3 dan 5, disebut dengan literal numerik, yang diklasifikasikan ke dalam ‎beberapa jenis tergantung seberapa jauh daya jangkaunya (range) dan seberapa tinggi ketelitiannya (pre‎cision). Angka-angka semacam 3 dan 5 merupakan contoh dari literal integer, karena memang angka 3 ‎dan angka 5 merupakan bilangan bulat yang tidak memiliki koma, pecahan, dan juga pangkat. Bagaimana ‎dengan bilangan bulat negatif? Ya, kita juga bisa memasukkan bilangan bulat negatif dalam C# dengan ‎menggunakan tanda minus, seperti kode di bawah ini.‎

C = -20;

Lalu, bagaimana kita memasukkan nilai bilangan bulat yang besar (jutaan atau miliaran)? Apakah ‎dengan menggunakan koma atau titik sebagai pemisah antar angka? Bahasa C# tidak mengizinkan kita ‎untuk menuliskan koma dan titik untuk merepresentasikan angka yang besar, apalagi hanya digunakan ‎sebagai pemisah antar angka. Statemen di bawah ini tidaklah valid menurut C#:‎

Z = 123,456,789;

Akan tetapi, tuliskan seperti di bawah ini:‎

Z = 123456789;

Kenapa huruf-huruf di atas (A, B, C, dan Z) disebut variabel? Huruf-huruf di atas disebut variabel ‎karena nilai yang bisa dikandungnya dapat bervariasi. Berikut ini adalah contoh statemen yang akan ‎mendemonstrasikan bagaimana nilai dari variabel dapat berubah:‎

A = 3;
B = 2;
C = A + B;
B = 10;
C = A + B;

Setelah baris ketiga dijalankan oleh komputer, nilai C adalah 5. Setelah baris kelima dijalankan ‎oleh komputer, nilai C adalah 13, bukannya 5 lagi. Dalam pemrograman, bisa saja variabel berubah secara ‎dengan banyak sekali perubahan ketika program tersebut dijalankan. Sebagai contoh, sebuah variabel ‎mungkin memang telah ditetapkan sebagai tempat penyimpanan nama siswa, tetapi ketika program ‎dijalankan program tersebut akan mengisi variabel tersebut dengan nama siswa, yang berjumlah lebih ‎dari satu, karena program tersebut disuruh untuk menangani puluhan, ratusan, atau bahkan ribuan nama ‎santri. Karenanya, untuk menghindari kebingungan antara pemrograman dan aljabar, para programmer ‎seringnya menyebut tanda sama dengan sebutan "C akan mendapatkan A ditambah B", atau "Nilai C akan ‎diisi dengan nilai A yang ditambah dengan B." Beberapa programmer mungkin menyebutnya dengan sebutan yang lebih ‎mudah, seperti "A ditambah B akan dimasukkan ke dalam C."‎

Penggunaan titik koma

sunting

Penggunaan tanda titik koma di dalam bahasa C# pada akhir statemen program merupakan ‎sebuah cara yang sangat umum dilakukan oleh bahasa-bahasa pemrograman yang diturunkan dari bahasa ‎ALGOL. Penggunaan tanda titik dua tersebut dilakukan karena C# mengizinkan kode agar ditulis dalam ‎bentuk yang bebas. Dalam C#, kita tidak perlu menulis kode dalam baris-baris yang terlihat "bagus." Kita ‎bisa saja menulis kode di atas dengan menggunakan cara seperti di bawah ini:‎

A = 3; B = 2; C = A + B;

Atau, kita juga bisa menggunakan bentuk seperti di bawah ini, meski terlihat acak-acakan:‎

A‎ = 3 ;B 
   = 2; C = A 
 + B;

Meski terlihat acak-acakan oleh kita, komputer tidak akan kebingungan untuk memprosesnya, ‎tanpa ada keluhan. Komputer akan membedakan baris-baris kode statemen program dengan ‎menggunakan karakter titik dua, tidak peduli apakah sebuah baris tersebut dibagi ke dalam banyak baris ‎terpecah-pecah, atau baris yang digabungkan dalam satu baris yang terlihat "rapi." Penggunaan spasi, dan ‎baris baru di dalam program, dalam C# umumnya dikenal dengan sebutan White Space (ruangan putih). ‎Para programmer sering menggunakan white space untuk membuat kode mereka terlihat lebih rapi. ‎Sebagai contoh, saya akan menggunakan white space untuk membedakan antara variabel, operand, dan ‎ekspresinya, seperti di bawah ini:‎

A = 3;
B = 2;
C = A + B;

Meski kode di atas terlihat lebih rapi, kita tidak mesti melakukannya.‎

Penamaan Variabel

sunting

Meski A, B, C, dan Z adalah sebuah nama yang enak dibaca untuk nama-nama variabel, kita bisa ‎membuat variabel dengan nama-nama yang lebih enak untuk diingat, seperti:‎

variabel1 = 3;
Variabel1 = 2;
variAbel1 = variabel1 + Variabel1;

Bahasa C# merupakan bahasa pemrograman yang bersifat case-sensitive, artinya kita dapat ‎menggunakan karakter kapital (A sampai Z) dan huruf ordinal (a sampai z) sebagai nama variabel, tapi ‎memang harus ada konsistensi. Variabel1, variabel1 dan variAbel1 tidaklah sama! Tiga variabel di atas adalah tiga ‎variabel yang berbeda di dalam C#, meskipun dalam beberapa bahasa seperti Pascal dan Visual Basic, ‎merupakan variabel yang sama. Untuk meminimalisasi tingkat kebingungan yang kita alami, kita bisa ‎menghindari penggunaan nama variabel yang sama tetapi berbeda huruf kapital dan ordinalnya.‎

Peraturan untuk membuat nama-nama variabel di dalam C# lebih kompleks dibandingkan dalam ‎bahasa C, C++, atau Java, karena C# mendukung penggunaan karakter-karakter di luar karakter Latin, ‎seperti Cyrillic, Arab, dan juga Yunani. Kita bisa saja menggunakan aksara Yunani sebagai nama variabel ‎seperti di bawah ini:‎

π = 3.14;
Ω = 4.13;

Untuk aksara-aksara yang dapat diketik dengan mudah dengan menggunakan keyboard, C# ‎menawarkan beberapa peraturan dalam pemberian nama kepada variabel, yakni sebagai berikut:‎

  • Nama-nama variabel harus dimulai dengan menggunakan sebuah huruf atau karakter ‎garis bawah (underscore).‎
  • Nama-nama variabel harus mengandung hanya huruf (A - Z, a - z), angka (0 - 9), dan ‎karakter garis bawah (underscore).‎

Gampang kan? Sebuah nama variabel memang dapat mengandung angka (seperti halnya Variabel1 yang telah digunakan di atas), akan tetapi ia tidak dapat dimulai dengan angka. Jika memang ‎dimulai dengan angka, maka C# akan menerjemahkannya sebagai literal numerik, bukannya sebuah variabel. ‎ Nama-nama variabel juga tidak boleh mengandung spasi atau tanda baca selain karakter garis ‎bawah (underscore). Untuk variabel yang menggunakan banyak kata di dalamnya, para programmer sering ‎menggunakan karakter underscore untuk memisahkan kata-kata tersebut:‎

jumlah_siswa=4120;

Atau, mereka juga bisa menggunakan campuran antara huruf besar dan huruf kecil, seperti di ‎bawah ini:‎


JumlahSiswa=4120;

Kata kunci (keyword) C#

sunting

Meski demikian, ada beberapa kata yang tidak dapat digunakan sebagai nama-nama variabel. ‎Kata-kata tersebut, dinamakan dengan C# Keyword (kata kunci C#), yang memang direservasikan oleh C#. ‎Kira-kira ada 87 buah keyword yang terdapat di dalam C# yang tidak bisa digunakan di dalam melakukan ‎penamaan variabel.‎

abstract
as
base
bool
break
byte
case
catch
char
checked
class
const
continue
decimal
default
delegate
do
double
else
enum
event
explicit
extern
false
finally
fixed
float
for
foreach
goto
if
implicit
in
int
interface
internal
is
lock
long
namespace
new
null
object
operator
out
override
params
private
protected
public
readonly
ref
return
sbyte
sealed
short
sizeof
stackalloc
static
string
struct
switch
this
throw
true
try
typeof
uint
ulong
unchecked
unsafe
ushort
using
virtual
void
volatile
while
add
alias
get
global
partial
remove
set
value
where
yield

Sebagian besar programmer menggunakan nama-nama variabel yang lebih memiliki makna ‎dalam berbagai hal. Mungkin, orang lain selain kita akan membaca program yang kita buat, atau memang ‎kita akan membaca kembali program yang kita buat, setelah beberapa lama kita tidak membukanya. Kita ‎akan mendapatkan manfaat yang sangat besar, ketika kita memang menulis variabel dengan nama-nama ‎yang memberitahukan apa maksud dari setiap variabel tersebut.‎

BayaranSMP = 350000;
BayaranSMA = 450000;
BayaranSD  = 150000;

Meski statemen di atas kelihatan lebih panjang, jelas kita lebih mudah memahaminya ‎dibandingkan dengan menggunakan huruf A, B, C atau Z sebagai nama variabel. Kalau memang kita malas ‎mengetik nama variabel yang panjang, kita bisa menggunakan singkatan-singkatan yang meskipun singkat ‎tetap menunjukkan kejelasan, sebagai berikut:‎

ByrSMP = 350000;
ByrSMA = 450000;
ByrSD  = 150000;

Meskipun memang bagi manusia statemen-statemen di atas terlihat sudah sempurna, bagi ‎kompiler C#, statemen di atas tidaklah sempurna, karena memang statemen-statemen di atas hanyalah ‎berisi ekspresi saja. Kompiler membutuhkan tambahan informasi untuk memulainya, yang dibahas pada ‎bagian berikutnya.‎

Hungarian Notation

sunting

Terus, bagaimana dong cara menamai variabel yang baik? Saya bilang di atas memang kita harus ‎menggunakan nama variabel yang jauh lebih memiliki makna dalam berbagai hal dibandingkan dengan ‎huruf-huruf seperti A, B dan Z. Banyak programmer cenderung menambahkan tambahan tipe data dari variabel tersebut, meskipun hanya singkatan dari nama tipe data ‎tersebut sehingga ia akan tahu apa tipe data dari variabel tersebut, apakah itu integer, decimal, string, ‎atau tipe data lainnya.

‎Salah satu konvensi penamaan yang sering digunakan adalah sebuah konvensi yang dikenal ‎dengan sebutan Hungarian Notation, yang dibuat oleh seorang programmer legendaris di Microsoft yang ‎berasal dari Hongaria, Charles Simonyi (yang juga merupakan pembuat Microsoft Word dan Excel). ‎Charles Simonyi yang dilahirkan di Budapest, Hongaria, membuat jenis notasi ini pada tesis doktoralnya di ‎bidang Ilmu Komputer. Karena memang Simonyi juga merupakan programmer yang menjadi rujukan dan legenda, hampir semua nama di dalam sistem operasi Windows (terutama API Microsoft Windows) ‎menggunakan skema notasi ini.

‎Memang ada pro dan kontra mengenai Hungarian Notation ini. Kalau nggak percaya gunakan ‎saja Google atau di Wikipedia dan cari mengenai "Hungarian Notation". Anda akan menemukan banyak ‎pro dan kontra.

‎Dalam bentuknya yang paling sederhana, Hungarian Notation mengandung awalan dalam huruf ‎kecil yang menyatakan tipe data dari variabel tersebut. Oke deh saya akan menuliskan tabelnya di bawah ‎ini.‎

Tipe data Prefiks
byte
by
sbyte
sb
ushort
us
short
s
int
i
uint
ui
long
l
ulong
ul
decimal
m
atau
dec
string
str
float
fl
char
ch
bool
b
double
d
atau
dbl
array
arr

Sebagai contoh, saat kita melihat ada sebuah variabel dengan nama strNamaSiswa, maka kita akan ‎melihatnya sebagai sebuah variabel bertipe data string. Dan lain sebagainya.

Jenis-jenis Variabel Bilangan

sunting

Sebelum kita dapat menggunakan variabel tertentu di dalam program C#, kita harus memberi ‎tahu kepada kompiler mengenai jenis variabel itu sendiri. Dilihat dari contoh-contoh di atas, kita melihat ‎bahwa semua variabel adalah berisi angka. Akan tetapi, komputer tidak hanya memproses angka saja, ‎akan tetapi, selain angka variabel juga mampu menyimpan banyak sekali tipe data. Bahkan, untuk jenis ‎angka, C# mendukung tiga buah jenis:

  • Ketika kita sedang menulis sebuah program, yang mengharuskan di sana bilangan yang ‎tidak boleh dibagi (bilangan bulat), seperti halnya populasi siswa di sebuah sekolah, ‎atau lain-lain, C# menawarkan kepada kita apa yang disebut sebagai "integer." ‎Mustahil kan ada siswa hidup yang hanya ada badannya saja, atau tangannya saja?‎
  • Ketika kita sedang menulis sebuah program yang menangani masalah keuangan (yang ‎sering digunakan di dalam industri), kita harus menggunakan angka-angka dengan ‎jumlah angka yang panjang, mungkin mencapai triliunan. Bahasa C# menawarkan ‎kepada kita apa yang disebut sebagai "decimal."‎
  • Ketika kita sedang menulis sebuah program yang digunakan untuk menghitung hal-hal ‎yang ilmiah, seperti rumus relativitas dan fisika kuantum, mungkin kita membutuhkan ‎bilangan yang berkoma dan berpangkat yang direpresentasikan dalam bentuk notasi ‎ilmiah (mantissa dan exponent). Dalam C#, bilangan seperti itu dinamakan juga dengan ‎floating point number, yang direpresentasikan dengan menggunakan kata kunci ‎‎"float."‎

Kita bisa menggabungkan tiga buah jenis bilangan di atas di dalam sebuah program. Untuk ‎sekarang, kita akan mempelajari mengenai bilangan bulat (integer), yang dapat berupa bilangan bulat ‎positif atau bilangan bulat negatif.

Deklarasi Variabel

sunting

Kita dapat menginformasikan kepada kompiler mengenai jenis variabel tertentu pada saat ‎mendeklarasikan variabel, dengan menggunakan pernyataan deklarasi (declaration statement). Dalam ‎pernyataan deklarasi, kita harus menentukan jenis dari variabel yang kita buat. Sebuah variabel tertentu ‎hanya dapat dideklarasikan satu kali saja, tidak lebih! ‎ Bahasa C#, seperti halnya Bahasa C dan C++ atau Java, menggunakan kata int untuk merujuk ‎kepada bilangan bulat (integer). Baris berikut merupakan contoh pendeklarasian variabel bertipe data ‎bilangan bulat (dengan nama JumlahHariIzin): ‎

 int JumlahHariIzin;

Pernyataan deklarasi akan menentukan jenis variabel tersebut, yang harus berada di sebelah kiri ‎nama variabel yang sedang dideklarasikan. Kita mungkin bisa menyebut pernyataan di atas dengan ‎sebutan "Variabel JumlahHariIzin hanya bisa menampung bilangan bulat."‎

Seperti yang telah dijelaskan, bahwa kata int tidaklah bisa digunakan sebagai nama variabel, ‎akan tetapi harus diingat, karena C# merupakan sebuah bahasa yang bersifat case-sensitive, kita bisa ‎menggunakan kata Int, iNT, atau INT sebagai nama variabel.

Saat program C# dijalankan, pernyataan deklarasi tersebut akan menyebabkan komputer untuk ‎mengalokasikan sebagian kecil dari memori untuk ditempati oleh nilai dari variabel yang dideklarasikan ‎tersebut, jika memang variabel tersebut telah berisi nilai. Jika memang belum berisi nilai, maka nilainya ‎adalah kosong.‎

int JumlahHariIzin;
int JumlahHariAlfa;
int JumlahHariSakit;
int TotalAbsensi;

JumlahHariIzin = 10;
JumlahHariAlfa = 2;
JumlahHariSakit = 10;

TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

Baris kelima (yang kosong) tidaklah harus ada, karena memang saya membuatnya untuk membuat ‎program C# kita lebih enak untuk dilihat, dan juga untuk membedakan antara deklarasi variabel dengan ‎pemberian nilai terhadapnya.‎

Daripada membuat empat baris seperti di atas, kita juga bisa mendeklarasikannya dengan ‎menggunakan satu baris saja, seperti:‎

int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit, TotalAbsensi;

Meski lebih sederhana dilihat, bentuk di atas ekuivalen dengan bentuk empat baris di atas. Ketika ‎ada variabel lebih dari satu dideklarasikan pada satu baris deklarasi, kita harus menggunakan koma untuk ‎memisahkan antar variabel. Selain itu, semua variabel yang dideklarasikan harus memiliki tipe data yang ‎sama. ‎ Ada beberapa cara untuk menulis deklarasi variabel. Variabel-variabel tersebut tidaklah harus ‎dideklarasikan dengan urutan yang sama dengan ketika kita memanggilnya. Kode-kode seperti di bawah ‎ini adalah ekuivalen dengan bentuk di atas:‎

int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit, TotalAbsensi;

JumlahHariIzin = 10;
JumlahHariAlfa = 2;
JumlahHariSakit = 10;

TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

Kita juga bisa mendeklarasikan beberapa variabel secara berbarengan di dalam sebuah statemen ‎deklarasi, dan mendeklarasikan variabel lainnya di dalam pernyataannya sendiri-sendiri:‎

int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit;
int TotalAbsensi;

JumlahHariIzin = 10;
JumlahHariAlfa = 2;
JumlahHariSakit = 10;

TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

Kita juga bisa mendeklarasikan variabel ketika kita membutuhkannya, seperti di bawah ini:‎

int JumlahHariIzin;
JumlahHariIzin = 10;

int JumlahHariAlfa;
JumlahHariAlfa = 2;

int JumlahHariSakit;
JumlahHariSakit = 10;

int TotalAbsensi;
TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

Nah, di sinilah perbedaan antara pernyataan deklarasi variabel dan pemberian nilai terhadapnya. ‎Satu-satunya peraturan yang harus ditaati adalah, bahwa "setiap variabel harus dideklarasikan sebelum ‎variabel tersebut digunakan."‎

Kita juga bisa mendeklarasikan variabel dengan sebuah nilai yang telah ditetapkan untuknya ‎pada saat mendeklarasikannya. Mungkin, pada awalnya, kita melihat bahwa kode di bawah ini merupakan ‎sebuah pernyataan penugasan, tetapi sebenarnya statemen deklarasi:‎

int JumlahHariIzin = 10;

Inisialisasi variabel

sunting

Pada saat sebuah variabel diberi nilai pada saat deklarasinya, maka variabel tersebut dikatakan ‎‎"melakukan inisialisasi" (initialization). Tentu saja, setelah inisialisasi dilakukan, kita bisa mengubah ‎nilainya dengan nilai yang berbeda di lain waktu, karena memang tidak ada bedanya antara melakukan ‎inisialisasi variabel pada saat deklarasi di dalam pernyataan deklarasi dengan menetapkan sebuah nilai ‎kepada sebuah variabel sesaat setelah pernyataan deklarasi dilakukan.‎

int JumlahHariIzin;
JumlahHariIzin = 10;

Antara saat sebuah variabel dideklarasikan dan saat variabel tersebut memiliki nilai, variabel ‎tersebut dikatakan sedang "dibongkar" atau mengalami "uninitialization." Variabel tersebut tidaklah ‎memiliki nilai, atau bahkan ia mungkin memiliki beberapa nilai yang acak. Kompiler C# tidak akan ‎mengizinkan kita untuk menggunakan variabel yang belum diinisialisasi. Sebagai contoh, perhatikan ‎pernyataan-pernyataan berikut

int JumlahHariIzin;
int JumlahHariAlfa;
int JumlahHariSakit;
int TotalAbsensi;

TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

Mengingat variabel-variabel JumlahHariIzin, JumlahHariAlfa, dan JumlahHariSakit belum ‎diberi nilai, sehingga kita tidak dapat menggunakannya untuk menghitung nilai TotalAbsensi. ‎ Pada pernyataan deklarasi satu baris, kita dapat memilih untuk melakukan inisialisasi terhadap ‎beberapa variabel untuk tidak melakukannya pada beberapa variabel, dengan memisahkan setiap variabel ‎dengan menggunakan karakter koma, seperti di bawah ini:‎

int JumlahHariIzin = 10, JumlahHariAlfa, JumlahHariSakit, TotalAbsensi;
TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

Kita juga bahkan bisa memberikan nilai terhadap semua variabel secara sekaligus pada saat ‎melakukan deklarasi variabel, seperti di bawah ini:‎

int JumlahHariIzin = 10, JumlahHariAlfa = 2, JumlahHariSakit = 10, TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

Inisialisasi yang dilakukan terhadap variabel TotalAbsensi dilakukan dengan menggunakan ekspresi yang ‎melibatkan tiga variabel lainnya yang telah diinisialisasikan sebelumnya. Pada kasus ini, variabel ‎TotalAbsensi harus dideklarasikan dan diinisialisasi setelah variabel-variabel JumlahHariIzin, ‎JumlahHariAlfa, dan JumlahHariSakit dideklarasikan dan diinisialisasikan. ‎ Meskipun bentuk di atas lebih sederhana, pernyataan-pernyataan di atas lebih rumit untuk ‎dibaca, apalagi oleh orang selain kita. Maka, pada umumnya para programmer menggunakan cara ‎konvensional, dengan memisahkan deklarasi dan inisialisasi setiap variabel pada satu baris masing-‎masing, sebagai berikut agar lebih jelas:‎

int JumlahHariIzin=10;
int JumlahHariAlfa=2;
int JumlahHariSakit=10;

int TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

Method (metode)

sunting

‎ Sampai di sini, apakah program C# di atas merupakan kode yang lengkap? Sayangnya, belum! ‎Dalam C#, seperti halnya di dalam sebagian besar bahasa pemrograman modern lainnya, kode disusun ‎sedemikian rupa ke dalam satuan yang disebut dengan kelas (class) dan metode (method). Setiap metode ‎mengandung kode yang mampu melakukan beberapa tugas tertentu. Mungkin, jika Anda pernah ‎mempelajari bahasa pemrograman lainnya, istilah metode ini ekuivalen dengan prosedur (procedure), ‎subrutin (subroutine) atau fungsi (function). Metode-metode yang saling berhubungan dapat ‎dikelompokkan ke dalam sebuah kelas.

‎Program paling sederhana di dalam C# adalah program yang hanya memiliki satu buah kelas yang ‎mengandung satu buah metode. Paling tidak, sebuah program dalam C# harus memiliki sebuah metode ‎yang disebut dengan Main(). Metode Main() merupakan sebuah metode yang selalu dijalankan oleh ‎komputer pertama kali ketika program tersebut dijalankan oleh pengguna. Jika Anda pernah mempelajari ‎bahasa pemrograman lain sebelumnya, mungkin Anda pernah mengenal istilah "Entry Point". Metode ‎Main() adalah Entry Point di dalam C#! Untuk program-program yang sangat pendek, metode Main() ‎kadang-kadang merupakan metode yang terdapat di dalam program yang bersangkutan. Meskipun Main ‎memiliki peranan yang sangat besar di dalam bahasa C#, kata "Main" sendiri bukanlah kata kunci di dalam ‎C#. Karena bukan kata kunci, maka kita bisa memberikan nama variabel menjadi Main, jika mau.

Bagaimana mendeklarasikan metode?

sunting

Seperti halnya variabel, Main harus dideklarasikan di dalam program. Pendeklarasian metode ‎memang sedikit lebih rumit dibandingkan dengan pendeklarasian variabel, karena memang ada beberapa ‎hal yang terlibat di dalamnya. ‎

Metode pada umumnya memiliki input dan output. Sebagai contoh, sebuah metode yang ‎menghitung jumlah absensi siswa, inputnya adalah jumlah harian di mana siswa yang bersangkutan tidak ‎masuk kelas, dan outputnya adalah total jumlah absensi milik siswa tersebut. Metode dapat kita ‎bayangkan sebagai sebuah "pabrik" yang mengubah bahan baku menjadi barang jadi. Pada umumnya, ‎sebuah metode menerima input dalam bentuk beberapa variabel, yang disebut sebagai parameter ‎metode (method parameter). Nah, metode tersebut kemudian akan mengubah variabel-variabel tersebut ‎sedemikian rupa lalu mengeluarkan hasilnya sebagai output, yang disebut nilai kembalian (return value). ‎ Kita saat ini akan membahas bagaimana mendeklarasikan sebuah metode sederhana, yang selalu ‎ada di dalam setiap program C#, Main, tanpa penggunaan parameter dan nilai kembalian. Sedangkan ‎bagaimana penggunaan parameter dan nilai kembaliannya nanti akan dibahas kemudian.‎

Main

Perlu diingat, karena bahasa C# merupakan sebuah bahasa pemrograman yang bersifat case-‎sensitive, maka antara Main, MAIN, dan main adalah berbeda. Metode Main harus dimulai dengan huruf M ‎besar. ‎ Normalnya, parameter metode diindikasikan dengan sebuah daftar variabel yang dikurung di ‎dalam sepasang tanda kurung buka ( dan tanda kurung tutup ) setelah nama metode tersebut ‎dideklarasikan. Karena versi metode Main kita kali ini tidak memiliki parameter dan juga nilai ‎kembaliannya, maka kata "Main" akan diikuti dengan menggunakan tanda kurung buka dan kurung tutup ‎tanpa isi, seperti di bawah ini:‎

Main()

Saat sebuah metode memiliki nilai kembalian, tipe data dari nilai tersebut (seperti halnya int) ‎harus ditambahkan di sebelah kiri nama metode pada saat deklarasi metode. Akan tetapi, saat metode ‎tersebut tidak memiliki nilai kembalian, maka kita harus menggunakan kata kunci void untuk menyatakan ‎bahwa metode tersebut memang tidak memiliki nilai kembalian.‎

void Main()

Lantas, apa bedanya pendeklarasian variabel dengan pendeklarasian metode? Secara sekilas ‎memang tidak ada perbedaan antara pendeklarasian variabel dengan pendeklarasian metode. Akan ‎tetapi, jika pada pendeklarasian variabel, jenis variabel adalah hal yang ditulis sebelum nama variabel, ‎pada pendeklarasian metode, jenis nilai kembalian adalah hal yang ditulis sebelum nama metode. Di situ ‎adalah perbedaannya! ‎ Apakah dengan menggunakan void Main() sudah membentuk sebuah metode yang sempurna? ‎Masih belum! Kita harus menambahkan kata kunci static, seperti di bawah ini:‎

static void Main()

Buat apa sih kata kunci static? Untuk menjawabnya, sayangnya, hal tersebut melibatkan ‎beberapa konsep yang berada di luar jangkauan konsep dasar (karena memang bab ini merupakan bab ‎yang dikhususkan untuk pengenalan konsep dasar maka hal tersebut tidak akan dibahas saat ini). Untuk ‎sekarang, kita bisa memikirkan kata kunci static sebagai pernyataan bahwa metode tersebut berdiri ‎sendiri (mandiri), dan bersifat tetap serta tidak berubah-ubah selama eksekusi program dilakukan. ‎ Deklarasi sebuah metode juga memasukkan tubuh metode tersebut, yang merupakan kode ‎aktual yang membangun metode tersebut. Tubuh metode akan diapit dengan menggunakan sepasang ‎tanda kurung keriting buka { dan tanda kurung keriting tutup } yang mengikuti daftar parameter, seperti di ‎bawah ini:‎

static void Main()
{

}

Saya memang meletakkan tanda kurung keriting dalam dua baris berbeda, karena memang hal ‎itu merupakan suka-suka! Karena C# merupakan bahasa dengan bentuk penulisan yang bebas, kita juga ‎bisa menuliskannya di dalam baris yang sama, seperti:‎

static void Main()
{}

atau:‎

static void Main(){}

Nah, sekarang kita bisa menambahkan kode-kode dan algoritme ke dalam metode tersebut. ‎Marilah kita mencoba memasukkan pernyataan-pernyataan sebelumnya ke dalam metode Main:‎

static void Main()
{
int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit;
int TotalAbsensi;

JumlahHariIzin = 10;
JumlahHariAlfa= 2;
JumlahHariSakit = 10;
TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;
}

Sekelompok statemen-statemen C# yang diapit dengan menggunakan kurung keriting seperti di ‎atas kadang disebut sebagai blok program (program block). Sehingga, jika kita mengambil kaidah dari ‎contoh di atas, kita bisa merumuskan bahwa dalam pendeklarasian metode, terdapat beberapa hal yang ‎terlibat, mulai dari modifier (yang dinyatakan dengan kata kunci static), jenis nilai kembaliannya (yang ‎dinyatakan dengan kata kunci void), nama metodenya (Main), daftar parameter yang berada di dalam ‎kurung (), dan juga blok program yang mengandung kode program dalam bahasa C#. ‎ Sebagian besar programmer menulis program tidak seperti di atas, tetapi menjorokkan ke dalam ‎satu tabulasi, seperti di bawah ini:‎

static void Main()
{
     int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit;
     int TotalAbsensi;

     JumlahHariIzin = 10;
     JumlahHariAlfa= 2;
     JumlahHariSakit = 10;
     TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;
}

Apa yang dilakukan programmer di atas terhadap blok kode C# membuat metode tersebut ‎terlihat lebih mudah untuk dibaca, dan juga menandakan bahwa pernyataan-pernyataan tersebut berada ‎di dalam metode. Penggunaan berapa banyak spasi atau tabulasi adalah "terserah Anda!", meskipun ‎memang sebagian besar programmer menggunakan 1 tabulasi. Microsoft Visual Studio dan Microsoft Visual C# Express Edition, pada kondisi ‎bakunya memiliki konfigurasi 1 tabulasi setara dengan 4 spasi (Anda bisa mengubahnya lho). Sementara ‎itu, kode yang ada di buku ini menggunakan empat buah spasi. ‎ Beberapa programmer juga sering menulis kurung keriting buka pada baris yang sama dengan ‎deklarasi metode, seperti:‎

static void Main(){
     int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit; 
     int TotalAbsensi;

     JumlahHariIzin = 10;
     JumlahHariAlfa= 2;
     JumlahHariSakit = 10; 
     TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;
}

Banyak programmer yang familier dengan bahasa Pascal, C dan C++ menggunakan bentuk kode ‎seperti di bawah ini:‎

static void Main()
    { 
    int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit;
    int TotalAbsensi;

    JumlahHariIzin = 10;
    JumlahHariAlfa= 2;
    JumlahHariSakit = 10;

    TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;
    }

Atau, mereka juga sering menggunakan dua spasi untuk menjorokkan blok kode, seperti di ‎bawah ini:

static void Main()
    {
      int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit; 
      int TotalAbsensi;

      JumlahHariIzin = 10;
      JumlahHariAlfa= 2;
      JumlahHariSakit = 10;

      TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;
    }

Cara apapun yang kita gunakan dalam mengetik blok kode C#, kompiler C# tidak akan melihat ‎bagaimana gaya kita menjorokkan blok kode. Terserah Anda mau menulis seperti apa, asalkan memang ‎ada konsistensi dalam menulis kode, agar mata yang melihat tidak “capek”.‎

Kelas (class)

sunting

Sudah sampai di sini, apakah kode di atas bisa dibilang lengkap? Sayangnya, masih belum ‎lengkap! Di dalam C#, semua metode harus tergabung ke dalam sebuah kelas program (class) atau ‎struktur program (structure). Kelas dan struktur agak-agak mirip, sehingga, sampai kita belajar letak ‎perbedaan di antara keduanya, anggap saja bahwa kelas dan struktur adalah sama, dan apa yang saya bilang ‎mengenai kelas juga bisa diaplikasikan ke dalam struktur.

Dalam pemrograman berorientasi objek seperti halnya C#, sebuah kelas adalah unit organisasi ‎dasar yang terdiri atas kode dan data. Semuanya akan tersibak ketika kita terus belajar mengikuti ‎rentetan artikel di dalam kumpulan artikel ini. Hanya saja, yang perlu diingat adalah sebuah program C# ‎paling tidak haruslah terdiri atas satu kelas atau lebih, yang setiap kelasnya bisa berisi satu anggota (yang ‎disebut dengan member) atau lebih, termasuk di antaranya adalah metode semacam Main.

Program C# paling sederhana, tetapi lengkap akan terdiri atas sebuah kelas yang mengandung ‎satu anggota, yang berupa metode dengan nama Main.‎

Bagaimana mendeklarasikan Kelas?

sunting

Deklarasi Kelas dilakukan dengan menggunakan kata kunci class yang diikuti nama dari kelas ‎yang hendak dibuat, seperti di bawah ini:‎

class Program

Peraturan yang digunakan untuk membuat kelas sama saja dengan peraturan yang dimiliki oleh ‎nama-nama variabel. Nama variabel dan nama kelas dikenal juga dengan sebutan identifier (tanda ‎pengenal), yang tentunya harus ditentukan oleh kita. Semua identifier harus dimulai dengan huruf atau karakter ‎garis bawah dan harus mengandung hanya huruf, angka, dan karakter garis bawah saja. Meski demikian, ‎kita tidak bisa menggunakan kata-kata kunci sebagai nama identifier. Walaupun Main bukanlah sebuah ‎kata kunci di dalam C#, kita tidak dapat menggunakan Main sebagai nama kelas, jika memang di dalam ‎kelas yang bersangkutan memiliki metode dengan nama Main. ‎ Pendeklarasian kelas juga mengharuskan kita untuk menggunakan kurung keriting buka { dan ‎kurung keriting tutup } seperti di bawah ini:‎

class Program
    {

    }

Di antara kurung keriting tersebut, kita bisa memasukkan metode-metode yang hendak kita buat, ‎termasuk di antaranya adalah Main yang telah kita buat sebelumnya. Terserah Anda, jika ingin merapikan ‎penulisan blok-blok kode program milik member dari kelas tersebut dengan menjorokkannya ke kanan:

class Program
{
     static void Main()
     {
       int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit;
       int TotalAbsensi;

       JumlahHariIzin = 10;
       JumlahHariAlfa = 2;
       JumlahHariSakit = 10;

       TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;
    }
}

Dan, akhirnya kode di atas merupakan kode dalam bahasa C# yang lengkap. Bagaimana cara ‎membaca kode di atas? Kode tersebut hanya mengandung satu buah kelas, yang diberi nama Program. ‎Kelas Program tersebut memiliki satu buah metode yang disebut dengan Main. Metode Main ‎mendeklarasikan empat buah variabel dengan jenis data bilangan bulat. Program tersebut terdiri atas ‎empat buah statemen penugasan.‎

Edit, Compile, Run

sunting

Sebuah program komputer memulai hidupnya sebagai berkas teks yang ditulis oleh kita, para (calon) programmer. Berkas teks tersebut umumnya disebut dengan kode sumber (source code). Kode sumber program dalam bahasa pemrograman C# menurut konvensi, merupakan sebuah berkas teks dengan ekstensi *.CS (singkatan dari C Sharp). Sebuah program juga bisa terdiri atas satu berkas kode sumber atau bahkan lebih dari satu (dan ini merupakan hal yang paling sering dilakukan).

Setelah kita membuat berkas kode sumber, baik itu satu berkas atau beberapa berkas, kita harus melakukan kompilasi terhadapnya dengan menjalankan program yang disebut dengan kompiler atau kompilator (complier). Kompiler bahasa C# adalah sebuah program yang terkandung di dalam Microsoft .NET Framework yang dapat membaca kode sumber yang kita buat dan akan mengubah kode sumber kita ke dalam bahasa yang dimengerti oleh komputer, yang di dalam .NET Framework disebut dengan Microsoft Intermediate Language (MSIL), yang pada umumnya dalam bentuk berkas biner dengan ekstensi *.EXE (singkatan dari Executable).

Kompiler C# akan mencoba membaca kode sumber yang kita buat, dan jika memang ia menemukan sebuah masalah dengan kode sumber yang kita buat, maka ia akan memberitahukan kepada kita mengenai masalah tersebut dan mungkin bagaimana cara mengatasi masalah tersebut. Masalah-masalah pengetikan yang salah atau kesalahan lainnya yang terjadi saat kompilasi, umumnya disebut dengan kesalahan sintaksis (syntax error) atau kesalahan waktu kompilasi (compile-time error). Jika kompiler melaporkan adanya kesalahan, kita harus menyunting ulang kode sumber kita untuk mengoreksi kesalahan tersebut. Kadang-kadang, compile-time error juga dipanggil dengan sebutan compiler error, seolah-olah kompiler merupakan pihak yang salah, bukannya kita sebagai programmer yang salah. Meskipun memang, kompiler juga sering melakukan kesalahan dalam melakukan kompilasi, hal yang paling sering terjadi adalah kompiler menemukan kesalahan yang kita buat dalam kode kita.

Setelah pada akhirnya kita dapat "membujuk" kompiler agar membuatkan berkas *.EXE dari kode sumber program kita, kita dapat menjalankan program tersebut. Pada saat dijalankan, program tersebut berada di dalam kendali sistem operasi, dan karena bahasa C# merupakan salah satu anggota dari bahasa .NET Framework, program yang dibangun dengan menggunakan C# dijalankan dengan menggunakan Common Language Runtime (CLR) yang tergabung ke dalam .NET Framework.

Sistem operasi atau CLR akan mencoba menjalankan program yang kita buat, akan tetapi mungkin saja program yang kita buat tidak mampu melakukan apa yang kita harapkan dengan sempurna. Kadang-kadang, kode yang kita buat itu mencoba untuk melakukan hal-hal yang tidak diperbolehkan (seperti mengakses area memori yang tidak dimiliki olehnya). Akhirnya, program tersebut pun mengalami kesalahan saat berjalan, dan CLR atau sistem operasi akan memberikan laporan kesalahan dengan menggunakan sebuah kotak dialog. Masalah-masalah yang terjadi saat program dijalankan, disebut dengan runtime error atau exception. Karena berkas EXE merupakan berkas biner yang sulit untuk dilihat dengan menggunakan editor teks biasa, maka untuk mengoreksinya kita harus membuka kembali berkas kode sumber yang membentuk berkas EXE yang bersangkutan.

Keseluruhan proses di atas, dikenal juga dengan sebutan Edit-Compile-Run, dan merupakan bagian yang sering dilakukan dalam rangka membuat dan mengembangkan program. Semua program, kecuali program-program yang kecil, melalui beberapa kali proses Edit-Compile-Run sebelum akhirnya selesai dan dapat dipublikasikan. Ketika menulis program yang besar, saya seringnya melakukan proses tersebut secepat mungkin, untuk mengetahui apakah program yang masih belum besar tersebut benar-benar berjalan dengan sempurna atau tidak.

Nah, ketika kita akhirnya melihat bahwa program yang kita buat terkesan baik-baik saja tanpa ada yang "mencurigakan", ada satu tugas lagi yang menunggu kita, yaitu pengujian. Mungkin, kita akan menemukan bahwa program yang kita buat masih tidak berjalan dengan benar. Masalah di dalam program yang sudah jadi ini, disebut dengan istilah "bug." Menemukan bug sama seperti mencari kecoa di kamar kita, kadang-kadang gampang, kadang-kadang sulit, tetapi kesulitan merupakan hal yang sering dialami oleh para programmer. Sebuah ilmu khusus dibutuhkan untuk mencari, menemukan, dan mengoreksi bug dalam program, yang disebut dengan debugging. Sayangnya, karena debugging merupakan topik tingkat lanjut, hal itu (mungkin) tidak akan diulas di kumpulan artikel ini.

Alat bantu Edit-Compile-Run

sunting

Seperti yang telah disebutkan di dalam beberapa bab pendahuluan, kita memiliki segudang cara untuk melakukan Edit-Compile-Run terhadap program C# yang kita buat. Mulai dari mengetiknya secara manual dengan menggunakan Notepad hingga menggunakan alat bantu khusus yang didesain untuk melakukannya. Cara paling enak yang dapat digunakan adalah menggunakan Microsoft Visual Studio (jika memang Anda punya uang untuk membeli lisensinya) atau Microsoft Visual C# Express Edition (yang gratis). Jika memang Anda tidak punya uang untuk membeli lisensinya, mungkin Anda bisa mencoba program Sharp Develop (#develop) yang dikembangkan oleh komunitas open-source dan juga Eclipse dengan plug-in yang didesain khusus untuk melakukan Edit-Compile-Run terhadap program C# kita. Meskipun mahal, saya menyarankan Microsoft Visual C# dan Microsoft Visual Studio, karena memang menawarkan beberapa hal yang tidak dimiliki oleh beberapa program lainnya.

Di dalam Visual C# dan Visual Studio, program yang kita buat dinamakan dengan Project. Sebuah Project dapat mengandung satu berkas teks berisi kode sumber atau lebih. Sebuah Project harus diberi nama yang, tidak seperti nama identifier, bersifat case-insensitive. Nama Project yang kita tentukan ini nantinya akan digunakan sebagai nama berkas EXE yang akan dibentuk oleh kompiler. Sebagai contoh, ketika kita menggunakan nama Program sebagai nama Project yang kita buat, maka hasilnya adalah PROGRAM.EXE.

Penggunaan alat bantu pemrograman C# memang adalah hak Anda untuk memilih, mana menurut Anda lebih baik, mengingat setiap produk memiliki kelebihan dan kekurangannya masing-masing. Akan tetapi setiap alat bantu tersebut menawarkan editor kode sumber yang mampu memberikan warna masing-masing terhadap kode sumber yang kita tuliskan, sehingga nanti terlihat jelas sintaksis-sintaksisnya dan lebih mudah dalam membaca kodenya.

Coba Anda ketikkan kode di bawah ini di dalam alat bantu pemrograman yang Anda gunakan, dan simpan di dalam nama “Program01.cs”:

class Programku
{
    static void Main()
    {
        int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit;
        int TotalAbsensi;

        JumlahHariIzin = 10;
        JumlahHariGhaib = 2;
        JumlahHariSakit = 10;

        TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;
    }
}

Anda harus menekan tombol Enter untuk mengganti setiap baris di atas. Jika Anda menggunakan editor teks biasa seperti Notepad, Anda mungkin tidak akan mengenali kata-kata kunci di dalam C# yang digunakan di dalam kode sumber program di atas. Akan tetapi, ketika Anda menggunakan alat-alat bantu yang telah saya sebutkan di atas, Anda akan menyadari bahwa alat tersebut dilengkapi dengan fitur pemberian warna terhadap kata-kata kunci C# (dan semua bahasa yang didukung oleh editor tersebut), yang dinamakan dengan syntax highlighting. Jika kita cermati, editor tersebut akan menggunakan warna-warna berbeda untuk setiap komponen di dalam program di atas. Sebagai contoh, di dalam editor Microsoft Visual C#, editor akan menampilkan semua kata kunci dengan warna biru, dan baris pertama dan kedua yang diawali dengan dua karakter garis miring atau double-slash(//) diberi warna hijau.

Ketika Anda telah mengetik kode di atas, proses selanjutnya adalah melakukan kompilasi terhadap kode sumber agar dibuat menjadi program yang dapat dieksekusi oleh komputer. Jika Anda menginginkan kesederhanaan tanpa alat bantu pemrograman seperti yang disebutkan di atas, Anda harus melakukan kompilasi secara manual dengan menggunakan program kompiler C#, yang diletakkan di dalam direktori C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705 (untuk .NET Framework 1.0), C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 (untuk .NET Framework 1.1), atau C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 (untuk .NET Framework 2.0), menggunakan baris perintah yang "merepotkan". Anda harus membuka Microsoft Command Prompt (C:\Windows\System32\cmd.exe) dan memasukkan perintah seperti di bawah ini:

C:\>csc Program01.cs

yang kemudian akan menampilkan pesan dari pembuat kompiler:

 

yang kemudian akan mengubah kode sumber di atas menjadi program siap guna. Akan tetapi, jika Anda menggunakan alat-alat bantu pemrograman seperti disebutkan di atas, Anda dapat melakukannya secara lebih mudah. Penggunaan alat bantu pemrograman hanya membutuhkan satu langkah saja yang harus dilakukan, yakni menekan menu Build Solution atau Build Program. Semua hal yang berkaitan dengan Edit-Compile-Run dilakukan secara langsung oleh alat bantu tersebut, dengan sedikit intervensi dari kita. Jika memang terjadi kesalahan pada saat kompilasi, maka kesalahan-kesalahan tersebut akan ditampilkan dalam jendela Error List di bawah editor teks. Anda bisa menuju ke lokasi di mana kesalahan tersebut berada dengan mengklik ganda pada sebuah entri di dalam jendela Error List tersebut.

Saat Anda menjalankan program yang Anda buat, maka sebuah jendela console akan keluar. Judul yang digunakan oleh jendela console tersebut adalah nama berkas yang digunakan oleh proyek Anda. Setelah itu, ada sebuah baris yang berbunyi:

Press any key to continue

yang berarti bahwa program tersebut telah selesai berjalan. Mengapa kok belum keluar output apa-apa, program saya langsung selesai dieksekusi? Itu memang karena di dalam kode program tersebut tidak diberi sebuah perintah untuk menampilkan bagaimana hasil dari program tersebut—kita hanya menyuruh komputer agar menjalankan instruksi penjumlahan saja, tidak lebih dan tidak kurang. Kembali ke layar program yang Anda buat tadi, saat Anda menekan tombol apapun dari keyboard, jendela tersebut akan "dihancurkan."

Metode apapun yang kita gunakan untuk melakukan kompilasi program yang kita buat, mungkin kita akan menghabiskan waktu dalam rangka melakukan eksperimen terhadap kode kita dan mencoba-coba banyak hal—dengan kata lain menggunakan metode circle-back. Eksperimen merupakan aktivitas yang sangat penting—mungkin bisa dibilang paling penting—dalam melakukan pemrograman, dan juga ketika belajar bahasa pemrograman. Yang "menyenangkan" dalam eksperimen di bidang komputer adalah eksperimen bisa dilakukan oleh siapa saja dengan mudah dan aman, tidak seperti eksperimen kimia, fisika, atau biologi. Kita tidak bakal membakar rumah kita saat melakukan eksperimen dengan komputer. Sebagai contoh eksperimen kita yang pertama, coba kita hapus salah satu statemen penugasan dari program kita yang pertama. Lihat apa yang terjadi jika satu variabel, seperti halnya JumlahHariIzin atau JumlahHariAlfa dihapuskan oleh kita dan menjadikannya tidak memiliki nilai sama sekali. Dengan melakukan eksperimen seperti ini, kita mungkin akan terbiasa dengan pesan kesalahan yang datang dari kompiler dan akhirnya mengetahui apa sih penyebabnya. Kita juga bisa membuang statemen penugasan yang menghitung nilai TotalAbsensi. Hal itu memang tidak membuat kesalahan, akan tetapi coba perhatikan apa yang dikatakan oleh kompiler C#?

Coba ganti kata class dengan kata struct (yang merupakan singkatan dari kata structure) di dalam kode sumber program. Program yang kita buat mungkin terlihat akan bekerja dengan normal, dan tidak ada perbedaan dengan ketika kita menggunakan kata kunci class. Padahal, di antara class dan struct, terdapat perbedaan yang sangat besar, dan memahami perbedaan tersebut, merupakan salah satu aspek terpenting dalam belajar bahasa pemrograman berorientasi objek seperti halnya bahasa C#.

Input dan Output

sunting

Pada saat-saat awal pengembangan program kita, kita hanyalah pengguna program tersebut, dan peranan kita pun berganti-ganti antara pengguna, penguji dan programmer. Program yang kita buat haruslah memiliki beberapa cara untuk menampilkan output bagi pengguna, dan juga mampu menerima input dari mereka. Kedua hal tersebut dinamakan juga dengan I/O atau Input dan Output.

Metode untuk melakukannya, yang sering disebut dengan model I/O, berbeda-beda antar program, tergantung cara kerja program tersebut. Program yang berjalan di atas sistem operasi Windows akan menerima input dari pengguna dengan menggunakan keyboard, mouse, dan beberapa kontrol lainnya (seperti halnya tombol dalam layar dan baris gulung/scroll bar). Program-program Windows menampilkan output kepada pengguna dalam bentuk teks dan grafik-grafik berwarna. Akan tetapi, program yang dimiliki di dalam perangkat lainnya, seperti di dalam oven microwave atau kulkas yang ada komputer digital di dalamnya, pasti memiliki model I/O yang sangat berbeda dengan model I/O yang digunakan oleh program Windows. Alat input yang digunakan mungkin hanya beberapa buah tombol saja yang diletakkan di panel depan, sementara alat outputnya adalah perangkat yang mampu mematikan atau menyalakan oven microwave, menyalakan lampu dan mematikannya, dan masih banyak lagi yang lainnya.

Seperti halnya bahasa C, bahasa C# tidak mengandung sesuatu yang spesifik yang mendukung I/O dengan pengguna. Mungkin, hal ini terdengar seperti sebuah kekurangan, akan tetapi sebenarnya bukan merupakan sebuah kekurangan. Mungkin, lebih tepatnya, C# dapat dikatakan tidak memiliki model I/O tertentu yang harus digunakan oleh programmer. Dan tugas Andalah (sebagai calon programmer) untuk memilih I/O yang hendak digunakan oleh program buatan Anda!

Meskipun demikian, untuk membangun program, baik itu program Windows, program Web, ataupun aplikasi console, kita dapat menggunakan kelas yang didefinisikan di dalam .NET Framework. Untuk menjelajahi kelas-kelas tersebut, mau tidak mau, kita harus mau membaca dokumentasi .NET Framework, yang bisa didapatkan secara online (melalui MSDN Library) ataupun secara offline (dengan menginstalasikan MSDN Library ke dalam komputer kita). Dengan membuka entri Class Library, kita dapat memperoleh informasi mengenai kelas-kelas yang disediakan oleh Microsoft .NET Framework.

Sekarang, yang harus Anda lakukan adalah "jangan merinding" melihat daftar yang sangat panjang yang muncul di dalam MSDN library. Sebagian besar hal yang terdapat di sana mungkin tidak akan kita gunakan di dalam program kita. Apa yang kita lihat di sini merupakan daftar ruang nama (dalam C# disebut juga dengan nama namespace), yang bertugas untuk membagi kelas-kelas .NET ke dalam beberapa kelompok fungsional tertentu. Ruang nama yang memiliki sebagian besar kelas dasar adalah ruang nama yang disebut sebagai System. Di dalam ruang nama tersebut, kita akan menemukan kelas Console, dan di dalam kelas Console terdapat metode-metode yang dapat digunakan oleh program yang kita buat untuk membaca input dari pengguna dengan menggunakan console dan menampilkan output kepada pengguna. Nah, itulah yang akan kita gunakan di dalam program di atas.

OKE. Kita mulai dengan output! Untuk menampilkan output ke dalam console, kita dapat menggunakan dua metode yang memiliki nama System.Console.Write (yang dapat dibaca "System dot Console dot Write") dan juga System.Console.WriteLine.

Sebagai contoh, untuk menampilkan nilai dari variabel TotalAbsensi kepada pengguna, kita dapat menambahkan baris berikut ke dalam program yang kita bangun dari awal tadi, tepat setelah ada pernyataan penugasan bagi variabel TotalAbsensi:

. . .
System.Console.WriteLine(TotalAbsensi);
. . .

Simpan, lakukan kompilasi ulang terhadap program tersebut, dan jalankan. Sekarang, Anda akan melihat angka keluar ke layar:

22
Press any key to continue.

Jika Anda melihat hasil program seperti di atas, maka program pertama yang Anda buat telah berjalan.

Kita juga bisa mencoba menulis sebagai berikut:

. . . 
System.Console.Write(TotalAbsensi);
. . .

Dalam kasus ini, Anda akan mendapatkan:

22Press any key to continue.

Perbedaan di antara System.Console.Write dan System.Console.WriteLine adalah bahwa WriteLine akan mengganti baris setelah menampilkan hasil output-nya, sementara Write tidak. Metode Write dapat digunakan untuk menampilkan beberapa hal di dalam baris yang sama.

Setiap metode di dalam .NET Framework memiliki tiga buah nama. "WriteLine" adalah nama sebenarnya dari sebuah metode. Tentu kita telah mengetahui, apa itu metode, karena memang kita telah mempelajarinya dari metode Main—meski belum tahu definisinya. Definisi yang umum mengenai sebuah metode adalah koleksi kode yang melakukan sesuatu pekerjaan tertentu. Dalam kasus WriteLine, pekerjaannya adalah untuk menampilkan output program ke dalam layar console.

Nama kedua yakni "Console", adalah apa yang disebut dengan kelas (class). Kita juga tahu apa itu kelas, karena Programku adalah sebuah kelas. Seperti halnya Main yang merupakan sebuah method di dalam kelas Programku, metode WriteLine juga merupakan metode yang terdapat di dalam kelas Console.

Nama terakhir "System", adalah apa yang disebut sebagai ruang nama (namespace). Semua kelas di dalam .NET Framework disusun sedemikian rupa di dalam sebuah namespace yang membagi kelas-kelas tersebut ke dalam sebuah kelompok fungsional tertentu. Mungkin saja di sana ada sebuah namespace lainnya yang memiliki kelas dengan nama Console, dan hal tersebut sah-sah saja!

Dalam buku "The C# Language Specification", sebuah pernyataan seperti di bawah ini

System.Console.Write(TotalAbsensi);

disebut sebagai ekspresi permintaan (invocation expression), tetapi sebagian besar programmer menyebutnya sebagai pemanggilan metode (method call). Program yang kita buat di atas akan memanggil metode WriteLine, yang pada dasarnya akan menangani nilai dari variabel TotalAbsensi, yang harus diapit oleh tanda kurung buka dan kurung tutup setelah nama metode tersebut. Kita juga bisa mengatakan bahwa program kita memberikan variabel TotalAbsensi kepada metode WriteLine untuk diproses, atau kita juga bisa mengatakan bahwa variabel TotalAbsensi adalah argumen yang dimasukkan kepada metode WriteLine.

OKE! Ketika saya menjelaskan mengenai deklarasi metode Main, saya mengatakan bahwa metode Main tidak memiliki parameter input. Deklarasi Main di dalam program kita akan kita ketahui karena memang setelah nama metode, terdapat tanda kurung buka dan tanda kurung tutup.

static void Main()
    {

    }

Kata kunci void yang tertulis di atas menandakan bahwa Main tidak memiliki nilai kembalian (return value).

Dalam kode sumber yang membangun .NET Framework, deklarasi WriteLine mungkin akan berbentuk seperti ini:

namespace System
{
    public sealed class Console
    {
        public static void WriteLine(int value)
        {
            ...
        }
    }
}

Saya mengatakan "mungkin", karena memang kode sumber .NET Framework merupakan hak cipta yang dimiliki oleh Microsoft Corporation, dan orang biasa seperti saya belum pernah melihatnya—dan kalaupun melihatnya saya belum tentu paham. Kode kecil imajiner di atas juga mencakup beberapa kata kunci yang mungkin Anda anggap baru, karena memang baru Anda temukan (seperti kata kunci namespace, public, dan sealed). Tenang saja. Kita akan mendiskusikannya lebih lanjut seiring dengan waktu. Ruang nama System, yang mengandung kelas Console, memiliki banyak sekali kelas-kelas lainnya selain Console; sementara kelas Console, yang mengandung metode WriteLine, memiliki banyak metode lainnya.

Ngomong apa sih, bertele-tele? Yang ingin saya tekankan di dalam paragraf di atas adalah bahwa metode WriteLine dideklarasikan dengan sebuah parameter di dalam kurungan, setelah nama metodenya.

public static void WriteLine(int value)
{
    ...
}

Saat sebuah program menggunakan metode WriteLine, maka program tersebut akan meneruskan argumennya ke dalam metode tersebut. Perhatikan contoh kode di bawah ini:

System.Console.WriteLine(TotalAbsensi);

Saat program memanggil metode WriteLine, parameter value dalam metode WriteLine akan mengambil nilai argumen yang dimasukkan, yakni TotalAbsensi. Metode WriteLine di dalam .NET Framework akan menampilkan variabel value tersebut (yang kini memiliki nilai yang sama dengan nilai variabel TotalAbsensi) ke dalam layar console. Ketika WriteLine telah melakukan apa yang harus dikerjakannya, WriteLine dikatakan mengembalikan kendali kepada program yang memanggilnya, yang kemudian program tersebut melanjutkan eksekusinya.

Saya terus menerus menggunakan istilah "parameter" dan "argumen". Sebenarnya apa sih? Saya mengatakan bahwa metode WriteLine memiliki sebuah parameter yang diberi nama value. Saya juga mengatakan bahwa saat program memanggil metode WriteLine, maka program tersebut akan memasukkan argumen kepada metode tersebut, yang dalam contoh ini adalah TotalAbsensi. Terlihat jelas, bahwa di sana terdapat hubungan yang sangat dekat antara parameter dan argumen—bahkan banyak programmer pun sering menyebut dua hal tersebut seperti dibolak-balik. Akan tetapi, sebagai seorang programmer yang handal (amin), kita jangan mengikuti jejak-jejak yang kurang baik dari para programmer terdahulu: kita harus bisa membedakan antara kata argumen dan parameter. Lalu di mana perbedaannya? Perbedaan dasarnya adalah hanya satu perspektif, tergantung kita melihatnya dari dalam metode atau dari luar metode. Jika kita bisa "masuk" ke dalam metode WriteLine, maka kita akan melihat kode yang dapat menampilkan parameter value ke dalam layar console. Akan tetapi, kode tersebut tidak akan dieksekusi hingga ada sebuah program memanggil WriteLine dengan sebuah argumen.

Mari kita kembali lagi ke pemanggilan metode di atas:

System.Console.WriteLine(TotalAbsensi);

Beberapa programmer menggunakan spasi kosong untuk memisahkan tanda kurung dengan argumen, seperti di bawah ini:

System.Console.WriteLine( TotalAbsensi );

Dan hasilnya akan sama saja seperti bentuk yang di atas. Yang harus kita lakukan adalah mengeja System, Console, atau WriteLine dengan baik dan benar, dengan menggunakan kapitalisasi huruf yang tepat. Jika tidak, kompiler C# akan mengalami "kebingungan", sehingga program kita tidak akan berjalan. Nah lho!!!

Kita juga bisa meneruskan ekspresi numerik ke metode WriteLine. Sebagai contoh, kita dapat melenyapkan variabel TotalAbsensi dan hanya menggunakan tiga variabel lainnya yang membentuk TotalAbsensi, sehingga bentuknya adalah seperti berikut ini:

System.Console.WriteLine(JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa);

Jika memang kita hanya menginginkan komputer agar menambahkan angka-angka 10, 2 dan 10 (nilai-nilai variabel tersebut), kita juga bisa menghapus secara keseluruhan variabel-variabel tersebut, sehingga pernyataannya menjadi:

System.Console.WriteLine(10 + 2 + 10);

Akan tetapi, meskipun jika kita hanya berpura-pura bahwa kita membuat program yang melakukan hal yang berguna, adalah hal yang sangat baik untuk menggunakan variabel yang mengindikasikan apa yang harus dilakukan oleh program.

Mungkin kita mengira, bahwa metode WriteLine hanya mentransfer nilai dari angka di dalam variabel ke dalam layar console, akan tetapi sebenarnya WriteLine melakukan hal yang lebih dahsyat lagi dibandingkan dengan apa yang kita bayangkan selama ini. Angka-angka yang kita masukkan ke dalam komputer akan disimpan oleh komputer dalam bentuk pola dari bit-bit tertentu. Agar dapat ditampilkan ke dalam layar console dalam cara yang berguna, maka angka tersebut dapat diubah ke dalam bentuk teks, yang juga merupakan pola bit-bit tertentu, tetapi sangatlah berbeda dengan angka.

Jika memang program yang kita tuliskan memiliki banyak panggilan System.Console.WriteLine (seperti yang ditulis di dalam buku ini), maka kita dapat mengurangi kelelahan kita dalam mengetik, dengan membuang bagian namespace dari System.Console.WriteLine, sehingga yang tinggal adalah Console.WriteLine. Akan tetapi, yang harus Anda lakukan adalah memasukkan direktif using pada bagian awal sebuah program, sebelum deklarasi kelas dilakukan, seperti di bawah ini:

using System;

Kata kunci using selalu diikuti dengan nama namespace dan karakter titik koma. Baris ini dikenal juga sebagai direktif (directive), ketimbang dikenal sebagai sebuah statemen, karena memang baris tersebut tidak memiliki peranan yang penting atau sama sekali tidak memiliki peranan sama sekali saat program akhirnya dijalankan. Baris tersebut hanya menginstruksikan kompiler bahwa kelas apapun yang dirujuk ke dalam program mungkin merupakan anggota dari namespace System.

Jika kita memasukkan direktif seperti itu di dalam program kita, kita dapat memanggil WriteLine dengan hanya menuliskan nama kelas dan nama metodenya saja, seperti di bawah ini:

using System;
class Programku
{
    static void Main()
    {
        int JumlahHariIzin, JumlahHariAlfa, JumlahHariSakit;
        int TotalAbsensi;

        JumlahHariIzin = 10;
        JumlahHariAlfa = 2;
        JumlahHariSakit = 10;

        TotalAbsensi = JumlahHariIzin + JumlahHariSakit + JumlahHariAlfa;

        Console.WriteLine(TotalAbsensi);
    }
}

Jika kita lihat pada kode di atas, memang penggunaan direktif using di sini tidak mampu menghemat cara pengetikan yang kita lakukan, karena memang di sini hanya ada satu buah metode yang terdapat di dalam ruang nama System yang kita panggil. Akan tetapi, jika kita menulis program dengan banyak sekali rujukan ke dalam kelas-kelas yang berada di dalam ruang nama System, maka hal ini jelas sangat menghemat pengetikan. Karena dapat menghemat pengetikan, maka saya akan menggunakannya di dalam program-program selanjutnya di dalam artikel ini.