belajar bahasa c sharp

114
Bab I: Pendahuluan Apa itu C# Bahasa C# adalah sebuah bahasa pemrograman modern yang bersifat general-purpose, berorientasi objek , yang dapat digunakan untuk membuat program di atas arsitektur Microsoft .NET Framework . Bahasa C# ini memiliki kemiripan dengan bahasa Java , C dan C++ (selengkapnya dapat dilihat pada Sejarah Bahasa C#). Bahasa pemrograman ini dikembangkan oleh sebuah tim pengembang di Microsoft yang dipimpin oleh Anders Hejlsberg , seorang yang telah lama malang melintang di dunia pengembangan bahasa pemrograman karena memang ialah yang membuat Borland Turbo Pascal , Borland Delphi , dan juga Microsoft J++ . Kini, C# telah distandarisasi oleh European Computer Manufacturer Association (ECMA) dan juga International Organization for Standardization (ISO) dan telah menginjak versi 3.0 yang mendukung beberapa fitur baru semacam Language Integrated Query (LINQ) dan lain-lainnya. Sejarah perkembangan bahasa pemrograman C# Sebelum tahun 1970 -an (atau lebih lama), menggunakan komputer seperti saat ini—dari mulai mengetik hingga main game komputer— merupakan sesuatu hal yang mustahil. Revolusi yang terjadi di

Upload: mukidin

Post on 19-Jun-2015

1.236 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Belajar Bahasa C Sharp

Bab I: Pendahuluan

Apa itu C#

Bahasa C# adalah sebuah bahasa pemrograman modern yang bersifat general-purpose,

berorientasi objek, yang dapat digunakan untuk membuat program di atas arsitektur

Microsoft .NET Framework. Bahasa C# ini memiliki kemiripan dengan bahasa Java, C dan C++

(selengkapnya dapat dilihat pada Sejarah Bahasa C#).

Bahasa pemrograman ini dikembangkan oleh sebuah tim pengembang di Microsoft yang

dipimpin oleh Anders Hejlsberg, seorang yang telah lama malang melintang di dunia

pengembangan bahasa pemrograman karena memang ialah yang membuat Borland Turbo

Pascal, Borland Delphi, dan juga Microsoft J++.

Kini, C# telah distandarisasi oleh European Computer Manufacturer Association (ECMA) dan

juga International Organization for Standardization (ISO) dan telah menginjak versi 3.0 yang

mendukung beberapa fitur baru semacam Language Integrated Query (LINQ) dan lain-lainnya.

Sejarah perkembangan bahasa pemrograman C#

Sebelum tahun 1970-an (atau lebih lama), menggunakan komputer seperti saat ini—dari mulai

mengetik hingga main game komputer—merupakan sesuatu hal yang mustahil. Revolusi yang

terjadi di dalam dunia komputer membutuhkan dua tahap agar dapat sampai kepada zaman

seperti sekarang, yakni:

1. saat komputer dibangun untuk membantu para ilmuwan untuk menyelesaikan tugas-tugas

ilmiahnya, dan

2. turunnya harga komputer secara signifikan dan dapat digunakan oleh para pengguna

yang bukan programmer, yang berlangsung beberapa dekade setelah tahap pertama

selesai.

Page 2: Belajar Bahasa C Sharp

Pengguna awam komputer pun akhirnya "dilahirkan", dan sejak itu programmer dan pengguna

merupakan dua buah entitas yang sama sekali berbeda, dan kurang begitu dapat berkomunikasi

satu dengan lainnya.

Awal-awal pemrograman komputer digital

Komputer digital yang dapat diprogram pertama kali dibuat pada tahun 1930-an. Maksud dari

"komputer digital" di sini adalah bahwa komputer-komputer tersebut bekerja dengan

menggunakan angka-angka diskrit (yang memiliki batasan yang jelas), seperti halnya 0, 1, nilai π

(3.14159) dan nilai-nilai angka lainnya. Sementara itu, maksud dari "komputer yang dapat

diprogram" adalah komputer dapat melakukan operasi-operasi matematika dengan berdasarkan

instruksi-instruksi yang disebut dengan program. Untuk beberapa tahun semenjak itu, program-

program komputer ditulis di atas kertas yang dilubangi (disebut sebagai punched-card) atau

medium-medium lainnya. Akhirnya, perangkat fisik komputer pun disebut sebagai perangkat

keras (hardware), sementara instruksi-instruksi yang ditulis di atas punched card atau medium

lainnya dikenal dengan perangkat lunak (software). Dinamai "perangkat lunak", karena memang

memiliki sifat mudah diubah. Kita tidak harus membangun komputer secara keseluruhan untuk

melakukan jenis perhitungan yang berbeda. Sementara itu, perangkat keras didesain untuk

melakukan beberapa jenis operasi aritmetika dan logika. Operasi mana yang dapat dilakukan

oleh perangkat keras dan bagaimana urutan operasi tersebut, diatur oleh kode-kode program.

Pada saat program dijalankan, komputer juga disebut sedang "mengeksekusi program", yakni

saat komputer membaca kode dan melakukan instruksi yang disuruhkan kepadanya.

Untuk dekade-dekade awal perkembangan komputer digital, hubungan antara perangkat keras

dan perangkat lunak sangatlah erat. Setiap mesin memiliki instruksinya sendiri-sendiri yang

kadang tidak cocok dengan mesin lainnya. Untuk mentransfer sebuah program dari satu mesin ke

mesin lainnya yang lebih baru dan tentunya lebih cepat, program tersebut harus ditulis ulang

dengan semua kode-kodenya yang baru. Nah, kode-kode yang hanya dimiliki oleh mesin tertentu

ini dinamakan dengan kode mesin (machine code) atau bahasa mesin (machine language). Untuk

lebih cepat mengingat instruksi-instruksi dalam kode mesin, para desainer pun kemudian

membentuk sebuah cara dengan menyamakannya dengan sebuah kata tertentu (umumnya berupa

Page 3: Belajar Bahasa C Sharp

singkatan dalam bahasa Inggris), yang kemudian berevolusi menjadi bahasa rakitan atau

assembly language.

Munculnya bahasa pemrograman tingkat tinggi

Pada awal tahun 1950-an, para desainer pun mencoba untuk mendesain bahasa komputer yang

umum yang program hasilnya tidak hanya dapat berjalan di mesin-mesin tertentu saja.

Muncullah bahasa pemrograman tingkat tinggi atau high-level programming language.

Disebut demikian untuk membedakannya dengan kode mesin yang disebut sebagai bahasa

pemrograman tingkat rendah atau low-level programming language. Tren yang ada adalah

kemunculan beberapa bahasa pemrograman seperti FORTRAN, COBOL, BASIC, dan masih

banyak lagi yang lainnya. Beberapa bahasa pemrograman tersebut masih terus-terusan digunakan

hingga saat ini. Sebagai contoh, FORTRAN (akronim dari Formula Translator) masih sering

digunakan oleh para ilmuwan dan para insinyur bidang teknik; COBOL (akronim dari Common

Business-Oriented Language) juga sering digunakan dalam institusi-institusi finansial; dan

bahasa BASIC (akronim dari Beginner’s All-purpose Symbolic Instruction Code) juga masih

banyak digunakan hingga saat ini, meskipun terjadi perubahan yang sangat signifikan dari ketika

bahasa tersebut dipublikasikan pertama kali pada tahun 1963.

Program-program komputer yang dibangun dengan menggunakan bahasa FORTRAN, COBOL,

BASIC, atau bahasa tingkat tinggi lainnya pada dasarnya adalah berisi berkas teks yang terdiri

atas sekumpulan pernyataan yang ditulis di dalam bahasa pemrograman tertentu, dengan

beberapa peraturan sintaksis, semantik dan gramatika yang didefinisikan di dalam bahasa

pemrograman. Karena komputer hanya dapat menjalankan machine code, maka program yang

ditulis di dalam bahasa pemrograman tingkat tinggi harus terlebih dahulu diterjemahkan ke

dalam machine code sebelum dieksekusi. Proses penerjemahan ini dapat dilakukan baik itu

dengan menggunakan teknik translasi (alat bantunya disebut dengan translator), teknik

interpretasi (alat bantunya disebut interpreter), atau dengan menggunakan teknik kompilasi

(alat bantunya disebut dengan compiler). Teknik translasi merupakan teknik kuno yang

menerjemahkan keseluruhan kode bahasa pemrograman menjadi machine code; teknik kompilasi

merupakan evolusi dari teknik translasi di mana kode dalam bahasa pemrograman dipisah-pisah

ke dalam beberapa berkas untuk kemudian diterjemahkan dan dijadikan machine code,

Page 4: Belajar Bahasa C Sharp

sementara teknik interpretasi merupakan sebuah teknik di mana eksekusi dan translasi dilakukan

secara berbarengan (bersama-sama).

Bahasa pemrograman lainnya yang dikembangkan selama tahun 1950-an tapi sudah tidak

digunakan lagi adalah ALGOL (akronim dari Algorithmic Programming Language). ALGOL

memang sudah tidak digunakan lagi, tapi memberikan dampak yang signifikan untuk beberapa

bahasa pemrograman lainnya di dalam sejarah perkembangan bahasa pemrograman komputer.

ALGOL didesain pertama kali pada akhir tahun 1950-an oleh sebuah komite internasional, untuk

kemudian diperbaiki pada tahun 1960 dan 1968. Meskipun saat ini bahasa tersebut mati seolah

lenyap ditelan bumi, jiwanya masih hidup di dalam bahasa pemrograman tingkat tinggi yang

sekarang banyak digunakan, seperti Pascal, PL/1, dan Bahasa C.

Munculnya C

Bahasa C dilahirkan di Bell Telephone Laboratories (atau sering disebut sebagai Bell Labs

saja). Sulit membayangkan dunia modern saat ini jika tidak ada pengaruh dari Bell Labs. Pada

tahun 1947, transistor ditemukan di Bell Labs, dan juga sistem operasi yang sekarang banyak

digunakan di dalam komputer korporat (UNIX) juga dibuat di sana. Untuk beberapa tahun, ada

sebuah bahasa pemrograman yang sangat dekat dengan sistem operasi UNIX, yang disebut

dengan bahasa C, yang didesain oleh Dennis Ritchie dan Brian Kernighan. Mengapa disebut

hanya C saja? Bahasa C disebut demikian mengingat bahasa tersebut adalah turunan dari bahasa

B, dan bahasa B merupakan pemendekan dari Basic CPL, sementara CPL sendiri adalah sebuah

bahasa pemrograman yang merupakan singkatan dari Combined Programming Language.

Meskipun populer, bahasa C terkesan lebih rumit jika dibandingkan dengan bahasa

pemrograman lainnya, khususnya jika digunakan oleh para pemrogram pemula. Ketika ALGOL

dan banyak turunan ALGOL menggunakan kata-kata yang mudah diingat seperti BEGIN dan END

untuk membatasi sebuah seksi dalam instruksi program, bahasa C malah menggunakan tanda

kurung keriting ({ dan }). Beberapa operasi juga disederhanakan, bahkan banyak singkatannya

yang cukup membingungkan para programmer pemula. Contoh yang sering digunakan adalah

printf, dan scanf. Meskipun demikian, program-program yang ditulis dalam bahasa C

seringnya lebih efisien dibandingkan dengan bahasa pemrograman lainnya, yang artinya

Page 5: Belajar Bahasa C Sharp

program-program dalam bahasa C diterjemahkan ke dalam machine code dalam jumlah yang

relatif lebih sedikit jika dibandingkan dengan program yang ditulis dalam bahasa pemrograman

lainnya. Salah satu bagian yang paling canggih dari bahasa C adalah bahwa bahasa C memiliki

"pointer", selain tentunya "variabel" dan "konstanta". Istilah Pointer dalam bahasa pemrograman

merujuk kepada alamat-alamat memori yang mengizinkan para programmer untuk melakukan

beberapa tugas secara jauh lebih efisien, dengan melibatkan bit, byte, dan word memori .

Karenanya, banyak orang menyebut bahasa C sebagai "High-level Assembly language, atau

bahasa rakitan tingkat tinggi.

Meskipun bahasa C masih merupakan bahasa pemrograman yang populer, bahasa tersebut saat

ini dapat dikatakan telah "kadaluwarsa". Saat ini, bahasa tersebut diklasifikasikan ke dalam

"bahasa pemrograman prosedural tradisional" (traditional procedural programming language),

sebuah istilah yang merujuk kepada struktur program-program dalam bahasa C. Umumnya

sebuah program bahasa C terdiri atas banyak prosedur (juga sering disebut sebagai

fungsi/function atau subrutin/subroutine), yang setiap prosedur tersebut merupakan bagian dari

kode yang melakukan beberapa tugas tertentu atau merupakan implementasi dari algoritma

tertentu. Prosedur-prosedur tersebut dapat bekerja dengan data dalam beberapa cara. Data adalah

kumpulan angka atau teks atau bahkan gabungan antara keduanya. Dalam bahasa pemrograman

prosedural tradisional, kodelah yang memproses data menjadi output.

Munculnya C++

Akan tetapi akhir-akhir ini, banyak programmer cenderung memilih "bahasa pemrograman

berorientasi objek"—atau object oriented programming (OOP). Permulaan munculnya bahasa

pemrograman berorientasi objek sering diasosiasikan dengan munculnya bahasa Smalltalk,

sebuah bahasa pemrograman yang dikembangkan di Palo Alto Research Center (PARC), yang

merupakan sebuah laboratorium penelitian yang didirikan oleh Xerox Corporation. Selain

Smalltalk, PARC juga menelurkan banyak inovasi lainnya, seperti halnya mouse dan juga

antarmuka grafis (Graphical User Interface) yang pertama kali diimplementasikan di dalam

sistem Xerox Star, yang kemudian diadopsi oleh Apple Macintosh dan juga Microsoft Windows.

Page 6: Belajar Bahasa C Sharp

Dalam bahasa pemrograman berorientasi objek, para programmer tidaklah membuat prosedur,

tetapi mereka membuat kelas (class), dan dari kelas-kelas tersebut muncullah objek (object),

yang dapat berupa kode saja, data saja atau kombinasi dari kode dan data. Daripada

membuat prosedur-prosedur yang dikhususkan untuk bekerja dengan data, "data" dalam bahasa

pemrograman berorientasi objek memiliki perangkat untuk bekerja dengan dirinya sendiri,

sehingga dapat dikatakan data bisa memproses dirinya sendiri. Perubahan perspektif ini

membawa angin segar bagi para pemrogram, karena menulis satu buah kode yang dapat

digunakan dalam beberapa tugas pemrograman telah menjadi lebih mudah.

Akhirnya, beberapa programmer pun mencoba untuk menciptakan sebuah versi bahasa C yang

mendukung konsep bahasa pemrograman berorientasi objek. Dan, satu-satunya yang sangat

populer dari usaha mereka, lagi-lagi, adalah bahasa pemrograman yang dikembangkan di Bell

Laboratories pada tahun 1982 oleh Bjarne Stoustrup. Bahasa yang dikembangkannya kini

dikenal dengan bahasa C++ (dibaca C plus-plus), di mana nama tersebut merupakan "pelesetan",

karena dalam bahasa C dan turunannya dua buah tanda plus akan menambahkan 1 ke dalam

sebuah angka atau variabel. Akan tetapi, C++ juga memiliki masalahnya sendiri. Dalam teorinya,

C++ adalah bahasa C yang ditambahi dukungan konsep "berorientasi objek", sehingga C++

tidaklah menggantikan bahasa C.

Munculnya Java

Pada tahun 1992, Sun Microsystems membuat Java, sebuah bahasa pemrograman berorientasi

objek yang dibuat berbasiskan bahasa C, dengan perbedaan yang signifikan dari bahasa

pemrograman C++. Bahasa Java telah membersihkan beberapa sintaksis yang dianggap kurang

bagus yang terdapat di dalam bahasa C++ dan membuang beberapa hal yang “berbahaya” dari

bahasa C, tetapi tetap mempertahankan “kerumitan” yang ditawarkan oleh bahasa C.

Munculnya C#

Pada tahun 2000, Microsoft pun merilis bahasa C# (dibaca C Sharp), yang secara umum didesain

oleh Anders Hejlsberg, yang juga lagi-lagi melanjutkan penamaan yang diplesetkan. Simbol

pagar (#) yang digunakan dalam C#, secara sekilas terlihat seperti empat buah plus-plus yang

Page 7: Belajar Bahasa C Sharp

disusun sedemikian rupa. Selain itu, di dalam notasi musik, tanda pagar memang menunjukkan

nada yang lebih tinggi dibandingkan dengan nada yang tidak memiliki pagar—sehingga C# lebih

tinggi dibandingkan C.

Seperti halnya bahasa Java, bahasa C# telah membuang beberapa fitur berbahaya dari bahasa C.

Memang, pointer belum sepenuhnya "dicabut" dari C#, tapi sebagian besar pemrograman dengan

menggunakan bahasa C# tidak membutuhkan pointer secara ekstensif, seperti halnya C dan C++.

Persamaan lainnya antara Java dan C# mencakup peran dari kompiler. Biasanya, kompiler

menerjemahkan kode sumber (berkas teks yang berisi bahasa pemrograman tingkat tinggi) ke

dalam kode mesin. Kode mesin tersebut membentuk sebuah berkas yang dapat dieksekusi

(executable atau EXE), yang berupa sebuah berkas yang siap untuk dijalankan kapan saja secara

langsung oleh komputer. Tetapi, karena kode mesin hanya diasosiasikan dengan sebuah jenis

mesin tertentu saja, berkas yang dapat dieksekusi tersebut hanya dapat berjalan di atas satu jenis

komputer saja. Inilah sebabnya mengapa kita tidak dapat menjalankan secara langsung program

yang sama yang berjalan di atas sistem operasi Windows di atas sistem operasi GNU/Linux,

Apple Macintosh atau sistem operasi lainnya, dan begitu pula sebaliknya.

Alat bantu kompiler yang digunakan oleh C# tidak menerjemahkan kode sumber ke dalam kode

mesin, tetapi hanya menerjemahkan ke dalam sebuah bahasa perantara atau Intermediate

Language (disingkat menjadi IL), yang merupakan sebuah jenis kode mesin hanya saja telah

digeneralisasikan. Ketika kita hendak menjalankan program di atas sebuah mesin, maka IL akan

diterjemahkan ke dalam kode mesin secara keseluruhan. Dilihat dari perspektif pengguna, proses

translasi ini tidak terlihat. Tetapi, dalam teorinya, ternyata di balik itu terdapat proses dua

langkah rumit yang mengizinkan program dengan bahasa IL yang sama untuk berjalan di atas

mesin yang berbeda. Selain itu, sebuah program dalam bentuk IL dapat diuji lebih mudah oleh

sistem operasi dari keberadaan kode yang merusak atau kode yang mencurigakan. Kemampuan

ini telah menjadi lebih penting saat program tersebut dipertukarkan melalui jaringan publik,

seperti halnya Internet.

Bahasa C, C++, Java dan C# kini dikenal dengan sebutan "keluarga besar bahasa pemrograman

C" atau "bahasa pemrograman berbasis bahasa C". C++ mengandung semua hal yang dimiliki

oleh C tetapi memiliki fitur yang tidak dimiliki oleh C, sementara Java dan C# meskipun masih

Page 8: Belajar Bahasa C Sharp

berbasis bahasa C, keduanya tidaklah serta-merta merupakan pengganti dari bahasa C, dan antara

bahasa Java dan C# memiliki kesamaan dalam berbagai bidang, ketimbang mirip dengan bahasa

C++. Meskipun demikian, semuanya menggunakan banyak sintaksis yang mirip, seperti void,

int, struct, dan lain sebagainya.

Page 9: Belajar Bahasa C Sharp

Bab II: Operator, Variabel, dan Ekspresi

Operator Penugasan dan Variabel

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

Page 10: Belajar Bahasa C Sharp

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.

Page 11: Belajar Bahasa C Sharp

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.

Page 12: Belajar Bahasa C Sharp

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 (precision). 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;

Page 13: Belajar Bahasa C Sharp

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

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:

Page 14: Belajar Bahasa C Sharp

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

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

Page 15: Belajar Bahasa C Sharp

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:

Page 16: Belajar Bahasa C Sharp

JumlahSiswa=4120;

Kata kunci (keyword) C#

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

Page 17: Belajar Bahasa C Sharp

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

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

Page 18: Belajar Bahasa C Sharp

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

Page 19: Belajar Bahasa C Sharp

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

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.

Page 20: Belajar Bahasa C Sharp

Deklarasi Variabel

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;

Page 21: Belajar Bahasa C Sharp

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;

Page 22: Belajar Bahasa C Sharp

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

Page 23: Belajar Bahasa C Sharp

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:

Page 24: Belajar Bahasa C Sharp

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)

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

Page 25: Belajar Bahasa C Sharp

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?

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

Page 26: Belajar Bahasa C Sharp

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()

{

Page 27: Belajar Bahasa C Sharp

}

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 algoritma 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

Page 28: Belajar Bahasa C Sharp

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:

Page 29: Belajar Bahasa C Sharp

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)

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

Page 30: Belajar Bahasa C Sharp

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?

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

{

}

Page 31: Belajar Bahasa C Sharp

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

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).

Page 32: Belajar Bahasa C Sharp

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

Page 33: Belajar Bahasa C Sharp

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

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

Page 34: Belajar Bahasa C Sharp

(#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;

}

}

Page 35: Belajar Bahasa C Sharp

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:

Page 36: Belajar Bahasa C Sharp

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

Page 37: Belajar Bahasa C Sharp

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

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.

Page 38: Belajar Bahasa C Sharp

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.

Page 39: Belajar Bahasa C Sharp

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

Page 40: Belajar Bahasa C Sharp

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()

{

Page 41: Belajar Bahasa C Sharp

}

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)

{

...

}

Page 42: Belajar Bahasa C Sharp

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);

Page 43: Belajar Bahasa C Sharp

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.

Page 44: Belajar Bahasa C Sharp

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);

}

Page 45: Belajar Bahasa C Sharp

}

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.

Page 46: Belajar Bahasa C Sharp

Bab III: Perhitungan Aritmetika dalam C# dan

Operator

Dalam beberapa contoh pada bab sebelumnya, kita telah mengenal beberapa hal, tetapi masalah

aritmetika/matematika dasar di dalam contoh di atas hanya dibahas satu buah saja, yakni

penjumlahan. Padahal, sebenarnya banyak program komputer yang harus mampu melakukan

kalkulasi dalam berbagai macam bentuk, selain tentunya penjumlahan. Dari contoh-contoh di

atas, mungkin kita telah bisa memahami bagaimana caranya menambahkan dua bilangan atau

lebih dengan menggunakan bahasa C#, tapi bagaimana dengan operasi lainnya, seperti perkalian,

pembagian, dan pengurangan?

Penjumlahan dan Pengurangan

Penjumlahan memang hal yang paling mudah untuk dilakukan di dalam bahasa C#, karena

memang kita belajar dari contoh-contoh pada bab-bab sebelumnya. Ya, penjumlahan di dalam

bahasa C# disimbolkan dengan menggunakan tanda plus (+)! Jika variabel A, B, dan C

dideklarasikan sebagai integer, maka untuk mencari nilai C yang merupakan hasil penjumlahan

antara A dan B adalah sebagai berikut:

C= A + B;

Pengurangan juga sama mudahnya seperti penjumlahan. Yakni dengan menggunakan simbol

strip (-) sebagai tanda untuk mengurangi dua buah bilangan.

C= A - B;

Simbol plus dan strip di atas merupakan contoh dari operator aritmetika. Kedua operator

tersebut juga dapat dikategorikan sebagai operator biner (binary operator), karena memang

keduanya memiliki dua buah operand (operand pertama adalah yang berada di sebelah kiri

simbol, sementara operator kedua berada di sebelah kanan simbol). Sebuah operand dapat

Page 47: Belajar Bahasa C Sharp

berupa ekspresi tertentu, dan ekspresi tersebut dapat berupa sebuah variabel, literal numerik, atau

hasil dari operasi lainnya.

Kita juga bisa menggunakan kedua simbol di atas secara sekaligus, sebagai operator unary

(unary operator, yang memiliki satu buah operand saja). Daripada harus menuliskan bentuk

seperti:

C = A - B;

kita juga bisa menuliskan:

C = A + -B;

atau dalam bentuk:

C= -B + A;

Pada bentuk pertama dari tiga bentuk pernyataan di atas, tanda strip di atas merupakan tanda

untuk operasi pengurangan, yang melibatkan dua buah operand, yakni A dan B, sehingga tanda

minus tersebut dinamakan pula dengan operator binary. Pada bentuk kedua dan ketiga, tanda

strip tersebut berarti menegatifkan sebuah nilai, yakni nilai B. Kedua statemen tersebut akan

menambahkan nilai A (positif) dengan nilai negatif dari B. Karena setelah tanda tersebut hanya

terdapat satu buah operand, maka operator tersebut termasuk ke dalam kategori operator unary.

Operator unary sendiri tidak mengubah nilai B, akan tetapi hanya mengubah nilai yang

digunakan pada saat penjumlahan.

Tanda plus, yang merupakan sebuah operator binary yang biasa digunakan untuk melakukan

operasi penjumlahan, bisa juga digunakan sebagai operator unary seperti di bawah ini:

C = +A - +B;

Tanda operator plus di sana terlihat aneh dan, karenanya, oleh para desainer C# di Microsoft

dibuat agar tidak memiliki efek pada variabel/nilai yang mengikutinya. Lagi pula, jika memang

membingungkan, dan tidak berguna, maka saya juga tidak akan menuliskan bentuk seperti di

Page 48: Belajar Bahasa C Sharp

atas lagi di dalam tulisan-tulisan saya selanjutnya mengenai C#. Ini adalah waktu terakhir Anda

melihatnya!

Perkalian

Nah, penjumlahan dan pengurangan sudah dibahas, akan tetapi bagaimana dengan perkalian?

Padahal, di dalam matematika, kita mengetahui bahwa simbol perkalian adalah × (Unicode

007D), dan simbol tersebut tidak terdapat di dalam keyboard yang kita gunakan. Terus

bagaimana digunakannya? Dalam sebagian besar bahasa pemrograman populer, kita bisa

menggunakan karakter asterisk (*), dan kita bisa menggunakannya sebagai operator untuk

perkalian. Dibanding kita menggunakan bentuk:

Luas = Panjang × Lebar;

Kita bisa menggunakan bentuk:

Luas = Panjang * Lebar;

Ingat, sebagian besar bahasa pemrograman menggunakan karakter asterisk sebagai simbol

perkalian, bukan hanya C# saja. Dan daripada menyebutnya dengan sebutan yang agak susah,

para programmer di luar negeri pun menyebutnya dengan sebutan star saja. Kita juga sama deh!

Kita sebut karakter asterisk sebagai karakter bintang, karena lebih mudah digunakan dan diingat.

Oke?

Pembagian dan Sisa Hasil Bagi

Papan ketik yang kita gunakan juga mungkin tidak memiliki tanda untuk pembagian yang kita

kenal yakni ÷ (Unicode 00F7). Akan tetapi, sama seperti halnya perkalian yang menggunakan

tanda bintang sebagai pengganti simbol ÷, pembagian juga menggunakan karakter pengganti,

yakni garis miring maju, atau slash! (/) Sehingga, kita bisa menuliskan bentuk Jam=Menit ÷ 60,

dalam C# menjadi:

Jam = Menit / 60;

Page 49: Belajar Bahasa C Sharp

Di antara semua operasi aritmetika dasar, mungkin semua orang akan setuju bila saya

mengatakan bahwa pembagian adalah operasi yang paling rumit dilakukan. Komputer pun sama

bodohnya, karena memang komputer lebih bodoh dibandingkan dengan kita! Tidak seperti

operasi lainnya terhadap bilangan bulat yang "adem-adem" saja, pembagian terhadap dua buah

bilangan bulat memiliki kerumitan tersendiri yang tidak kita bisa abaikan. Oke, jika tidak

percaya mungkin potongan kode ini bisa dijadikan sebagai demonstrasi:

int JumlahKue, JumlahOrang, Bagian;

JumlahKue = 11;

JumlahOrang = 4;

Bagian= JumlahKue / JumlahOrang;

Oke, berapa nilai akhir dari variabel Bagian? Jawabannya pasti bukan 2.75! Variabel Bagian

tidak dapat bernilai 2.75 karena kita tahu bahwa pada deklarasi variabel di atas, variabel Bagian

memiliki tipe data bilangan bulat (integer). Kata kunci int sama sekali tidak bisa mengakomodir

pecahan, yang berarti jika memang kita membutuhkan hasil dalam bentuk pecahan, kita harus

mencari pendekatan lainnya (yang nanti akan dibahas)!

Sebenarnya, variabel Bagian yang dideklarasikan sebagai integer bukanlah menjadi masalah di

sini. Masalahnya sebenarnya terdapat pada tanda sama dengan (=) yang digunakan di dalam

operasi, yakni pada sebelah kanan tanda sama dengan tersebut. Variabel JumlahKue dan

JumlahOrang juga dideklarasikan sebagai integer, dan di dalam C#, semua operasi antara dua

buah integer akan menghasilkan integer pula.

Saat C# membagi dua buah bilangan bulat, maka C# akan memotong hasilnya, yang berarti

bagian pecahannya akan dibuang begitu saja (tidak akan dianggap)! Hasil dari pembagian antara

11 dan 4 bukanlah 2.75, karena nilai 0.75 akan dibuang dan nilai akhir dari pembagian tersebut

adalah 2. Berarti, setiap orang mendapatkan dua buah kue, dan secara logika masih tersisa tiga

buah kue yang tidak dibagikan untuk siapa-siapa.

Oke, sekarang lihat contoh di bawah ini:

int JumlahKue, JumlahOrang, Bagian;

Page 50: Belajar Bahasa C Sharp

JumlahKue = 11;

JumlahOrang = 12;

Bagian= JumlahKue/JumlahOrang;

Berapa nilai akhir dari variabel Bagian? Jawabannya adalah 0, karena jumlah orang terlalu

banyak jika dibandingkan dengan jumlah kuenya, akhirnya ibu dapur pun tidak membaginya,

sehingga 12 orang pun akhirnya "kelaparan."

Pemotongan pun berlaku untuk angka negatif:

A = -3;

B = 2;

C = A / B;

Jika saja semua bilangan tersebut dianggap bukan sebagai bilangan bulat, maka hasilnya adalah -

1.5, tapi C# akan membuang pecahan ½ tersebut, dan hasil akhirnya adalah -1. Pemotongan

dalam kasus-kasus ini pun kadang disebut sebagai "pembulatan".

Untungnya, bahasa C# menawarkan operator lainnya yang mengizinkan kita untuk

"menyelamatkan" sisa pembagian tersebut, sehingga bisa "dimanfaatkan". Operator ini

dinamakan juga dengan modulus operator, atau operator sisa. Dalam C#, operator modulus

menggunakan simbol persen (%), sebuah simbol yang pada dasarnya mengandung karakter garis

miring (slash) sehingga menjadikannya berhubungan dengan pembagian. Oke deh, kita

modifikasi program di atas menjadi seperti ini:

int JumlahKue, JumlahOrang, Bagian;

JumlahKue = 11;

JumlahOrang = 4;

Bagian= JumlahKue/JumlahOrang;

int Sisa;

Page 51: Belajar Bahasa C Sharp

Sisa = JumlahKue % JumlahOrang;

Sebelas kue dibagi ke empat orang menghasilkan setiap orang mendapatkan dua buah kue utuh,

dan sisanya ada tiga buah kue yang tidak digunakan. Saat menggunakan operator modulus

terhadap bilangan negatif, hasilnya pun selalu memiliki tanda yang sama dengan nilai yang

ditaruh di samping kiri dari operator modulus tersebut (jika positif maka hasil akhirnya akan

positif dan bila negatif, maka hasil akhirnya juga negatif).

Operator modulus akan sangat berguna untuk melakukan beberapa pekerjaan tertentu, karena

operator ini dapat membagi sebuah angka yang mungkin nantinya akan lebih rumit jika

menggunakan operator pembagian biasa. Sebagai contoh, anggaplah kita memiliki sebuah

variabel dengan nama Tahun4Digit, yang menyimpan angka seperti 1968, 1985, atau 2008. Jika

kita hendak mengubahnya menjadi tahun dengan panjang dua digit, dengan nama variabel

Tahun2Digit (seperti 68, 85, atau 08), maka kita bisa melakukannya dengan cara:

Tahun2Digit = Tahun4Digit % 100;

Variabel Tahun2Digit adalah angka sisa pembagian setelah kita membagi variabel

Tahun4Digit dengan angka 100. Nilainya akan selalu merupakan angka antara 0 hingga 99.

Contoh lainnya: anggaplah kita memiliki variabel dengan nama MenitTotal, yang mungkin

mengandung total menit berjalannya sebuah film di bioskop. Jika memang kita hendak

memisahkan nilai tersebut ke dalam bentuk Jam:Menit yang merupakan bentuk bilangan bulat,

maka kita bisa gunakan:

Jam = MenitTotal / 60;

Menit = MenitTotal % 60;

Jika variabel MenitTotal bernilai 135, maka Jam akan bernilai 2, dan Menit akan bernilai 15.

Hasil dari variabel Menit pasti akan selalu memiliki nilai 0 hingga 59.

Operator modulus juga bisa sangat berguna untuk menentukan apakah sebuah angka bisa habis

dibagi oleh angka lainnya. Sebagai contoh, kita tahu bahwa tahun kabisat adalah tahun yang

Page 52: Belajar Bahasa C Sharp

habis dibagi dengan empat, dan akan muncul setiap empat tahun sekali. Dengan demikian, jika

ekspresi Tahun % 4 memiliki nilai 0, maka tahun tersebut merupakan tahun kabisat. Betul tidak?

Beberapa masalah dalam pembagian

Di atas, saya mungkin menyebutkan "kerumitan dalam pembagian". Maksudnya apa sih? Selain

dua masalah di atas, pembagian memiliki beberapa kerumitan lagi, di antaranya adalah sebagai

berikut:

int A, B, C;

A = 11;

B = 0;

C= A / B;

Bentuk kode di atas menunjukkan sebuah proses pembagian dengan angka nol, yang tentu saja

tidak diizinkan untuk digunakan oleh sebuah bilangan bulat. Mungkin, Anda mengira mengapa

saya bilang "tidak diizinkan", padahal memang di dalam matematika setiap angka yang dibagi

dengan angka 0 akan menghasilkan bilangan infinity atau tak keberhinggaan (∞). Untuk lebih

memahaminya, coba perhatikan kode yang lebih sempurna di bawah ini:

//Program02.cs

using System;

class BagiDgnNol

{

static void Main()

{

int A, B, C;

A=11;

B=0;

Console.WriteLine(A);

Console.WriteLine(B);

Page 53: Belajar Bahasa C Sharp

C=A/B;

Console.WriteLine(C);

}

}

Program di atas akan dikompilasi dengan benar, tanpa ada kesalahan apapun. Dan ketika

dijalankan pun, kita akan melihat nilai dari variabel A dan B karena memang kita telah

menyuruh komputer untuk menampilkan nilai dari variabel A dan B. Lalu, program yang kita

buat tersebut akan berhenti sejenak, lalu muncul sebuah kotak dialog dengan judul Just-In-Time

Debugging. Tekan saja tombol "No" karena kita tidak mau melakukan debugging (lebih

tepatnya, belum bisa melakukannya). Kotak dialog pun hilang, tapi di layar console, kita akan

melihat pesan:

Unhandled Exception: System.DivideByZeroException: Attempted to divide by

zero.

Kita mungkin akan memperoleh informasi mengenai pada baris ke berapa kesalahan tersebut

terjadi di dalam berkas kode sumber Program02.cs yang menyebabkan program kita tidak

berjalan dengan sempurna. Akhirnya, program pun terhenti dan kita tidak tahu berapa nilai C,

karena memang tidak diberi kesempatan untuk memanggil statemen Console.WriteLine yang

ketiga yang digunakan untuk memperlihatkan nilai variabel C.

Ketika kita salah dalam mengetikkan kode (sebaiknya sih jangan), mungkin kita akan "akrab"

dengan pesan kesalahan yang ditampilkan oleh kompiler (compiler error), yang pada umumnya

berisi kesalahan sintaksis di dalam kode yang harus kita perhatikan pada saat melakukan

kompilasi (syntax error). Akan tetapi, dalam program Program02.cs di atas, meski tidak ada

kesalahan saat melakukan kompilasi, program tidak mau berjalan dengan sempurna, saat

dijalankan. Karenanya jenis kesalahan tersebut dikenal juga dengan sebutan runtime error

(kesalahan saat dijalankan), karena memang kesalahan tersebut muncul saat program dijalankan,

bukan ketika kompilasi, atau bahkan pengetikan.

Page 54: Belajar Bahasa C Sharp

Saat berhadapan dengan penyebut yang memiliki nilai 0, maka operasi pembagian dikatakan

sedang mencoba untuk membuat pengecualian, atau exception, yang merupakan istilah yang

digunakan untuk merujuk kepada keluhan yang dimiliki komputer akibat munculnya sebuah

masalah. Sebuah program juga sebenarnya dapat diberi informasi mengenai sebuah exception

telah terjadi dan disuruh untuk menanganinya, yang nanti akan kita pelajari pada bab

selanjutnya. Hingga saat kita belajar hal tersebut, kita mungkin menjadi akrab dengan pesan

"unhandled exception", yang berarti sebuah exception yang tidak bisa ditangani oleh program,

malahan ditangani oleh .NET Framework. Pesan tersebut juga mengandung kata

System.DivideByZeroException, yang merupakan sebuah kelas di dalam namespace System

yang digunakan oleh operator pembagian untuk membuat exception.

Dalam program Program02.cs, coba ubah nilai C dengan bentuk seperti di bawah ini:

C = A / 0;

atau

C = 3 / 0;

Sekarang, lakukan kompilasi terhadapnya! Anda akan melihat bahwa saat kompilasi, kompiler

akan menampilkan kesalahan

Divide by constant zero

Saat kita menaruh angka 0 di sebelah kanan tanda pembagian di dalam program kita, kompiler

cukup cerdas untuk menolak kode kita dengan mengeluarkan pesan semacam itu. Teks

superscript==Ekspresi, Operator, Operand dan Prioritasnya== Oke, sejauh ini, kita hanya

menggunakan statemen-statemen yang di dalamnya hanya terdapat satu buah operator aritmetika

saja. Sebenarnya, kita juga bisa membuat statemen yang di dalamnya terdapat banyak operator

aritmetika yang berbeda-beda. Adalah sangat berguna untuk membuatnya ke dalam sebuah baris

dibandingkan dengan membuatnya ke dalam beberapa baris yang justru nanti membuat program

kita menjadi lebih panjang. Hanya saja, memang kita harus memiliki pengetahuan terlebih

dahulu bagaimana caranya membangun ekspresi yang terdiri atas lebih dari satu operator

tersebut. Di dalam The C# Language Specification bagian 7.2, Microsoft mengatakan kaidah

Page 55: Belajar Bahasa C Sharp

"An expression is constructed from operands and operators" (sebuah ekspresi dibangun dari

beberapa operand dan beberapa operator).

Berikut adalah contoh ekspresi sederhana yang memiliki dua buah operand, dan sebuah operator

binary:

operand1 + operand2

Satu atau kedua operand tersebut dapat menjadi ekspresi aritmetika yang melibatkan operand

lainnya. Hasil dari ekspresi di atas adalah hasil penjumlahan dari dua buah operand tersebut di

atas.

Berikut ini adalah ekspresi lainnya yang mengandung dua buah operand dan satu buah operator:

operand1 = operand2

Operator sama dengan (=) akan menyebabkan operand yang berada di sebelah kiri (yang harus

berupa variabel) akan diatur nilainya agar sama dengan operand yang berada di sebelah kanan.

Selain untuk mengubah operand1, ekspresi penugasan juga akan memiliki sebuah nilai tertentu.

Nilai dari ekspresi penugasan adalah hasil akhir dari operand di sebelah kiri dari tanda sama

dengan, dalam kasus ini adalah operand1.

Berikut ini adalah beberapa contoh statemen penugasan, dan yang terakhir ternyata

menggunakan empat buah operator aritmetika yang berbeda-beda:

A = 2;

B = 3;

C = 4;

D = 5;

E = 6;

F = A + B * C / D - E;

Pada statemen terakhir yang berisi penugasan terhadap variabel F, operasi manakah yang akan

pertama kali berjalan? Mungkin, kita akan beranggapan bahwa semuanya akan dijalankan secara

berurutan, sesuai dengan urutannya, karena memang komputer hanya bisa melakukan eksekusi

Page 56: Belajar Bahasa C Sharp

secara berurutan. Akan tetapi, sebenarnya kompiler C# tidaklah begitu! Bahasa C# memiliki

tabel kaidah prioritas operator, yang dalam C# Language Specification disebut sebagai

"Operator Precedence and Associativity," sehingga komputer pun akan diberi tahu oleh

kompiler C# urutan evaluasi eksekusi dari operator-operator di dalam sebuah ekspresi dengan

banyak operator.

Tabel di bawah ini (terkesan mengerikan lho) disusun dengan skala prioritas yang disusun

berdasarkan kategorinya, di mana kategori operator yang diletakkan paling atas memiliki

prioritas yang paling tinggi, sementara kategori operator yang diletakkan paling bawah memiliki

prioritas paling rendah. Akan tetapi, operand-operand yang berada di dalam kategori prioritas

yang sama memiliki prioritas yang sama. Untuk operand-operand yang memiliki prioritas yang

sama, C# akan melakukan evaluasi terhadap ekspresi tersebut secara berurutan, yakni dari kiri ke

kanan.

<thead> </thead>

Prioritas Kategori Jenis-jenis

operator

tertinggi Operator utama (primary operator) (x)

x.y

f(x)

a[x]

x++

x--

new

typeof

sizeof

checked

unchecked

Page 57: Belajar Bahasa C Sharp

  Operator unary (unary operator),

yang hanya memiliki satu buah

operand

+

-

 !

~

++x

--x

(type)x

  Operator pengalian (multiplicative

operator), yang merupakan operator

binary, karena memiliki dua

operand.

*

/

 %

  Operator penambahan (additive

operator), yang merupakan operator

binary.

+

-

  Operator pergeseran (Shift operator) <<

>>

  Operator relasional (Relational

operator)

<

>

<=

>=

is

  Operator persamaan dan

pertidaksamaan (equality/inequality

operator)

==

 !=

  Operator logika AND (Logical AND

operator)

&

  Operator logika XOR (Logical XOR

operator)

^

  Operator logika OR (Logical OR

operator)

|

Page 58: Belajar Bahasa C Sharp

  Operator kondisional AND

(Conditional AND operator)

&&

  Operator kondisional OR

(Conditional OR)

||

  Operator kondisional (Conditional

operator)

?:

terendah Operator penugasan (Assignment

operator)

=

*=

/=

 %=

+=

-=

<<=

>>=

&=

^=

|=

Oke, kita kembali lagi ke ekspresi berikut:

F = A + B * C / D – E;

Dilihat dari tabel di atas, terlihat bahwa operator perkalian dan pembagian, termasuk ke dalam

kategori multiplicative operator (operator pengalian), dan kategori tersebut lebih tinggi

prioritasnya dibandingkan dengan additive operator (operator penambahan). Karena itulah,

perkalian dan pembagian akan dilakukan pada urutan pertama kali, dari kiri ke kanan. Operasi

yang akan dievaluasi pertama kali dalam ekspresi di atas adalah perkalian, sehingga ekspresi di

atas akan menjadi seperti di bawah ini:

F = A + 12 / D - E

Selanjutnya, yang akan dijalankan adalah pembagian:

Page 59: Belajar Bahasa C Sharp

F = A + 2 - E

Penjumlahan dan pengurangan termasuk ke dalam kategori yang sama, sehingga kedua operasi

tersebut akan dilakukan dari kiri ke kanan, sehingga menjadi seperti di bawah ini:

F = 4 - E

Dan kemudian C# akan menjalankan pengurangan, sehingga menjadi:

F = -2

Ternyata, nilai akhir dari variabel F adalah -2.

Akan tetapi, jika kita menghendaki hasil yang berbeda dengan yang di atas, maka gunakanlah

tanda kurung buka dan kurung tutup, yang merupakan operator utama tertinggi:

F = (A + B) * C / (D - E);

Jika perlu, gunakan tanda kurung bertumpuk:

F = (A + B) * (C / (D - E));

Perhatikan tabel di atas! Pada kategori operator unary, operator plus (+) dan minus (-) berbeda

dengan operator plus (+) dan minus (-) dalam kategori operator penambahan. Prioritas kategori

operator unary pun lebih tinggi dibandingkan dengan operator penambahan, bahkan jika

dibandingkan dengan operator pengalian sekalipun.

Akan tetapi, tanda sama dengan, yang kita kenal sebelumnya sebagai operator penugasan,

terletak pada kategori paling bawah di dalam tabel. Operator penugasan merupakan satu-satunya

operator yang memiliki hubungan dari kanan ke kiri, yang berarti beberapa operator penugasan

di dalam sebuah baris ekspresi akan diproses dari paling kanan. Perhatikan contoh di bawah ini

(contoh ini benar lho!):

A = B = C = 27;

Page 60: Belajar Bahasa C Sharp

Karena operasi penugasan memiliki asosiasi dari kanan ke kiri, maka variabel C merupakan

variabel yang pertama kali diberi nilai 27, lalu variabel B diberi nilai variabel B, dan variabel A

sebagai variabel terakhir yang diberi nilai variabel B.

Perhatikan juga contoh di bawah ini:

C = (A = 5) + (B = 6);

Tanda kurung pertama akan memaksa nilai A agar memiliki nilai 5, dan juga nilai ekspresi

penugasannya pun juga 5. Tanda kurung kedua akan memaksa agar nilai B memiliki nilai 6, dan

ekspresi penugasannya pun juga 6. Variabel C merupakan jumlah antara kedua ekspresi tersebut,

sehingga hasilnya adalah 11. Statemen di atas merupakan contoh statemen C# yang valid, karena

memang di sana terdapat tanda kurung, sementara jika tidak ada tanda kurung, maka statemen

seperti di bawah ini tidaklah valid:

C = A = 5 + B = 6;

Mengapa bisa begitu? Masalahnya adalah bahwa operator penambahan memiliki prioritas yang

lebih tinggi dibandingkan dengan operator penugasan, akan tetapi setelah proses penambahan

telah dieksekusi, maka bagian sebelah kiri dari tanda sama dengan ketiga bukanlah sebuah

variabel lagi. Contoh statemen ilegal lainnya adalah seperti di bawah ini:

A + 12;

Karena memang ekspresi tersebut tidak melakukan apapun atau tidak menyimpan nilai operasi

tersebut ke dalam variabel lainnya. Memang, di dalam bahasa C dan C++ statemen seperti di atas

adalah legal, tapi karena banyak programmer yang melakukan kesalahan dalam melakukan

pemrograman dengan kedua bahasa tersebut, C# sebagai bahasa modern membuang cara

penulisan seperti itu.

Increment Operator dan Decrement Operator

Para programmer yang menemukan bahasa C pada tahun 1969 mungkin tampaknya tidak

menyukai proses pengetikan yang banyak. Atau mungkin mereka sadar akan harga memori dan

Page 61: Belajar Bahasa C Sharp

media penyimpanan waktu itu sangatlah mahal. Apapun alasannya, para desainer bahasa C telah

menemukan beberapa “jalan pintas” yang kemudian menjadi fitur unggulan bahasa C, bahkan

bisa dianggap sebagai fitur paling populer. Bahasa C# tentu saja mengikuti popularitas tersebut

untuk mendapatkan popularitas yang lebih dari para programmer dalam bahasa C. Kita tidak

harus menggunakan jalan pintas tersebut, tapi memang hal tersebut seringnya dapat mengurangi

pengetikan yang kita lakukan, dan juga untuk membuat program kita terlihat lebih pendek, lebih

jelas, atau lebih mudah untuk dipahami.

Fitur yang dimaksud adalah untuk menambahkan sebuah nilai ke dalam sebuah variabel yang

telah ada. Sebagai contoh:

BukuYangHilang = BukuYangHilang + BukuYangHilangHariIni;

Kita tidak perlu mengetik variabel yang sama dua kali, jika memang kita hanya menambahkan

sesuatu kepada variabel tersebut. Bahasa C# mengizinkan kita untuk menyingkat penulisan

statemen di atas menjadi seperti di bawah ini:

BukuYangHilang += BukuYangHilangHariIni;

Perhatikan tanda plus di samping tanda sama dengan. Jika kita menyebutnya “plus sama dengan”

atau "plus equal", maka para programmer bahasa pemrograman keluarga C (C, C++, Java, atau

C#) akan mengetahui apa yang kita maksudkan. Tanda plus sama dengan secara formal di dalam

C# Language Specification disebut sebagai "compound assignment operator." Selain

penjumlahan, kita juga bisa menggunakan perkalian, pengurangan, pembagian, atau pembagian

sisa. Kita bisa menulis:

BukuYangHilang -= BukuYangDitemukanHariIni;

Berarti nilai yang berada di sebelah kanan akan dikurangkan dari variabel yang berada di sebelah

kiri.

Kita juga bisa menggunakan operator perkalian dengan menggunakan metode yang sama:

Budget /= 2;

Page 62: Belajar Bahasa C Sharp

Berarti variabel Budget akan bernilai setengah nilai variabel Budget sebelumnya, sementara:

Gaji *= 2;

Berarti nilai variabel Gaji akan bernilai 2 kali lebih besar dibandingkan dengan nilai variabel

Gaji sebelumnya.

Operator pembagian sisa juga valid di dalam statemen penugasan gabungan:

JumlahSisaKue %= OrangKelaparan;

Sebagai contoh, jika JumlahSisaKue adalah 11 dan OrangKelaparan sama dengan 3, dan masing-

masing dari mereka memiliki jumlah kue yang sama, maka nilai JumlahSisaKue akan memiliki

nilai 2.

Kita juga bisa menggunakan beberapa penugasan gabungan di dalam ekspresi yang besar, seperti

di bawah ini

C = (A += 4) / (B *= 7);

Kalau kita perhatikan contoh-contoh di atas, mungkin kita akan beranggapan bahwa hanya

variabel sajalah yang bisa digunakan di dalam beberapa penugasan gabungan. Tapi, sebenarnya,

kita bisa lho menggunakannya langsung dengan angka 1, sehingga nilai sebuah variabel

bertambah 1 atau berkurang 1. Sebagai contoh, saat melakukan pemilihan umum, perangkat

lunak yang digunakan sebagai penghitung suaranya akan merespons dengan instruksi seperti ini:

PemilihSBYJK=PemilihSBYJK+1;

Apa yang terjadi saat ekspresi di atas dieksekusi? Variabel PemilihSBYJK akan bertambah 1,

bukan? Seperti halnya kita ketahui kita dapat meringkas bentuk ekspresi di atas menjadi bentuk

seperti:

PemilihSBYJK+=1;

Atau kita juga bisa menggunakan satu buah plus tambahan, sehingga menjadi seperti di bawah

ini:

Page 63: Belajar Bahasa C Sharp

PemilihSBYJK++;

Nah, operator ++ disebut sebagai operator penaikan (increment operator). Operator tersebut

merupakan operator unary yang memiliki prioritas yang sangatlah tinggi. Tanda plus-plus

tersebut juga bisa diletakkan sebelum sebuah variabel, atau bahkan setelah variabel.

++PemilihSBYJK;

Kita juga menggunakan operator -- sebagai operator penurunan (decrement operator) yang dapat

digunakan untuk mengurangi nilai dari sebuah variabel:

PemilihSBYJK--;

atau operator itu bisa kita letakkan sebelum variabel:

--PemilihSBYJK;

Dalam beberapa statemen yang ditulis di atas sejauh ini, kita lihat tidak ada perbedaan antara

operator penaikan dan operator penurunan yang diletakkan sebelum variabel atau sesudahnya.

Akan tetapi, sebenarnya di sana ada sebuah perbedaan yang signifikan, apalagi kalau kita

menggunakannya di dalam ekspresi yang lebih besar. Sebagai contoh, anggap saya memiliki

sebuah variabel A yang memiliki nilai A, dan kita menulis program dengan di dalamnya terdapat

statemen berikut:

B = A++;

Apa yang akan terjadi? Statemen di atas akan menjadikan nilai B sama dengan nilai A, yakni 0,

lalu menaikkan nilainya. Setelah statemen di atas dieksekusi, maka nilai B adalah 0, sementara

nilai A adalah 1. Akan tetapi bandingkan dengan bentuk seperti ini:

B = ++A;

Apa yang akan terjadi? Statemen di atas akan menaikkan nilai variabel A lalu memberikan

nilainya kepada variabel B. Setelah statemen tersebut dieksekusi, kedua variabel A dan B

bernilai sama, yakni 1. Perhatikan perbedaannya: saat kita menggunakan A++ berarti, nilai A

Page 64: Belajar Bahasa C Sharp

akan dinaikkan setelah nilainya digunakan di dalam ekspresi, sementara ++A berarti nilai A

dinaikkan sebelum nilainya digunakan di dalam ekspresi.

Page 65: Belajar Bahasa C Sharp

Tipe data primitif bilangan bulat (integer)

Mengenal Data dan Tipe Data

Oke deh, sebelum melangkah lebih jauh, lebih baik kita belajar terlebih dahulu mengenai apa sih

tipe data itu. Data, adalah bentuk jamak dari Datum, yang berarti "to give" atau "to grant".

Secara literal, Datum berarti sebongkah informasi. Secara istilah, data dapat disamakan dengan

informasi yang diperoleh dari eksperimen atau survei yang digunakan sebagai dasar pengambilan

konklusi. Dalam ilmu komputer, data merujuk kepada informasi yang dapat diproses oleh

komputer, yang dapat berupa angka-angka, teks, gambar, suara, video, dan lain sebagainya yang

dapat disimpan di dalam memori komputer.

Sementara itu, menurut Wikipedia, tipe data atau data type dalam bahasa pemrograman merujuk

kepada definisi sekumpulan nilai dan operasi apa saja yang diizinkan terhadap nilai-nilai

tersebut.

Whew! Berat nggak definisinya? Oke, seiring dengan waktu kita akan belajar bahwa sebenarnya

tipe data itu nggak seberat definisinya—he-he!

Bilangan Bulat (Integer)

Bilangan bulat atau Integer (disebut juga sebagai int di dalam C#) hampir ditemukan di semua

tipe program. Oleh karena itu, adalah penting bagi seorang programmer untuk mengetahui secara

pasti apa itu integer, dan di mana letak kekuatan dan kekurangannya. Sebagai contoh, berapa sih

bilangan yang dapat ditampung di dalam tipe data integer? Untuk menjawabnya, kita bisa

menulis sebuah program C# yang menunjukkan jawabannya:

using System;

class Program0201

{

static void Main()

Page 66: Belajar Bahasa C Sharp

{

int x = 2;

Console.Title = "Program0201 (x=2)";

Console.WriteLine(x);

Console.WriteLine(x *= x);

Console.WriteLine(x *= x);

Console.WriteLine(x *= x);

Console.WriteLine(x *= x);

Console.WriteLine(x *= x);

Console.WriteLine(x *= x);

Console.WriteLine(x *= x);

Console.WriteLine(x *= x);

Console.WriteLine(x *= x);

Console.ReadKey();

}

}

Whew, kalau dilihat, kode sumber di atas adalah banyak yang sama. Untuk sementara, kita dapat

melakukan copy-paste saja dulu deh, meski di dalam C# ada metode yang jauh lebih efisien

(nanti juga akan dibahas). Oke, apa yang akan dikerjakan oleh program di atas? Program di atas

akan mendeklarasikan sebuah variabel dengan nama x dan tipe data int, dan kita memberinya

nilai 2. Dalam statemen-statemen selanjutnya akan melakukan perkalian dengan bilangan

sebelumnya, dan hasilnya pun akan ditampilkan, karena di sana telah terdapat metode

WriteLine(). Nah, saat dijalankan, program tersebut akan menghasilkan tampilan seperti

berikut:

Page 67: Belajar Bahasa C Sharp

Nah lho! Awalnya programnya benar menghasilkan nilai-nilai 2, 4, 16, 256, 65536, tapi habis

itu, kok malah hasilnya 0? Apakah ada yang salah? Misterius, bukan? Kenapa cuma lima nilai

saja yang dapat dihitung, sementara nilai keenam menghasilkan 0. Karena nilai x pada statemen

keenam adalah 0, maka nilai selanjutnya adalah 0 juga, karena bagaimanapun juga 0 dikalikan

dengan 0 selalu menghasilkan nilai 0!.

Nah, yang jadi pertanyaan "Kenapa 65536 dikalikan 65536 sama dengan 0?". Lalu, coba kita

modifikasi nilai x=2 di dalam program di atas dengan menggunakan nilai baru x=3, kenapa juga

hasilnya negatif?

Meski nilai-nilai hasil di atas terlihat sangatlah salah, nilai-nilai tersebut tidaklah dikeluarkan

oleh komputer secara acak, akibat "kegilaan". Meskipun sangatlah mengejutkan, nilai-nilai

tersebut sangatlah bisa ditebak. Oleh karenanya, untuk menghindari kebingungan kita akibat

adanya nilai-nilai seperti itu di dalam program "beneran" buatan kita, maka kita harus tahu

bagaimana variabel dengan jenis-jenis berbeda disimpan dan dimanipulasi di dalam komputer.

Binary Digit

Dalam komputer digital, semua informasi dikodekan sebagai sekumpulan 'bit', sebuah kata yang

berarti binary digit (digit biner). Sebuah bit adalah bentuk paling sederhana dari informasi

yang disimpan di dalam komputer digital. Lebih jauh lagi, dalam perangkat keras komputer,

sebuah bit merujuk kepada keberadaan tegangan listrik dan ketiadaannya. Akan tetapi, bagi

manusia, kita bisa menyimbolkan nilai dari sebuah bit sebagai 0 atau 1. Saat bit tertentu bernilai

Page 68: Belajar Bahasa C Sharp

0 atau 1, maka 0 dan 1 tersebut kadang-kadang disebut sebagai keadaan dari bit tersebut atau

bit state.

Sebuah bit mampu menampung dua keadaan, dan oleh karena itu bit tersebut akan mampu

membedakan antara dua buah kemungkinan yang sangat jauh berbeda: Ya atau tidak. Benar atau

salah. Hidup atau Mati. Halal atau Haram. Semuanya tergantung bagaimana bit tersebut

digunakan. Dua buah bit akan memunculkan empat buah keadaan yang berbeda: 00, 01, 10, dan

11. Tiga buah bit dapat meningkatkan keadaan menjadi delapan buah keadaan: 000, 001, 010,

011, 100, 101, 110, dan 111. Setiap tambahan bit, akan mengakibatkan keadaan menjadi dua kali

lipat lebih banyak. Untuk sebuah kumpulan bit, jumlah keadaan pun dapat dirumuskan menjadi:

2 pangkat bit

Komputer pribadi dengan prosesor Intel Pentium (Pentium, Pentium MMX, Pentium Pro,

Pentium II, Pentium III, dan Pentium 4) dan keluarganya yang kompatibel seperti AMD K6 dan

Athlon disebut sebagai komputer 32-bit karena memang mereka bekerja dengan menggunakan

potongan-potongan data berukuran 32 bit. Sementara itu komputer dengan prosesor Intel Core,

Intel Core 2, Intel Xeon, Intel Itanium, AMD Athlon 64, AMD Phenom, AMD Opteron dan Intel

Itanium 2 disebut sebagai komputer 64-bit, karena memang mereka bekerja dengan

menggunakan susunan 64-bit untuk satuan prosesnya. Beberapa komputer generasi awal hanya

dapat menangani 8 bit sekali jalan, dan kemudian 8 bit kini disebut sebagai 1 byte. Satuan byte

masih sering kita temukan di dalam komputer-komputer generasi terbaru: di dalam memori, hard

disk, USB flash drive, dan ukuran berkas komputer semuanya diukur dalam satuan byte.

Seiring dengan 0 dan 1 digabungkan menjadi satu, mereka pun akhirnya mulai terlihat seperti

susunan angka, dan memang hal tersebutlah yang terjadi. Seperti halnya ketika kita menulis

angka desimal sebagai kombinasi dari digit-digit desimal dari 0 hingga 9, kita juga bisa menulis

angka biner dengan menggunakan kombinasi dari digit biner, yakni 0 dan 1.

Bilangan Bulat Bertanda

Bahasa C# menggunakan 32 bit (atau setara dengan 4 byte) untuk merepresentasikan sebuah

variabel bertipe data int. Sebuah variabel bertipe data int dapat menyimpan nilai positif dan

Page 69: Belajar Bahasa C Sharp

negatif, sehingga definisi formal untuk int (dalam C# Language Specification) adalah 32-bit

signed integer (bilangan bulat bertanda 32-bit); kata "signed" berarti bahwa salah satu dari bit-

bit tersebut menandakan apakah sebuah angka yang dimaksud adalah negatif atau positif. Karena

int memiliki 32 bit, maka ia dapat menyimpan hingga 2 pangkat 32 nilai yang berbeda (tepatnya

4.294.967.296) Nilai-nilai tersebut dapat dibagi hampir sama rata antara bilangan positif dan

negatif. Mengapa saya katakan "hampir sama rata", karena memang di sana jumlah nilai positif

lebih sedikit dibandingkan dengan nilai negatif, dan hal tersebut dikarenakan salah satu dari

kombinasi-kombinasi bit haruslah mampu merepresentasikan 0. Nilai 0 desimal jika

direpresentasikan dalam tipe data int sama dengan 32 buah angka 0 yang disusun seperti :

0000-0000-0000-0000-0000-0000-0000-0000

Lho, kenapa ada tanda stripnya? Itu hanyalah untuk memudahkan kita untuk membacanya,

karenanya saya membaginya ke dalam kelompok bit berjumlah 4 digit. Dari angka 0, kita dapat

memulai penghitungan hingga angka-angka positif lainnya:

0000-0000-0000-0000-0000-0000-0000-0001 ekuivalen dengan 1 desimal

0000-0000-0000-0000-0000-0000-0000-0010 ekuivalen dengan 2 desimal

0000-0000-0000-0000-0000-0000-0000-0011 ekuivalen dengan 3 desimal

0000-0000-0000-0000-0000-0000-0000-0100 ekuivalen dengan 4 desimal

0000-0000-0000-0000-0000-0000-0000-0101 ekuivalen dengan 5 desimal

0000-0000-0000-0000-0000-0000-0000-0110 ekuivalen dengan 6 desimal

0000-0000-0000-0000-0000-0000-0000-0111 ekuivalen dengan 7 desimal

0000-0000-0000-0000-0000-0000-0000-1000 ekuivalen dengan 8 desimal

dan seterusnya, dan seterusnya. Setiap angka-angka biner tersebut merupakan angka sebelumnya

ditambah dengan 1. Menambah sebuah angka biner sama saja seperti menambah angka desimal:

kita dapat memulainya dari digit paling kanan, dan bekerja hingga ke kiri. Di dalam bilangan

biner, 0 ditambah 0 sama dengan 0, 0 ditambah 1 sama dengan 1, dam 1 ditambah 1 sama

dengan 10. Coba Anda tuliskan di kertas, kira-kira berapa nilai biner untuk 9 hingga 16?

Seperti yang telah kita ketahui, bahwa setiap bilangan desimal yang merepresentasikan nilai

pangkat 10 (seperti halnya 10/sepuluh, 100/seratus, 1000/seribu, 10000/sepuluh ribu, atau

bahkan 10000000000/satu miliar) terdiri atas 1 yang diikuti dengan satu nol/0 atau banyak nol.

Page 70: Belajar Bahasa C Sharp

Bilangan biner juga sama: bilangan biner yang merepresentasikan nilai dari pangkat 2 ditulis

sebagai sebuah bit 1 yang diikuti dengan satu nol hingga banyak nol. Sebagai contoh:

0000-0000-0000-0000-0000-0001-0000-0000

sama dengan 256 atau 28 dan

0000-0000-0000-0001-0000-0000-0000-0000

sama dengan 65.536 atau 216.

Fakta apa yang bisa kita ambil dari kejadian di atas? Ya, kita bisa mengubah bilangan biner

menjadi bilangan desimal dengan mudah. Setiap digit di dalam bilangan biner akan

merepresentasikan pangkat 2. Sebuah bilangan biner dengan lima buah bit bernilai 1 seperti di

bawah ini:

0000-0000-0000-0001-0000-0010-0000-1101

adalah hasil penjumlahan dari lima buah bilangan biner dasar pada tempat di mana setiap bit

bernilai 1:

0000-0000-0000-0000-0000-0000-0000-0001 atau 20 atau 1

0000-0000-0000-0000-0000-0000-0000-0100 atau 22 atau 4

0000-0000-0000-0000-0000-0000-0000-1000 atau 23 atau 8

0000-0000-0000-0000-0000-0010-0000-0000 atau 29 atau 512

0000-0000-0000-0001-0000-0000-0000-0000 atau 216 atau 65536

Maka totalnya adalah 1 + 4 + 8 + 512 + 65536 = 66061 dalam bilangan desimal.

Saat kita terus mengubah semua digit dalam susunan angka 32-bit, maka kita pada akhirnya akan

mendapatkan:

0111-1111-1111-1111-1111-1111-1111-1111

atau setara dengan 2.147.483.647.

Page 71: Belajar Bahasa C Sharp

Oke kita berhenti sejenak di sini terlebih dahulu. Di dalam contoh di atas, kita melihat mengapa

sih semua bit pertama dari angka 32-bit tersebut masih merupakan angka 0? Sebenarnya apa

yang kita lakukan adalah mencari nilai kombinasi dari 31 bit lainnya. Dan kita menemukan ada

231 atau 2.147.483.648 kombinasi, yang merepresentasikan angka desimal dari 0 hingga

2.147.483.647. Dengan 31 bit, kita tidak dapat menghitung semua angka hingga 2.147.483.648

karena kita membutuhkan sebuah kombinasi bit yang merepresentasikan angka 0. Jadi, angka

2.147.483.647 merupakan angka positif tertinggi yang bisa dicapai dengan menggunakan 32-bit

bilangan bulat bertanda (32-bit signed integer). Bilangan tersebut setara dengan 231-1.

Bit yang terletak pada sisi paling kiri, lazim dikenal dengan high bit, atau most significant bit

(MSB), dan saat membicarakan bilangan bulat bertanda (signed integer), bit yang terletak pada

sisi paling kiri juga disebut sebagai bit penanda. Setiap angka dengan bit penanda 1 adalah

negatif, sementara setiap angka dengan bit penanda 0 adalah positif. Cara yang dapat digunakan

untuk merepresentasikan bilangan bulat negatif di dalam komputer digital modern disebut juga

dengan komplemen dua, yang merujuk pada teknik yang digunakan untuk mengubah antara

bilangan positif dan negatif. Coba perhatikan daftar angka berikut ini, yang merupakan susunan

bilangan bulat negatif dengan panjang 32-bit:

1000-0000-0000-0000-0000-0000-0000-0000 sama dengan -2.147.483.648

1000-0000-0000-0000-0000-0000-0000-0001 sama dengan -2.147.483.647

1000-0000-0000-0000-0000-0000-0000-0010 sama dengan -2.147.483.646

1000-0000-0000-0000-0000-0000-0000-0011 sama dengan -2.147.483.645

Sebelumnya, saya pernah menyebutkan mengenai cara bagaimana menaikkan angka biner. Jika

kita menambahkan 1 pada setiap biner ke dalam angka-angka di atas, kita akan memperoleh nilai

yang lain. Tidak ada perbedaan di dalam peraturan penjumlahan hanya karena salah satu angka

tersebut dianggap negatif. Coba, teruskan hingga menyentuh angka 0:

1111-1111-1111-1111-1111-1111-1111-1100 sama dengan -4

1111-1111-1111-1111-1111-1111-1111-1101 sama dengan –3

1111-1111-1111-1111-1111-1111-1111-1110 sama dengan –2

1111-1111-1111-1111-1111-1111-1111-1111 sama dengan –1

Page 72: Belajar Bahasa C Sharp

Sekarang, jika kita tambahkan satu bilangan 1 lagi untuk mencapai nilai 0, maka kita akan

menjadikan bilangan tersebut bilangan 33-bit:

1-0000-0000-0000-0000-0000-0000-0000-0000

Akan tetapi, kita sedang berurusan dengan angka 32-bit di sini, dan bit yang ke-33 pun dapat

diabaikan. Menambahkan 1 dengan -1 akan menghasilkan bilangan berikut:

0000-0000-0000-0000-0000-0000-0000-0000

Atau merupakan angka 0, tempat kita mulai.

Saat berurusan dengan komplemen dua dalam bilangan bulat bertanda, kita akan melakukan

negasi (yakni pengubahan sebuah angka dari bilangan positif menjadi bilangan negatif dan

sebaliknya) dalam dua langkah. Langkah pertama adalah kita memutar semua bit yang ada, yang

bisa dilakukan dengan menjadikan semua bit bernilai 1 menjadi bit bernilai 0, dan semua bit

bernilai 0 menjadi bit bernilai 1. Jika sudah, selanjutnya kita menambahkan angka 1 di depannya.

Oke, sekarang jelas kan, bahwa sebuah bilangan bulat 32-bit bertanda dapat memiliki jangkauan

dari -2.147.483.648 hingga 2.147.483.647. Beberapa perhitungan (seperti halnya bilangan

65.536 dikalikan dengan bilangan 65.536 seperti di dalam program0201 kita di atas), akan

menghasilkan sebuah nilai di luar daya tampungnya, yakni 4.294.967.296, yang jika

dikonversikan ke dalam bilangan binernya memiliki 33 bit:

1-0000-0000-0000-0000-0000-0000-0000-0000

Akan tetapi, karena hanya 32-bit saja jatah yang tersedia untuk menyimpan hasilnya, hanya 32-

bit terendah lah yang dipertahankan. Bilangan 1 yang terletak di kiri yang merupakan bit yang

paling signifikan akan diabaikan dan dibuang, sehingga hasil akhirnya adalah 0. Sehingga, saat

berurusan dengan bilangan bulat berukuran 32-bit, nilai 232 pun akan bernilai 0.

Sekilas, representasi 32-bit tersebut seolah-olah menjadi sebuah lingkaran setan. Saat kita

menambahkan 1 kepada nilai biner -1, dan mempertahankan hanya 32-bit bit terbawah, maka

kita akan mendapatkan 0. Hal tersebut normal saja. Akan tetapi, berikut adalah nilai dalam

bilangan biner dari 2.147.483.647:

Page 73: Belajar Bahasa C Sharp

0111-1111-1111-1111-1111-1111-1111-1111

dan, saat menambahkan 1 ke dalam nilai tersebut, hasilnya adalah:

1000-0000-0000-0000-0000-0000-0000-0000

atau sama dengan -2.147.483.648. Dengan kata lain, kode di bawah ini:

int A = 2147483647;

Console.WriteLine(A + 1);

Akan menampilkan hasil:

–2147483648

Dalam versi Program0201 yang kita modifikasi dengan mengubah nilai x menjadi 3, saat nilai

43.046.721 dikalikan dengan dirinya akan menghasilkan sebuah bilangan negatif. Lho kok bisa?

Kita cari tahu yuk! Representasi biner dari bilangan 43.046.721 adalah:

0000-0010-1001-0000-1101-0111-0100-0001

Normalnya, jika kita mengalikan bilangan tersebut dengan dirinya sendiri akan menghasilkan

1.853.020.188.851.841, atau jika direpresentasikan dalam bilangan biner, hasilnya adalah:

0110-1001-0101-0100-1111-1110-0010-0001-1110-0011-1110-1000-0001

Akan tetapi, karena saat itu nilai X direpresentasikan di dalam bilangan bulat 32-bit, maka hanya

32-bit bit terendah sajalah yang akan dianggap dalam perhitungan tersebut:

1110-0010-0001-1110-0011-1110-1000-0001

Kalau kita lihat, bit tertingginya adalah 1, yang berarti bahwa bit tersebut adalah bilangan

negatif. Untuk mencari berapa sih nilainya, balikkan saja semua bitnya menjadi:

0001-1101-1110-0001-1100-0001-0111-1110

Lalu, tambahkan 1:

Page 74: Belajar Bahasa C Sharp

0001-1101-1110-0001-1100-0001-0111-1111

Dan hasilnya adalah 501.334.399, yang berarti hasil perkalian dari 43.046.721 dengan dirinya

sendiri akan dipotong menjadi 32-bit, yakni -501.334.399. Coba lihat, berapa hasilnya? Sama

tidak?

Overflow dan Underflow

Kok, ada anomali ya? Katanya komputer barang yang canggih, tapi kenapa ya? Sebelumnya saya

pernah katakan bahwa komputer adalah barang yang bego, yang tidak akan bergerak tanpa ada

instruksi! Komputer, hanya bisa kita anggap sebagai budak saja lah. Lalu kenapa terjadi anomali,

karena di sana terjadi apa yang disebut dengan overflow dan underflow. Nah lho apa lagi tuh?

Kejadian overflow akan terjadi saat nilai sebuah bilangan bulat melebihi nilai positif

maksimumnya, sementara underflow akan terjadi saat nilai sebuah bilangan bulat kurang dari

nilai negatif minimumnya. Tapi, para programmer seringnya menggunakan kata "overflow" saja

untuk menjelaskan kedua fenomena tersebut. Program-program C# pada dasarnya mengizinkan

adanya overflow, karena C# dapat melakukan penjumlahan, pengurangan perkalian, dan

pembagian terhadap bilangan bulat tanpa adanya kekhawatiran apakah nantinya hasilnya dapat

ditampung pada ruangan 32-bit atau tidak. Mengabaikan overflow dalam melakukan perhitungan

aritmetika terhadap bilangan bulat adalah sebuah cara yang paling efisien dan paling cepat

dilakukan oleh komputer. Komputer, namanya saja budak bego, akan terus saja meneruskan

perhitungan tersebut tanpa harus berhenti sejenak untuk mengecek apakah terjadi overflow atau

tidak.

Meskipun beberapa program aplikasi mungkin dapat mengambil keuntungan dari overflow

bilangan bulat, dalam banyak kasus, overflow menjadi sebuah masalah dan dianggap menjadi

sebuah bug di dalam kode kita. Sebagai contoh, program sebuah bank yang menerima uang

hingga miliaran rupiah, adalah sebuah program yang tidak menerima overflow, karena ketika

seorang nasabah memiliki hutang -2.147.483.647 rupiah dalam saldo, lalu ada bunga 1 rupiah,

maka saldonya akan berubah menjadi 2.147.483.648, yang berarti hal tersebut berubah menjadi

keuntungan buat si penghutang tersebut. Siapa penjahatnya? Bukannya teller atau kasir, tapi

overflow lah yang jadi penjahatnya.

Page 75: Belajar Bahasa C Sharp

Teknik pertama melibatkan kompiler C# itu sendiri. Kita dapat menginstruksikan kompiler C#

untuk membuat kode yang mampu melakukan pengecekan terhadap overflow terhadap bilangan

bulat. Ini merupakan contoh dari opsi kompiler. Untuk mengilustrasikannya, marilah kita

kembali ke contoh program Program0201.cs.

Jika kita menggunakan Microsoft Visual Studio atau Microsoft Visual C# Express Edition,

bukalah jendela properti Program0201 dengan cara mengklik kanan pada proyek yang

bersangkutan lalu memilih menu Properties. Pada Project Properties yang keluar selanjutnya,

bukalah tab Build. Di sana ada sebuah tombol Advanced, dan tekanlah tombol tersebut untuk

memunculkan Advanced Build Settings seperti yang terlihat pada gambar berikut. Centanglah

checkbox Check for arithmetic overflow/underflow. Lalu tekan OK untuk menutup kotak

dialog tersebut.

Lakukan kompilasi, dan jalankan programnya. Saat program Program0201 berjalan, program

tersebut akan menampilkan lima buah baris pertama, sebelum akhirnya akan memunculkan

sebuah eksepsi.

Page 76: Belajar Bahasa C Sharp

Kita juga sebenarnya bisa melakukan pengecekan terhadap overflow pada ekspresi-ekspresi

secara individual di dalam kode sumber dengan menggunakan operator checked. Statemen

berikut:

B = checked(5 * A);

akan mengeluarkan sebuah eksepsi, meskipun kita telah membuang tanda centang pada opsi

Check for arithmetic overflow/underflow, jika memang di dalam ekspresi tersebut akan

menghasilkan sebuah nilai yang berada di luar jangkauan. Lawan dari operator checked adalah

unchecked, sehingga ekspresi di atas diubah menjadi seperti:

B = unchecked(5 * A);

sehingga ekspresi tersebut tidak akan mengeluarkan eksepsi, meski opsi Check for arithmetic

overflow/underflow kita telah centang.

Kita juga bisa menggunakan operator checked dan unchecked dalam sebuah blok kode (yang

diapit oleh tanda kurung keriting { dan }). Perhatikan contoh berikut:

checked

{

A += 1000000;

B = B * A;

}

Page 77: Belajar Bahasa C Sharp

Setiap statemen yang berada di dalam blok tersebut yang nantinya akan menghasilkan overflow

dalam operasi aritmetika akan mengeluarkan eksepsi. Operator unchecked juga bisa digunakan

sebagai lawan dari checked.

Pilihan ketiga adalah dengan menggunakan pilihan kompiler C# (csc.exe) dengan tambahan

switch /checked+ untuk mengaktifkan proses pengecekan atau /checked- untuk menonaktifkan

proses pengecekan.

csc.exe Program0201.cs /checked+

(perintah ini sama saja dengan opsi Check for arithmetic overflow/underflow dalam

SharpDevelop atau IDE lainnya.)

Jadi, kita punya banyak pilihan. Kita juga bisa mengizinkan kalkulasi aritmetika untuk terus

maju tanpa memperhatikan kemunculan overflow (yang mungkin akan menyebabkan kesalahan

di dalam hasilnya), atau kita bisa menghentikan kalkulasi seperti ini untuk menyebabkan sebuah

eksepsi. Untuk saat ini, memang tidak ada pilihan lagi, karena memang eksepsi bisa

menghentikan proses eksekusi program. (sebenarnya ada sebuah cara tentang bagaimana sebuah

program dapat mendeteksi kapan eksepsi dapat dimunculkan dan dapat kembali ke dalam proses

eksekusi saat program selesai melakukan eksekusi. Tapi saat ini kita belajar ini dulu saja ya).

Mungkin, kita berkata "ah lebih baik gunakan opsi /checked+ saja lah, biar nantinya program

yang saya buat nggak akan muncul overflow, toh overflow akan mematikan program saya!" Jujur

saja, saya menentang hal tersebut! Mengaktifkan pengecekan overflow untuk semua operasi

aritmetika dapat menurunkan performa dan kecepatan program yang kita buat. Oke, yang saya

tentang adalah ketika kita membuat program untuk didistribusikan ke pengguna, kita

mengaktifkan opsi pengecekan overflow, tapi saat kita mengembangkan program kita, ya nggak

apa-apa lah! Toh yang menggunakan program, kita-kita juga. Saran saya, gunakan saja operator

checked dan unchecked pada statemen dan ekspresi yang mungkin akan membuat eksepsi

overflow, daripada menggunakan opsi /checked+ atau /checked-, sebelum kita belajar

mengenai penangan eksepsi secara lebih elegan!

Bilangan Bulat Bertanda

Page 78: Belajar Bahasa C Sharp

Whew! Mungkin yang ada di dalam pikiran kita, kenapa sih saya menggunakan int melulu

seolah-olah C# hanya mendukung int? Oke deh. Saya kembali ke jalan lagi. Tipe data int

memang merupakan tipe data yang paling populer, akan tetapi sebenarnya, C# mendukung

keberadaan tipe data lainnya lho.

Anggap kita sedang menangani data populasi manusia di Indonesia. Pasti, tidak ada penduduk

yang dianggap negatif oleh komputer, sehingga kenapa juga kita menggunakan signed integer?

Lagian, kita juga nggak bakal menggunakan setengah nilai dari total nilai yang disediakan oleh

signed integer (berarti semiliar data, wow! Padahal Indonesia kan cuma 250 juta jiwa doang).

Lalu, apa dong yang bisa digunakan? Kita bisa menggunakan unsigned integer (bilangan bulat

tidak bertanda), ketimbang kita menggunakan bilangan signed integer (bilangan bulat bertanda).

Bahasa C# mendukung tipe data bilangan bulat tidak bertanda berukuran 32-bit, yang disebut

dengan uint. Cara bacanya: "you int". Kita bisa mendeklarasikan uint sebagaimana kita

mendeklarasikan int, dengan cara:

uint A;

Bilangan bulat tak bertanda tidak memiliki bit penanda (sign bit). Bit yang paling kiri (most

significant bit) akan dianggap sama seperti halnya bit yang lain. Seperti halnya int, uint juga

dimulai dari 0:

0000-0000-0000-0000-0000-0000-0000-0000

Dan terus menerus naik hingga nilai maksimum dari int:

0111-1111-1111-1111-1111-1111-1111-1111 atau setara dengan 2.147.483.647

Akan tetapi, tidak seperti int, uint akan terus menerus mendapatkan nilai positif:

1000-0000-0000-0000-0000-0000-0000-0000 atau setara dengan 2.147.483.648

Hingga nilai maksimum positifnya:

1111-1111-1111-1111-1111-1111-1111-1111 atau setara dengan 4.294.967.295

Page 79: Belajar Bahasa C Sharp

sehingga, tipe data uint dapat menyimpan nilai dari 0 hingga 4.294.967.295 (232-1). Sebuah tipe

data uint saat ini mampu menangani data populasi orang Indonesia, dan mungkin semua negara

di dunia. Akan tetapi, saat harus menghadapi jumlah populasi seluruh manusia di Bumi, uint pun

takluk!

Sama seperti tipe data int, uint juga dapat terkena "kutukan" overflow dan underflow. Perhatikan

contoh di bawah ini:

uint A = 4294967295;

A += 1;

Variabel A akan menghasilkan nilai 0 jika pengecekan overflow terhadap integer tidak

dilakukan, atau bernilai 1 saat pengecekan overflow dilakukan.

Bilangan bulat kurang dari 32-bit

Kita juga bisa menggunakan bilangan bulat yang lebih kecil daripada 32-bit. Jika bilangan bulat

64-bit dinamakan dengan long (yang berarti panjang dalam bahasa Inggris), maka lawan dari

long adalah short. Untuk bilangan short tidak bertanda, digunakanlah tipe data ushort.

Panjangnya berapa sih si short ini? Dalam C#, short memiliki panjang hingga 16-bit, sehingga

mampu menampung nilai dari 0 hingga 65536. Tipe data short bertanda memiliki jangkauan dari

-32768 hingga 32767, sementara tipe data ushort memiliki jangkauan dari 0 hingga 65536.

Selain short dan ushort, C# juga memiliki sebuah tipe data lagi yang digunakan untuk

menyimpan bilangan bulat dengan panjang 8-bit, sehingga totalnya mampu menampung 256

buah angka. Seperti halnya bilangan bulat lainnya, tipe data ini juga terbagi atas dua buah jenis,

yakni bertanda (sbyte) dan tidak bertanda (byte). Tipe data sbyte dapat memiliki nilai dari -

127 hingga 128, sementara byte dapat memiliki nilai dari 0 hingga 255.

Tipe-tipe data seperti int, long, dan short semuanya merupakan tipe data bilangan bulat

bertanda; sementara uint, ulong, dan ushort merupakan tipe data bilangan bulat tak bertanda.

Kita bisa membedakan antara keduanya dengan melihat keberadaan huruf "u" di sana. Akan

Page 80: Belajar Bahasa C Sharp

tetapi, untuk bilangan bulat 8-bit, penamaannya dibalik: byte merupakan tipe data bilangan bulat

tidak bertanda, sementara sbyte merupakan bilangan bulat bertanda.

Beberapa pertimbangan

Secara umum, meski jika sebuah variabel tertentu hanya digunakan untuk menyimpan bilangan

bulat dengan nilai kurang dari 32767, kita lantas nggak harus menggunakan short ketimbang int.

Prosesor 32-bit modern saat ini dapat menangani nilai 32-bit dengan lebih mudah dan efisien jika

dibandingkan dengan 16-bit.

Rumus umum yang bisa digunakan untuk menulis variabel bilangan bulat adalah “saat

membutuhkan bilangan bulat, mulailah dari int.” Tipe data int mungkin menjadi pilihan terbaik

untuk sebagian besar kebutuhan terhadap bilangan bulat yang kita butuhkan. Jika memang kita

membutuhkan nilai yang lebih besar lagi, maka gunakanlah long.

Tipe data Integer dan .NET Framework

Pada Modul 2, saya menyebutkan bagaimana caranya untuk mengakses dokumentasi yang

terdapat di dalam .NET Framework. Jika kita telusuri ruang nama System di dalam

dokumentasi .NET Framework, kita akan menemukan sebuah struktur dengan nama Int32.

Nama "int" dalam C# sebenarnya merupakan alias (singkatan atau nama lain yang lebih pendek)

bagi struktur System.Int32 yang terdapat di dalam .NET Framework. Tujuh tipe data bilangan

bulat lainnya juga merupakan alias untuk struktur-struktur lainnya. Ketimbang kita

menggunakan sebuah variabel dengan menggunakan bahasa C#:

int A;

kita juga bisa mendeklarasikannya dengan menggunakan nama struktur .NET:

System.Int32 A;

Kedua statemen di atas adalah 100% sama! Atau, bahkan jika kita telah menggunakan direktif:

using System;

Page 81: Belajar Bahasa C Sharp

pada bagian atas kode kita, kita bahkan menyingkat pendeklarasian bilangan bulat bertanda

berukuran 32-bit dengan menggunakan statemen:

Int32 A;

Dan sekarang, ketimbang kita mengatakan bahwa kita mendeklarasikan sebuah variabel dengan

tipe data int, atau kita membuat objek dengan tipe data int, kita juga bisa menyebut hal tersebut

sebagai pembuatan sebuah kejadian (instance) dari struktur System.Int32. Whew! Apa lagi

tuh? Tapi, jika Anda bertanya kepada para programmer bahasa berorientasi objek, mereka akan

menjawab pilihan ketiga, ketimbang pilihan pertama dan kedua.