C# adalah salah satu keahlian pemrograman yang paling dicari saat ini. C# mirip dengan C++
dalam hal struktur pemrogramannya, akan tetapi juga cenderung ringkas seperti Visual Basic.
Sehingga C# menjadi bahasa pemrograman yang hebat dan mudah dipelajari.
Tujuan
Tujuan tutorial C# ini adalah membimbing Anda agar dapat membuat suatu aplikasi yang
bermanfaat. Ketika Anda selesai mempelajari tutorial ini, Anda paling tidak akan bisa
membuat suatu aplikasi windows forms yang berbasis database.
Metode belajar
Terkadang, tutorial ini akan menggunakan aplikasi Console untuk mendemontrasikan konsep
konsep di dalam tutorial ini, terkadang kita juga akan menggunakan aplikasi Windows
Forms. Hal ini dilakukan agar pengalaman belajar di situs ini singkat dan sederhana tapi juga
bersifat praktis. Karena sebagian besar dari kita "codeformoney", akan paling baik apabila
kita hanya mempelajari keahlian dan pengetahuan yang bersifat praktis, dan kita harus
melakukannya dengan cepat. Bukankah begitu?
IDE C#
Untuk mengetik program, biasanya kita menggunakan suatu editor atau program/software
yang lebih komplek yang biasa disebut IDE (Integrated Development Environment). Pada
umumnya, IDE menawarkan banyak kemudahan untuk mengembangkan software sehingga
tidak dapat dibayangkan apabila kita harus mengembangkan software tanpa menggunakan
IDE. IDE biasanya menawarkan fitur sebagai berikut:
File explorer, untuk mengelola file atau script program. Biasanya bisa dibuka di dalam tab-
tab. Bayangkan apabila kita harus membuka satu persatu file program di dalam windownya
masing-masing, taskbar window kita akan dengan cepat menjadi penuh.
Intellisense, atau kadang disebut code completion. Adalah fitur untuk melengkapi kode kita
secara otomatis. Sebagai contoh, miaslnya kita mengetikkan "Cons", VIsual Studio akan
otomatis menampilkan pilihan pilihan objek, class atau variabel yang diawali dengan Cons,
misalnya Console.
Error highlighting, atau penanda error. Ketika kita mengetikkan kode yang salah, IDE
biasanya akan menandai kode-kode yang error tersebut dengan garis bawah keriting
berwarna merah. Hal ini memudahkan kita untuk melacak dan menghilangkan error error
sederhana.
Pertama tama, pastikan kita memilih Visual C# pada panel di sebelah kiri, kemudian pilih
"Windows Forms Application" atau "Console Application" pada panel tengah. Saya sarankan
untuk mencentang "Create directory for solution" agar lebih mudah mengelola file-file
program apabila diperlukan. Terakhir, beri nama project sepertlunya dan tentukan lokasi
penyimpanan file project. Tekan OK dan kita akan siap untuk membuat kode. Tentu saja kita
dapat juga membuat aplikasi WPF atau ASP.NET menggunakan Visual Studio, akan tetapi
topik tersebut berada di luar lingkup tutorial ini.
Solution Explorer
Ketika membuat suatu project baru berarti kita telah membuat beberapa file sekaligus
menggunakan Visual Studio pada lokasi yang telah kita pilih. Pada umumnya, lebih mudah
bagi kita untuk mengelola file kita dalam Visual Studio. Untuk itu, kita menggunakan panel
Solution Explorer. Panel ini biasanya terletak di bagian kanan window Visual Studio. Apabila
panel ini tidak tampak atau tertutup, kita selalu dapat menampilkan panel tersebut
menggunakan menubar: View > Solution Explorer, atau shortcutnya CTRL + W, S.
Hello World C#
Orang yang bukan programmer mungkin tidak tahu, akan tetapi hampir setiap kali seorang
programmer belajar bahasa pemrograman baru, ia akan mencoba menampilkan tulisan "Hello
World" pada layar sebagai program pertamanya. Jadi, mari kita say hello sekarang =D
Pertama-tama, buat aplikasi Console C#. Dan beri nama "HelloWorld" sebagai nama project.
Visual Studio akan otomatis membuatkan kode program sebagai berikut:
?
1
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
using System.Text;
5
6 namespace HelloWorld
7 {
8 class Program
9 {
static void Main(string[] args)
10 {
11 }
12 }
13}
14
static void Main, "Main" adalah suatu Method (metoda) yang akan dijalankan saat
program dijalankan. Ini adalah titik awal dari semua program C#. Sedangkan
static dan void adalah keyword yaitu kata-kata khusus pada visual studio yang
akan dijelaskan pada tutorial-tutorial berikutnya. Jangan hiraukan kata-kata tersebut
pada saat ini..
class Program. "Program" adalah nama dari class kita. Class adalah tempat dimana
kita meletakkan konsep-konsep pemikiran kita. Kita dapat memberi nama class kita
apa saja yang kita mau, biasanya suatu kata yang bermakna. Tetapi biarkan saja nama
tersebut untuk saat ini.
Namespace, adalah istilah dari Microsoft yaitu suatu nama yang menampung banyak
class. Kita mungkin tidak akan membahas mengenai namespace di sepanjang tutorial
kita. Cukup biarkan saja kode program bagian ini.
Pernyataan using, empat baris pertama pada kode di atas menyatakan bahwa
program kita akan menggunakan namespace yang disebutkan di situ. Kita tidak akan
bermain dengan bagian ini dalam waktu dekat, jadi tidak perlu dipikirkan. Hampir
selalu, kita biarkan saja bagian ini.
Untuk menyelesaikan program Hello World kita, kita tambahkan dua baris kode berikut ke
dalam kurung kurawal static void Main:
?
1static void Main(string[] args)
2{
3 Console.WriteLine("Hello World");
4 Console.ReadKey();
}
5
Penting untuk diketahui bahwa perintah-perintah pada program dieksekusi baris per baris
secara berurutan, sehingga perintah WriteLine akan dilaksanakan sebelum ReadKey. Setiap
baris program pada C# diakhiri dengan tanda titik koma.
Visual Studio akan mengkompilasi (menerjemahkan source code program ke bahasa mesin)
program dan akan muncul window command prompt pada layar dengan tulisan "Hello
World" di dalamnya. Tekan sembarang tombol untuk keluar dari program.
Kebiasaanku
Ini hanya masalah kebiasaan, tetapi biasanya Saya meletakkan kurung kurawal pembuka pada
akhir baris pembuka. Misalnya pada namespace, class dan method Main di atas, Saya
biasanya tidak meletakkan kurawal pembuka pada baris khusus seperti di atas, melainkan
pada akhir pada baris pembukanya, sehingga kode program Saya akan tampak seperti berikut:
?
1
2 using System;
3 using System.Collections.Generic;
using System.Linq;
4 using System.Text;
5
6 namespace HelloWorld {
7 class Program {
8 static void Main(string[] args) {
9 Console.WriteLine("Hello World");
Console.ReadKey();
10 }
11 }
12}
13
Format seperti di atas tampak lebih ringkas dan lebih mudah dibaca menurut Saya. Akan
tetapi,bahkan sampai saat ini, beberapa orang masih bertumpah darah memperdebatkan
format mana yang lebih baik. Anda bebas memilih yang manapun. Akan tetapi Saya akan
konsisten dengan formatting ini. Jika Anda ingin dengan cepat mengkonversi format kode
sebelumnya menjadi format kode kebiasaan Saya, klik menu Tools > Options... pada
menubar. Pada panel sebelah kiri, pilih "Text Editor > C# > Formatting > New Lines",
kemudian matikan centang semua pilihan pada panel sebelah kanan dan tekan tombol OK.
Terakhir, tekan tombol CTRL + K, D (tahan tombol ctrl, tekan k, tekan d dan lepaskan ctrl)
untuk memformat kode kita secara otomatis.
WinForms C#
Meskipun aplikasi console mudah dan sederhana untuk digunakan sebagai pembelajaran,
akan tetapi saat ini sudah hampir tidak ada lagi aplikasi berbasis console. Oleh karena itu
tutorial ini juga akan diselingi dengan beberapa contoh aplikasi Windows Forms. Oleh karena
itu pada bagian ini kita akan sedikit berkenalan dengan aplikasi Windows Forms. Pertama-
tama, kita buat suatu project Windows Forms baru dengan nama HelloWorldWin. Akan
tampak desain tampilan Form1 pada layar. Form adalah istilah yang digunakan untuk
window yang akan muncul pada aplikasi kita.
Toolbox
Kita dapat menambahkan kontrol (controls) atau komponen (component) ke dalam form
dengan menggunakan ToolBox. Kontrol adalah objek objek visual seperti TextBox,
ComboBox, dan DateTimePicker, sedangkan komponen adalah objek objek yang tidak
tampak pada layar seperti Timer, BackgroundWorker, dan ErrorProvider. Apabila ToolBox
tidak tampak atau tertutup, dapat dibuka melalui menu View > ToolBox pada menubar.
Untuk menambahkan objek ke dalam Form, dobel klik atau drag objek yang diinginkan
ke dalam form. Sebagai contoh, mari kita coba tambahkan sebuah Label, TextBox dan
Button ke dalam Form, sehingga tampilan Form tampak seperti pada gambar di bawah.
Properties
Setelah menambahkan control ke dalam Form, desain form akan tampak seperti pada bagian
kiri gambar di atas. Untuk mengubah desain agar tampak seperti gambar di sebelah kanan,
kita gunakan panel Properties. Panel properties biasa berada di sebelah kanan window Visual
Studio. Ubah property pada masing-masing control seperti yang tertera pada tabel di bawah.
Name btnHalo
Button1
Text Bilang halo
Event Driven
Apabila pada aplikasi Console hanya terdapat satu alur program, pada aplikasi Windows
Forms terdapat kode-kode program yang hanya akan berjalan apabila terjadi Event
(kejadian) tertentu. Dobel klik pada tombol btnHalo pada desain form untuk membuat fungsi
btnHalo_Click pada program. btnHalo_Click adalah suatu fungsi yang akan dijalankan setiap
kali btnHalo diklik. Perlu diketahui bahwa btnHalo_Click bukanlah suatu event, melainkan
hanya suatu fungsi yang dikaitkan dengan event Click pada btnHalo. Apabila Anda baru
mulai mempelajari C#, Anda belum perlu memahami sampai sejauh ini, akan tetapi apabila
Anda sangat ingin tahu, Anda dapat melihat pada bagian event dan delegates. Di dalam
fungsi btn_Halo_Click, ketikkan kode berikut:
3}
Kemudian jalankan program dengan menekan tombol F5. Saat program telah jalan, coba
isikan suatu nama pada TextBox dan klik tombol btnHalo. Perintah MessageBox.Show akan
menampilkan suatu window kecil pada layar dengan tulisan sesuai dengan nilai parameter
pertamanya.
Variabel pada C#
Suatu variabel hanyalah suatu penampung data atau nilai di dalam program. Di dalam dunia
pemrograman, setiap variabel memiliki tipe data dan dalam kebanyakan bahasa
pemrograman, termasuk C#, tipe data suatu variabel ditentukan ketika variabel tersebut
dinyatakan atau diisi. Terdapat beberapa cara untuk menyatakan variabel:
Sebagai contoh
int jumlahSemuaBarang;
string namaPelanggan = "Fandi";
double harga1, harga2, harga3;
int jumlah1 = 10, jumlah2 = 7, jumlah3 = 12;
Contoh pertama dan ketiga di atas hanya menyatakan variabel saja, tidak memberikan nilai
apapun untuk variabel variabel tersebut. Jika suatu variabel kosong dibaca oleh program,
akan terjadi runtime error. Variabel-variabel kosong seperti ini harus diberi nilai sebelum
dibaca.
Tipe-tipe data yang digunakan di atas adalah tipe data yang paling sering digunakan, int
adalah bilangan bulat, string adalah kumpulan karakter, dan double adalah bilangan real. Kita
akan belajar mengenai tipe data pada bagian selanjutnya dari tutorial ini.
Identifier pada C#
Identifier adalah suatu nama yang mewakili hal-hal di dalam program. Identifier dapat
mewakili suatu variabel, konstanta, metoda atau fungsi, properties, class, enum atau struct.
Pada C#, berlaku ketentuan-ketentuan berikut pada Identifier:
int, digunakan untuk menyatakan suatu bilangan bulat, positif maupun negatif,
sebagai contoh jumlah murid dalam satu kelas.
double, digunakan ketika kita perlu menyatakan suatu bilangan pecahan, misalkan
nilai, harga atau berat. Akan tetapi, double adalah data dengan ketelitian 15-16 digit.
Sehingga terkadang tipe data float dengan ketelitian 7 digit lebih disukai untuk contoh
contoh tadi, dengan alasan menghemat memori.
string, digunakan ketika menyatakan sekumpulan karakter, baik itu nama, kalimat,
password ataupun kode. String sesungguhnya merupakan suatu array dari char.
bool, bernilai true atau false. Paling sering digunakan untuk menyatakan suatu
kondisi, misalnya IsEnabled, IsVisible, SedangHujan, SedangLapar, dan lain lain.
object, adalah class dasar dari semua tipe data dalam C#. Digunakan untuk
menyatakan tipe data yang tidak pasti.
Mirip dengan int: sbyte, short, long, untuk tipe bertanda, byte, ushort, uint, ulong
untuk tipe yang tak bertanda
Mirip dengan double: float dan decimal
char, untuk menyimpan satu karakter
?
1
2 int anInt = 10;
3 long aLong = 2000000000;
long luarBatas = 3000000000;
4 //3 milyar, melebihi batas int
5
6 anInt = (int)aLong;
7 Console.WriteLine(anInt);
8 //Akan tampil 2000000000
9
10anInt = (int)luarBatas;
Console.WriteLine(anInt);
11//Akan tampil -1294967296
12
13Console.ReadKey();
14
Penting diketahui bahwa jika suatu tipe data yang lebih besar dikonversi ke tipe data yang
lebih kecil, dapat terjadi kehilangan data. Hal-hal ini juga berlaku ketika mengkonversi antara
tipe data bilangan bulat dengan tipe data floating point. Selalu ingat bahwa
berkurangnya ketelitian dapat terjadi.
?
1
bool AdaMatahari = true;
2int angka = 15;
3double pecahan = 70.88;
4
5Console.WriteLine(AdaMatahari.ToString()); //True
6Console.WriteLine(angka.ToString()); //15
Console.WriteLine(pecahan.ToString()); //70.88
7
8Console.ReadKey();
9
Di sisi lain, agak sulit mengkonversi dari string ke tipe lain. Semua tipe data numerik
memiliki metoda Parse dan TryParse. Kita menggunakan ini untuk mengkonversi string ke
tipe data numerik. Kita menggunakan Parse ketika kita SANGAT yakin mengenai string yang
bersangkutan, ketika kita tidak yakin, kita gunakan TryParse. Sebagai contoh:
?
1 string strBool = Console.ReadLine();
2 bool aBool = Boolean.Parse(strBool);
3 Console.WriteLine(aBool);
4
5 string strInt = Console.ReadLine();
6 Console.WriteLine(Int32.Parse(strInt));
7 string strDouble = Console.ReadLine();
8 double aDouble;
9 bool BisaParse = double.TryParse(strDouble, out aDouble);
10if (BisaParse) Console.WriteLine(aDouble); else Console.WriteLine("Tolong
11input suatu angka");
12
Console.ReadKey();
13
Coba masukkan "True" atau "FaLsE" pada prompt pertama, dan input yang valid pada
prompt kedua dan ketiga. Program akan mengeluarkan kembali input yang diterima.
Kemudian coba masukkan string yang bukan boolean ke dalam prompt pertama, akan terjadi
runtime error. Dan terakhir, coba input string yang bukan angka pada prompt ketiga, program
akan dengan rapi menampilkan "Tolong input suatu angka". Perlu diperhatikan bahwa
runtime error pada saat debugging berarti Critical Error pada software yang sudah jadi. Hal
ini harus dihindari semampunya.
Literal pada C#
Istilah literal atau literal constant merujuk pada suatu nilai pada program yang tidak dapat
diubah. Kita menggunakan literal untuk menyatakan nilai-nilai. Literal-literal pada C#
dijelaskan dalam tabel di berikut:
Tipe data Literal Contoh
bool true atau false true
int Bilangan bulat 0, -200, 87329
int Awalan 0x untuk menyatakan bilangan heksadesimal 0xF, 0xaeaeae
double Bilangan pecahan dengan titik untuk menyatakan koma 72.59034
double e untuk menyatakan pangkat sepuluh 6.02e23, 1.602e-19
string Karakter-karakter yang diapit oleh petik dua "6f8c11# ^_^ <3"
char Satu karakter yang diapit oleh petik satu 'K'
Untuk tipe data string, terdapat karakter karakter yang tidak dapat diketik langsung ke dalam
petik dua. Untuk mewakili karakter-karakter tersebut, digunakan escape sequences. Escape
sequence yang umum digunakan antara lain:
Tipe
Penjelasan Batas nilai
data
Bilangan bulat 8 bit
sbyte 128 sampai 127
bertanda
Bilangan bulat 16 bit
short 32,768 sampai 32,767
bertanda
Tipe
Penjelasan Batas nilai
data
Bilangan bulat 32 bit
int 2,147,483,648 sampai 2,147,483,647
bertanda
Bilangan bulat 64 bit 9,223,372,036,854,775,808 sampai
long
bertanda 9,223,372,036,854,775,807
Bilangan bulat 8 bit tak
byte 0 sampai 255
bertanda
Bilangan bulat 16 bit tak
ushort 0 sampai 65,535
bertanda
Bilangan bulat 32 bit tak
uint 0 sampai 4,294,967,295
bertanda
Bilangan bulat 64 bit tak
ulong 0 sampai 18,446,744,073,709,551,615
bertanda
Floating point berketelitian
float 1.5e45 sampai 3.4e38
7 digit
Floating point berketelitian
double 5.0e324 sampai 1.7e308
15-16 digit
Bilangan dengan 28-29
decimal (-7.9 x 1028 sampai 7.9 x 1028) / (100 to 28)
angka penting
Bilangan bulat bertanda sesungguhnya menggunakan 1 bit dari ukuran data mereka untuk
menyatakan tanda (negatif atau positif). Itulah kenapa batas nilai positif dari tipe tak bertanda
dua kali lebih besar dari tipe yang bertanda dengan ukuran data yang sama. Akan tetapi
bilangan bulat bertanda sudah jarang digunakan kecuali ketika berurusan dengan antarmuka
hardware, pengolahan citra, atau pemrograman tingkat rendah lainnya. Dan juga, saya
sarankan hindari menggunakan tipe data decimal karena tipe data ini tidak lazim pada bahasa
pemrograman yang lain.
Pernyataan di atas akan mengakibatkan anInt menyimpan nilai 30. Berikutnya adalah
operator aritmatika, yaitu:
+ Penjumlahan a+b 25
- Pengurangan a-b 5
/ Pembagian a/b 1
% Modulus a%b 5
++ Increment a++ 16
-- Decrement a-- 14
- Minus -a -15
Perhatikan bahwa pada contoh pembagian di atas, 15 dibagi 10 seharusnya 1,5. Hal ini benar
untuk tipe data double. Akan tetapi pada contoh di atas diasumsikan a dan b adalah integer
yang mana akan membulatkan ke bawah setiap bilangan pecahan positif. Terdapat prioritas
dalam operator-operator di atas. Operator increment, decrement dan minus akan dihitung
duluan, kemudian baru modulus, perkalian dan pembagian, terakhir barulah operator
pengurangan dan penjumlahan. Jika perlu untuk mengubah urutan eksekusi, tanda kurung
dapat digunakan. Di bawah ini adalah contoh sederhana operasi aritmatika:
4
Console.WriteLine("Harga dasar: " + harga);
5
Console.WriteLine("Diskon : " + diskon * 100 + "%");
6
Console.WriteLine("Harga : " + hargaDiskon);
7
//Harga dasar: 32
8
//Diskon : 20%
9 //Harga : 25.6
10
11Console.ReadKey();
12
Hasil perhitungan hargaDiskon sesungguhnya akan tetapi sama meskipun tanpa tanda
kurung. Akan tetapi seringkali, lebih mudah untuk menggunakan tanda kurung daripada
harus meninjau kembali urutan prioritas operator. Pernyataan yang bersangkutan juga akan
lebih mudah dibaca dengan menyertakan tanda kurung. Perhatikan bahwa tanda "+" di dalam
metoda Console.WriteLine bukanlah operator aritmatika, melainkan operator penyambungan
string. Ketika + digunakan di antara angka, ia menjadi operator aritmatika, akan tetapi ketika
digunakan di antara string dengan tipe data apa saja, ia menjadi operator penyambungan
string.
Terdapat juga operator yang di sebut operator majemuk. Terkadang kita ingin menambahkan
sesuatu ke nilai yang sebelumnya, sebagai contoh, kita ingin menaikkan harga menjadi 34,
kita dapat menuliskan harga = harga + 2; Tetapi dengan operator majemuk, kita cukup
menuliskan harga += 2; yang akan menghasilkan hasil yang sama. Operator-operator
majemuk antara lain:
Kondisi pada C#
Pada bagian ini Saya akan menunjukkan cara menggunakan kondisi pada C#. Terdapat dua
perintah kondisi pada C#, yaitu if dan switch. If lebih sering digunakan. Sebelumnya, Saya
akan memperkenalkan operator pembanding / relasi dan operator logika yaitu jenis operator
yang paling sering digunakan dengan if:
a b && ||
True True True True
True False False True
False True False True
False False False False
Operator && akan menghasilkan true jika kedua kondisi bernilai benar. Jika salah satu atau
kedua kondisi bernilai salah, operator && akan bernilai salah. Operator || akan menghasilkan
true jika salah satu atau kedua sisi bernilai benar. Akan bernilai salah apabila kedua kondisi
bernilai salah.
If else pada C#
Terdapat beberapa cara untuk menggunakan kondisi if else. Salah satunya adalah if else satu
baris yang telah ditunjukkan pada bagian tipe data. Secara umum, struktur if else adalah
sebagai berikut:
?
1
2if (kondisi1) {
//Perintah ketika kondisi 1 terpenuhi
3} else if (kondisi2) {
4 //Perintah ketika kondisi 2 terpenuhi
5} else if (kondisi3) {
6 //Perintah ketika kondisi 3 terpenuhi
7} else {
//Ketika semua kondisi lain tak terpenuhi, lakukan ini
8}
9
Kondisi-kondisi di atas adalah variabel atau pernyataan boolean. Dan blok else if dan else
bersifat opsional.
Kontrol interaktif pada desain di atas diberi nama: txtUsername, txtPassword, txtKonfirmasi,
txtUmur, btnSimpan dan btnBatal. Properties Text pada Form, Label dan Button dapat dilihat
pada desain di atas. Khusus untuk txtPassword dan txtKonfirmasi, ubah properties
PasswordChar menjadi "#", sehingga input user akan disembunyikan oleh tanda sharp/hash.
Kemudian dobel klik pada btnSimpan untuk membuat fungsi event btnSimpan_Click dan
ketikkan kode berikut:
?
1private void btnSimpan_Click(object sender, EventArgs e) {
2 //Cek field-field yang kosong
3 if (txtUsername.Text.Trim() == string.Empty) {
4 MessageBox.Show("Harap isi username");
5 }
}
6
Pada contoh di atas, kita mengecek apakah username koosong. Jika username kosong, kita
meminta user untuk menginput username. Terdapat beberapa hal baru pada kode di atas:
Double slash (garis miring ganda) menyatakan bahwa semua teks di sebelah kanan
double slash adalah komentar dan tidak akan dikompilasi.
Setiap string memiliki method .Trim() yang membuang semua spasi di awal dan akhir
string.
string.Empty adalah sinonim dari "" yang merupakan string kosong.
?
1 private void btnSimpan_Click(object sender, EventArgs e) {
2 //Cek field-field yang kosong
3 string user = txtUsername.Text;
if (user.Trim() == string.Empty) {
4 MessageBox.Show("Harap isi username");
5 } else if (user.Length < 5 || user.Length > 25) {
6 MessageBox.Show("Panjang username harus di antara 5 dan 25
7 karakter");
} else if (user.ToLower() == "fandi") {
8 MessageBox.Show("Username sudah terpakai");
9 } else {
10 /* Kode untuk menyimpan data pendaftaran
11 * Akan dijelaskan pada saat belajar database
12 * Untuk saat ini kita akan membohongi user
* Dengan mengatakan "Pendaftaran berhasil"
13 */
14 MessageBox.Show("Pendaftaran berhasil");
15 }
16}
17
18
Setiap string memiliki property .Length yang memberikan jumlah karakter di dalam
suatu string.
Setiap string memiliki property .ToLower() yang mengkonversi semua huruf di dalam
strim menjadi huruf kecil.
Semua yang di dalam /* dan */ pada C# adalah komentar multibaris dan tidak akan
dikompilasi.
Coba kompilasi dan jalankan program (tekan F5) dan ketikkan beberapa teks ke dalam
username dan klik Simpan. Cobalah nama-nama berikut:
?
1 private void btnSimpan_Click(object sender, EventArgs e) {
//Cek field-field yang kosong
2 string user = txtUsername.Text;
3 if (user.Trim() == string.Empty) {
4 MessageBox.Show("Harap isi username");
5 } else if (user.Length < 5 || user.Length > 25) {
6 MessageBox.Show("Panjang username harus di antara 5 dan 25
karakter");
7 } else if (user.ToLower() == "fandi") {
8 MessageBox.Show("Username sudah terpakai");
9 }
10 MessageBox.Show("Pendaftaran berhasil");
}
11
12
Perhatikan bahwa kode untuk menyimpan data ("Pendaftaran berhasil") berada di luar blok if,
yang berarti bahwa username apapun akan selalu disimpan, tidak peduli ada peringatan atau
tidak. Hanya pernyataan di dalam blok if yang dieksekusi dengan kondisi. Di luar blok if,
pernyataan akan selalu dieksekusi.
?
1
2
3 private void btnSimpan_Click(object sender, EventArgs e) {
4 //Cek field-field yang kosong
string user = txtUsername.Text;
5 string pass = txtPassword.Text;
6 string konfirmasi = txtKonfirmasi.Text;
7 if (user.Trim() == string.Empty) {
8 MessageBox.Show("Harap isi username");
9 } else if (user.Length < 5 || user.Length > 25) {
MessageBox.Show("Panjang username harus di antara 5 dan 25
10karakter");
11 } else if (user.ToLower() == "fandi") {
12 MessageBox.Show("Username sudah terpakai");
13 } else {
if (pass.Trim() == "") {
14 MessageBox.Show("Harap isi password");
15 } else if (pass.Length < 6) {
16 MessageBox.Show("Password paling tidak harus 6 karakter");
17 } else if (pass != konfirmasi) {
18 MessageBox.Show("Konfirmasi password tidak sesuai");
} else {
19 /* Kode untuk menyimpan data pendaftaran
20 * Akan dijelaskan pada saat belajar database
21 * Untuk saat ini kita akan membohongi user
22 * Dengan mengatakan "Pendaftaran berhasil"
*/
23
MessageBox.Show("Pendaftaran berhasil");
24 }
25 }
26}
27
28
Coba jalankan kode dan klik tombol simpan dengan berbagai kondisi. Password if di dalam
blok else ditujukan untuk demonstrasi if bersarang. Meskipun hal ini dapat dilakukan, akan
lebih baik untuk menghindari if bersarang karena if bersarang dapat dengan mudah
membingungkan kita.
Alternatif if bersarang
Now select all the codes inside the btnSave_Click function and press CTRL + K, C to
comment all those codes and type in some new codes (to uncomment, select and press CTRL
+ K. U):
?
1 private void btnSimpan_Click(object sender, EventArgs e) {
2 ////Cek field-field yang kosong
//string user = txtUsername.Text;
3 //string pass = txtPassword.Text;
4 //string konfirmasi = txtKonfirmasi.Text;
5 //if (user.Trim() == string.Empty) {
6 // MessageBox.Show("Harap isi username");
//} else if (user.Length < 5 || user.Length > 25) {
7 // MessageBox.Show("Panjang username harus di antara 5 dan 25
8 karakter");
9 //} else if (user.ToLower() == "fandi") {
10 // MessageBox.Show("Username sudah terpakai");
11 //} else {
// if (pass.Trim() == "") {
12 // MessageBox.Show("Harap isi password");
13 // } else if (pass.Length < 6) {
14 // MessageBox.Show("Password paling tidak harus 6 karakter");
15 // } else if (pass != konfirmasi) {
16 // MessageBox.Show("Konfirmasi password tidak sesuai");
// } else {
17 // /* Kode untuk menyimpan data pendaftaran
18 // * Akan dijelaskan pada saat belajar database
19 // * Untuk saat ini kita akan membohongi user
20 // * Dengan mengatakan "Pendaftaran berhasil"
// */
21 // MessageBox.Show("Pendaftaran berhasil");
22 // }
23 //}
24
25 //Cek field-field yang kosong
26 string user = txtUsername.Text;
string pass = txtPassword.Text;
27 string konfirmasi = txtKonfirmasi.Text;
28
29 //Validasi username
30 if (user.Trim() == "") { MessageBox.Show("Harap isi username"); return;
31}
if (user.Length < 5 || user.Length > 25) { MessageBox.Show("Panjang
32username harus di antara 5 dan 25 karakter"); return; }
33 if (user.ToLower() == "fandi") { MessageBox.Show("Username sudah
34terpakai"); return; }
35
36 //Validasi password
37 if (pass.Trim() == "") { MessageBox.Show("Harap isi password"); return;
}
38 if (pass.Length < 6) { MessageBox.Show("Password paling tidak harus 6
39karakter"); return; }
40 if (pass != konfirmasi) { MessageBox.Show("Konfirmasi password tidak
41sesuai"); return; }
42
43 //Validasi umur
int umur;
44 bool umurBenar = Int32.TryParse(txtUmur.Text, out umur);
45 if (!umurBenar) { MessageBox.Show("Harap input umur yang benar");
46return; }
47
48 //Registrasi
49 string tipeRegistrasi;
if (umur < 18) tipeRegistrasi = "Anak anak"; else tipeRegistrasi =
50"Dewasa";
51 MessageBox.Show("Pendaftaran " + tipeRegistrasi + " berhasil");
52}
53
Saya memperkenalkan perintah return pada kode di atas. Perintah return akan mengakhiri
eksekusi suatu fungsi, sehingga semua baris setelah perintah return tidak akan dijalankan.
Menurut pendapat saya, kode di atas jauh lebih rapi dibandingkan kode if bersarang
Perhatikan juga bahwa pada bagian registrasi, terdapat perintah if satu baris. Pada perintah if
else sederhana, lebih baik menggunakan bentuk ini agar dapat lebih mudah membaca dan
memahami kode kita sendiri. Jika kita menggunakan if berbentuk blok-blok seperti
sebelumnya, kodenya akan tampak seperti:
?
1if (umur < 18) {
2 tipeRegistrasi = "Anak anak";
3} else {
4 tipeRegistrasi = "Dewasa";
5}
If berbentuk blok memakan 5 baris kode, sedangkan if satu baris hanya menggunakan satu
baris.
?
1tipeRegistrasi = (umur < 18) ? "Anak anak" : "Dewasa";
Format ternary operator adalah: (kondisi) ? [nilai jika benar] : [nilai jika
salah];
Sebagai contoh, buatlah suatu aplikasi console bernama cobaSwitch dan ketikkan kode
berikut:
?
1
2
3 class Program {
4 static void Main(string[] args) {
Console.WriteLine("1. Utara");
5
Console.WriteLine("2. Timur");
6 Console.WriteLine("3. Barat");
7 Console.WriteLine("4. Selatan");
8 Console.WriteLine("Ke mana anda akan pergi?");
9 string strInput = Console.ReadLine();
10
int arah;
11 bool berupaAngka = Int32.TryParse(strInput, out arah);
12 if (!berupaAngka) {
13 Console.WriteLine("Input tidak benar");
14 } else {
15 switch (arah) {
case 1: Console.WriteLine("Tampak sebuah danau"); break;
16 case 2: Console.WriteLine("Tampak sebuah hutan"); break;
17 case 3: Console.WriteLine("Tampak sebuah padang rumput"); break;
18 case 4: Console.WriteLine("Tampak sebuah gurun"); break;
19 default: Console.WriteLine("Arah tidak benar"); break;
}
20 }
21 Console.ReadKey();
22 }
23}
24
25
1while (kondisi) {
2 [perintah]
3}
Ketika suatu program sampai pada suatu perulangan while, pernyataan di dalam perulangan
tersebut akan dijalankan terus menerus selama cond bernilai benar. Ketika menggunakan
perulangan while, pada umumnya perlu memperhatikan tiga hal: permulaan, kondisi dan
iterasi. Sehingga strukturnya menjadi:
1[permulaan]
2while (kondisi) {
3 [perintah]
4 [iterasi]
5}
Sebagai contoh:
1
Console.WriteLine("Balapan akan dimulai dalam...");
2 int hitung = 10;
4 Console.WriteLine(hitung + "...");
5 hitung--;
6}
Console.WriteLine("MULAI!!!");
7
Console.ReadKey();
8
Cukup sering kesalahan terjadi pada permulaan, kondisi atau iterasi. Sebagai contoh, cukup
mudah untuk lupa menuliskan hitung--; yang akan mengakibatkan perulangan tanpa
batas, atau menggunakan kondisi hitung < 0 yang akan mengakibatkan perulangan sama
sekali tidak dijalankan. Apabila terjadi perulangan tanpa batas, anda dapat langsung menutup
window console, atau klik tombol "stop debugging" pada toolbar atau menekan
shortcut: SHIFT + F5.
1do {
2 [perintah]
3} while (kondisi);
Satu satunya perbedaan antara perulangan do while dan perulangan while adalah ketika
kondisi awal bernilai salah, yang mana akan mengakibatkan perulangan while dilewatkan
sedangkan perulangan do while dijalankan hanya satu kali.
3}
Blok kode { } bisa juga digantikan dengan satu perintah tunggal sehingga menjadi syntax
perulangan for satu baris:
Bagian pendahuluan akan dijalankan pertama kali ketika perintah for dijumpai. Setelah
pendahuluan dan setiap kali perulangan kembali ke awal, kondisi akan diuji. Perintah di
dalam blok perulangan for akan dijalankan jika kondisi bernilai benar, dan perulangan akan
berakhir ketika kondisi bernilai salah. Iterasi adalah kode yang akan dijalankan setiap kali
perulangan berhasil berputar satu kali.
2 Console.WriteLine(i);
3}
4Console.ReadKey();
1
2
4
8
16
Perulangan for di atas juga dapat dibuat menjadi perulangan for satu baris menjadi:
2Console.ReadKey();
Array pada C#
Array merupakan variabel yang dapat menampung banyak nilai sekaligus. Array
dideklarasikan dengan tipe data diikuti dengan sepasang kurung siku. Sebagai contoh:
1int[] aAngka;
2string[] aNama;
3object[] aObjek;
Deklarasi array di atas hanya menghasilkan variabel array kosong. Untuk memberi nilai awal
pada array, lakukan salah satu dari cara berikut:
Contoh pertama membuat 5 int kosong, sedangkan contoh kedua membuat array dengan
ukuran 3 dan langsung menugaskan nilai-nilai kepada elemen-elemen array tersebut. Contoh
ke tiga menunjukkan versi lain dari contoh ke dua yang mengabaikan keyword "new".
Contoh ke tiga juga menunjukkan bahwa kita dapat menugaskan nilai bertipe apa saja kepada
suatu objek. Pada contoh ke tiga, kita menugaskan double, string, DateTime, bool dan char
sekaligus ke dalam array object tersebut.
2
for (int i = 0; i < aBerat.Length; i++) {
3
string strBerat = Console.ReadLine();
4
aBerat[i] = double.Parse(strBerat);
5
}
6
7 Console.WriteLine("----------------");
8 double total = 0;
for (int i = 0; i < aBerat.Length; i++) {
9
total += aBerat[i];
10
}
11
Console.WriteLine("Rata-rata dari berat: " + (total / aBerat.Length));
12
Console.ReadKey();
13
14
1int[,] aTahun = new int[,] { { 2001, 2002, 2003 }, { 2005, 2006, 2007 } };
3Console.ReadKey();
1int[][] aTahun = new int[][] { new int[] { 2003 }, new int[] { 2005, 2008,
2010 } };
2
Console.WriteLine(aTahun[1][2]); //Akan menampilkan 2010
3Console.ReadKey();
Abstraction
Abstraction atau dalam bahasa Indonesia Abstraksi, bukanlah mengenai kode program.
Abstraksi hanyalah suatu proses dimana seorang programmer melihat contoh-contoh di
kehidupan nyata dan menterjemahkan konsep-konsep yang didapat ke dalam suatu program.
Sebagai contoh, seorang programmer game mula-mula akan melihat suatu mobil memiliki
kecepatan, jumlah bensin dan jenis bannya. Sedangkan programmer retailer otomotif
mungkin akan lebih peduli dengan harga, warna dan mereknya. Tentu saja mereka dapat
memasukkan semua hal tersebut dan hal lainnya ke dalam program. Akan tetapi hal ini sangat
bergantung dengan apa yang dilihat oleh programmer.
Encapsulation
Pernahkah Anda melihat kapsul? Benda mengkilat yang kita makan ketika kita sakit.
Sesungguhnya, bagian mengkilatnya hanya bagian luarnya. Di dalamnya terdapat banyak
jenis obat dan vitamin yang membuat kita lebih sehat. Ada dua hal yang terkait dengan fakta
ini:
Kita tidak tahu apa yang ada di dalam kapsul. Kita hanya tahu manfaat dan cara kerja
kapsul tersebut (ditelan).
Memakan satu kapsul berarti memakan semua obat dan vitamin di dalamnya
sekaligus.
Dengan cara yang sama, suatu class mengkapsulkan semua hal di dalamnya:
Pengguna class tidak perlu tahu bagian dalam dari class, mereka cukup tahu kegunaan
class tersebut.
Membuat suatu objek class tertentu berarti objek tersebut memiliki semua properties,
method, enum dan event di dalam class tersebut.
Class pada C#
Kita mendefinisikan class di dalam namespace pada C#. Untuk mendefinisikan suatu class
sederhana, kita tuliskan dalam namespace:
?
1[access modifier] class [nama class] {
2 //Member-member pada class
3 }
Access modifiers pada C# akan dijelaskan terakhir pada bagian ini. Untuk sekarang, cukup
gunakan public untuk semua class. Sebagai contoh, kita dapat membuat class Mobil sebagai
berikut:
?
1
2
3 namespace Belajar1 {
4 class Program {
static void Main(string[] args) {
5
6 }
7 }
8
9 public class Mobil {
10 public double kecepatan;
11 public double bensin;
public double posisi;
12 public string nama;
13
14 public void percepat() {
15 this.kecepatan += 10;
16 this.bensin -= 5;
}
17 public void maju() {
18 this.posisi += this.kecepatan;
19 this.bensin -= 2;
20 }
21 public void isiBensin(double bensin) {
this.bensin += bensin;
22 }
23 }
24}
25
26
Perhatikan bahwa class Mobil berada di dalam namespace Belajar1 setingkat dengan class
Program (dalam hal level kurung kurawalnya). Di sini kita telah melakukan proses abstraksi.
Pada class Mobil di atas, kecepatan, bensin, posisi dan nama adalah fields, sedangkan
percepat, maju dan isiBensin adalah method. Field, Property dan Mehtod akan dijelaskan lain
kali.
Objek pada C#
Suatu class digunakan untuk membuat objek. Untuk membuat objek, kita meng-instantiate
suatu class dengan salah satu dari cara berikut:
Ketika kita membuat suatu objek dari suatu class, kita mendapatkan semua member dari class
tersebut. Kita dapat mengkases member class tersebut dengan mengetikkan titik dan nama
member yang bersangkutan. Sebagai contoh, kita tuliskan dalam class Program:
?
1
class Program {
2 static void Main(string[] args) {
3 Car SuatuMobil = new Mobil();
4 Car MobilSaya = new Mobil() { nama = "Ferrari", kecepatan = 0,
5 bensin = 30000, posisi = 0 };
MobilSaya.Percepat();
6 Console.WriteLine(SuatuMobil.nama);
7 Console.WriteLine(SuatuMobil.bensin);
8
9 Console.WriteLine(MobilSaya.nama);
10 Console.WriteLine(MobilSaya.bensin);
11 Console.ReadKey();
}
12 }
13
[baris kosong]
0
Ferrari
30000
Baris pertama kosong dan baris kedua bernilai 0 karena nilai default string dan int. Perlu
diingat bahwa tidak baik untuk menggunakan variabel (field nama dan bensin) tanpa
menginisialisasinya, akan tetapi program di atas hanyalah contoh. Inilah yang saya suka dari
objek. Kita cukup menuliskan new Mobil() satu kali, dan di dalam objek tersebut kita sudah
mendapatkan semua yang kita definisikan di dalam class Mobil.
Constructor pada C#
Hampir selalu, kita perlu memberi nilai pada field atau property suatu objek sebelum kita
dapat menggunakannya. Untuk itu, kita gunakan method constructor. Suatu constructor
didefinisikan dengan cara:
?
1public Mobil(string nama, double kecepatan, double bensin) {
2 this.nama = nama;
3 this.kecepatan = kecepatan;
4 this.bensin = bensin;
5 this.posisi = 0;
}
6
Constructor di atas menerima tiga parameter. Parameter yang diberikan digunakan untuk
menginisialisasi field-field di dalam objek. Perhatikan bahwa variabel this.nama dengan
variabel nama di atas adalah dua variabel yang berbeda. Keyword "this" pada C# mewakili
objek yang sedang aktif pada class. Ketika tidak ada parameter "nama", variabel "nama" akan
mewakili field "nama" pada class. Akan sama saja apabila kita menulis "this.name" atau
"name". Akan tetapi apabila parameter ada "nama", "nama" akan mewakili parameter
tersebut, dan untuk mewakili field nama, kita hanya dapat menggunakan "this.nama". Untuk
menggunakan constructor untuk membuat objek, kita menggunakan kode seperti berikut:
?
1Mobil MobilAnda = new Mobil("Lamborghini", 300, 50000);
Perhatikan bahwa karena constructor baru kita, perintah-perintah new Mobil() sebelumnya
menjadi error karena kita telah mendeklarasikan constructor kita. Kita dapat membuat
constructor lain di dalam class Mobil untuk menghindari error tersebut:
?
1public Mobil() {
2 this.nama = "";
3 this.kecepatan = 0;
4 this.bensin = 0;
5 this.posisi = 0;
}
6
Menurut pendapat saya, membuat constructor kosong seperti ini berbahaya karena membuat
kita dapat lupa mengisi field di dalam objek kita.
Destructor pada C#
Meskipun constructor sangatlah penting, Saya tidak pernah benar-benar menggunakan
kebalikannya: Destructor di dalam suatu program. Tujuan utama dari destructor biasanya
untuk membebaskan memoi. Akan tetapi dikarenakan C# sudah memiliki "garbage collector"
untuk membebaskan memori yang tidak digunakan lagi, destructor sangat jarang digunakan.
Untuk membuat suatu destructor, cukup membuat suatu method dengan nama yang sama
dengan nama class diawali dengan tanda tilde (~). Sebagai contoh:
?
1~Mobil() {
2 Console.WriteLine("Mobil " + nama + " telah dihancurkan");
3}
public membuat member yang bersangkutan dapat diakses dari mana saja.
private membuat member yang bersangkutan hanya dapat diakses dari dalam class itu
sendiri.
protected membuat member yang bersangkutan hanya dapat diakses dari class itu
sendiri atau class lain yang merupakan turunan (inherits) dari class yang
bersangkutan.
internal membuat member yang bersangkutan hanya dapat diakses dari assembly yang
sama, atau dengan kata lain, aplikasi yang sama.
protected internal menggabungkan protected dan internal, yang berarti member yang
bersangkutan hanya dapat diakses dari class itu sendiri atau dari class lain dari dalam
assembly yang sama yang merupakan turunan dari class yang bersangkutan.
Perlu diketahui bahwa class puncak yang langsung berada di bawah suatu namespace hanya
dapat dideklarasi public atau internal. Mereka tidak dapat dideklarasi private, protected atau
protected internal. Hanya class di dalam class lain yang dapat dideklarasi seperti itu. Perlu
diketahui juga bahwa kata kunci static dan virtual bukanlah suatu access modifier.
Method pada C#
Method adalah sekumpulan pernyataan yang akan dijalankan ketika dipanggil. Untuk
mendefiniskan suatu method pada C#:
Access modifier, untuk saat ini, gunakan saja access modifier public.
Tipe data, bisa berupa void atau tipe data C# lainnya, termasuk enum atau class
custom. Merupakan tipe data yang dihasilkan method.
Nama method, berupa suatu identifier yang valid.
Parameter, sekumpulan variabel pada method untuk berkomunikasi dengan program
di luar method. Method juga bisa tidak memiliki parameter.
Kumpulan perintah, perintah perintah yang akan dijalankan ketika method
dipanggili.
Suatu method harus ditempatkan di dalam suatu class, Method adalah salah satu bentuk dari
member suatu class. Suatu method dipanggiil / dijalankan dengan menuliskan namanya.
Method void
Suatu method void adalah suatu method yang hanya menjalankan sekumpulan perintah dan
tidak menghasilkan suatu nilai (Tetapi masih dapat menampilkan sesuatu ke layar). Sebagai
contoh:
?
1
2 namespace Belajar2 {
3 class Program {
4 static void Main(string[] args) {
ContohMethod met = new ContohMethod();
5 met.Pemisah(); //Akan menampilkan pemisah
6 }
7 }
8
9 public class ContohMethod {
10 public void Pemisah() {
Console.WriteLine("----------------------");
11 Console.WriteLine("----------------------");
12 }
13 }
14}
15
?
1
2 public void TampilBilanganRandom() {
Random r = new Random();
3 int angka = r.Next(1, 50);
4 if (angka > 25) {
5 Console.WriteLine("Terlalu panjang");
6 return;
7 }
for (int i = 1; i <= angka; i++) Console.Write(i + " ");
8 Console.WriteLine();
9 }
10
Jangan lupa panggil method tersebut pada method Main pada class Program.
?
1static void Main(string[] args) {
2 ContohMethod met = new ContohMethod();
3
4 met.TampilBilanganRandom();
5 met.Pemisah();
6
7 Console.ReadKey();
}
8
Method tersebut akan menampilkan sederet angka jika angka random lebih kecil dari 25.
Selain itu, ia hanya akan menampilkan "Terlalu panjang". Tanpa perintah return, kode di atas
masih akan terus menampilkan angka angka setelah menampilkan "Terlalu panjang". Tetapi
dengan perintah return, aliran program akan keluar dari method dan sisa kode pada method
tersebut akan diabaikan.
Jika tipe data method bukan void, perintah return harus menyertakan suatu nilai yang akan
menjadi nilai method tersebut. Sebagai contoh, tambahkan method berikut ke dalam class
ContohMethod:
?
1
public int GaussianRandom() {
2 Random r = new Random();
3 int angka1 = r.Next(0, 10);
4 int angka2 = r.Next(0, 10);
5 int angka3 = r.Next(0, 10);
return angka1 + angka2 + angka3;
6}
7
?
1
static void Main(string[] args) {
2 ContohMethod met = new ContohMethod();
3
4 met.TampilBilanganRandom();
5 met.Pemisah();
6 Console.WriteLine(met.GaussianRandom());
7 met.Pemisah();
8
Console.ReadKey();
9 }
10
Topik mengenai random Gaussian berada di luar pembahasan kita. Anggap saja sebagai
bentuk lain dari random. Suatu method dengan nilai return sebaiknya digunakan seperti suatu
variabel seperti ditunjukkan pada kode di atas.
?
1public int Max(int a, int b) {
2 if (a > b) return a; else return b;
3}
?
1Console.WriteLine("Antara 2 dan 10, " + met.Max(2, 10) + " lebih besar");
?
1public int Max(int a, int b, int c = Int32.MinValue) {
2 int max1 = (a > b) ? a : b;
3 return (c > max1) ? c : max1;
4}
Sekarang, kita masih dapat menggunakan method tersebut dengan hanya dua parameter,
tetapikita juga dapat menggunakan method tersebut dengan tiga parameter:
?
1Console.WriteLine("Antara 2 dan 10, " + met.Max(2, 10) + " lebih besar");
Console.WriteLine("5, 8, dan 7, yang terbesar adalah: " + met.Max(5, 8,
27));
Untuk mendeklarasikan parameter opsional, kita cukup memberi nilai default kepada
parameter yang bersangkutan. Pada contoh di atas, variabel c diberi nilai terkecil pada int,
sehingga tidak akan mempengaruhi hasil perbandingan ketika hanya dua parameter yang
diberikan. Perlu diketahui bahwa parameter-parameter opsional harus diletakkan sebagai
parameter-parameter terakhir.
?
1public double Max(double a, double b, double c = double.MinValue) {
2 double max1 = (a > b) ? a : b;
3 return (c > max1) ? c : max1;
4}
Dengan begitu, method Max kita sudah mendukung tipe data double.
?
1public void tukar(int a, int b) {
2 int sementara = a;
3 a = b;
4 b = sementara;
5}
?
1int a = 1000;
2int b = 50;
3met.tukar(a, b);
4Console.WriteLine(a); //masih 1000
Program masih akan menampilkan 1000. Akan tetapi apabila kita menyatakan parameternya
sebagai referensi:
?
1public void tukar(ref int a, ref int b) {
2 int sementara = a;
3 a = b;
4 b = sementara;
5}
?
1int a = 1000;
2int b = 50;
3met.tukar(ref a, ref b);
4Console.WriteLine(a); //Menampilkan 50
Program akan menampilkan 50 yang semulanya merupakan nilai variabel b. Perlu diketahui
juga bahwa variable yang dideklarasikan di dalam suatu method akan hilang begitu alur
program keluar dari method.
Method di atas sesungguhnya menghasilkan dua output. Pertama adalah menentukan apakah
angka yang bersangkutan merupakan kelipatan 3 atau bukan. Kedua, method tersebut juga
menghasilkan faktor kelipatan 3 yang paling dekat dengan angka tersebut. Untuk
menggunakan method tersebut:
?
1int angka = 7;
2int terdekat;
bool BerupaFaktor = met.Kelipatan3(angka, out terdekat);
3if (BerupaFaktor) Console.WriteLine(angka + " adalah kelipatan 3");
4else Console.WriteLine(angka + " bukan kelipatan 3. Kelipatan terdekat: " +
5terdekat);
?
1public void PemisahBesar() {
2 for (int i = 1; i <= 5; i++) Pemisah();
3}
Method yang memanggil dirinya sendiri di dalam dirinya disebut method rekursif. Sebagai
contoh:
?
1public int faktorial(int n) {
2 if (n <= 1) return 1;
3 return faktorial(n - 1) * n;
4}
faktorial(5)
faktorial(4) * 5
faktorial(3) * 4 * 5
faktorial(2) * 3 * 4 * 5
faktorial(1) * 2 * 3 * 4 * 5
1 * 2 * 3 * 4 * 5
120
Method static pada C#
Method static adalah method yang dapat diakses tanpa meng-instantiate (membuat objek)
suatu class. Method static dapat dipanggil langsung dari class. Karena ia dapat dipanggil
tanpa meng-instantiate classnya, kata kunci "this" tidak dapat digunakan di dalam method
static. Class static juga tidak dapat memanggil method yang lain yang berada pada class yang
sama tanpa meng-instantiate class tersebut, terkecuali method yang dipanggil juga suatu
method static.
Kita sebetulnya dapat membuat method-method lain selain method Main pada class Program
kita. Tetapi kita tidak akan bisa memanggil method tersebut dalam method main apabila
method tersebut bukan method static. Method static seperti method Main hanya dapat
memanggil method static lain di dalamnya. Sebagai contoh, buat method berikut pada class
Program:
?
1public static void Ulang(char karakter, int jumlah) {
2 for (int i = 1; i <= jumlah; i++) Console.Write(karakter);
3 Console.WriteLine();
4}
?
1Ulang('*', 30);
Program akan menampilkan karakter bintang 30 kali. Apabila kita mendeklarasikan method
di atas pada class ContohMethod, kita memanggil method tersebut dengan cara:
?
1ContohMethod.Ulang('*', 30);
?
1public int Jumlah;
?
1
2private int jumlah;
public int Jumlah {
3 get {
4 return jumlah;
5 }
6 set {
7 } jumlah = value;
8}
9
Pada mulanya, suatu property adalah gabungan sebuah field private, sebuah method getter
dan sebuah method setter. Akan tetapi pada C#, property dikemas menjadi satu dengan getter
dan setternya. Di bawah ini adalah syntax deklarasi property pada C# yang bahkan lebih
singkat lagi:
?
1public int Jumlah { get; set; }
Pada suatu property, jika suatu setter tidak buat, maka property tersebut menjadi property
readonly. Dan apabila getternya dihilangkan, property tersebut akan menjadi property
writeonly. Di bawah ini adalah contoh-contoh properties pada C#:
?
1 public class Siswa {
public string Nama { get; set; }
2
public DateTime TglLahir { get; private set; }
3 //Umur (tahun) dihitung otomatis berdasarkan TglLahir
4 public int Umur {
5 get {
6 //Umur dalam tipe data TimeSpan
TimeSpan ts = DateTime.Now - TglLahir;
7 //Konversi balik ke DateTime agar mudah
8 DateTime umur = DateTime.MinValue + ts;
9 //Karena DateTime.MinValue bernilai 0001-01-01,
10 //Kurangkan 1 dari tahun umur.
11 return umur.Year - 1;
}
12 }
13
14 private double kuis, uts, uas;
15 public double Kuis {
16 get { return kuis; }
set {
17 if (value < 0 || value > 100) Console.WriteLine("Nilai tidak
18valid");
19 kuis = value;
20 }
21 }
public double Uts {
22 get { return uts; }
23 set {
24 if (value < 0 || value > 100) Console.WriteLine("Nilai tidak
25valid");
uts = value;
26 }
27 }
28 public double Uas {
29 get { return uas; }
30 set {
if (value < 0 || value > 100) Console.WriteLine("Nilai tidak
31valid");
32 uas = value;
33 }
34 }
35}
36
37
38
39
Pada contoh di atas, Nama adalah suatu property sederhana TglLahir adalah suatu property
readonly. Umur adalah suatu property readonly dengan nilai yang dihitung, properties
sisanya: Kuis, Uts dan Uas adalah properties sederhana dengan sedikit batasan nilai.
Ingat bahwa identifier pada C# bersifat case sensitive. Identifier uas berbeda dari identifier
Uas. Ada sistem penamaan pada C# yang menggunakan huruf kecil untuk field private (kuis,
uts, uas) dan huruf besar di awal untuk nama property seperti di atas (Kuis, Uts, Uas). Ada
juga yang menggunakan underscore di depan field yang private misalnya _kuis, _uts, _uas.
Ini hanya masalah penamaan sederhana, akan tetapi kita sebaiknya konsisten dalam
menggunakan sistem penamaan ini, karena hal ini akan sangat membantu dalam mengelola
kode program kita.
?
1 public Siswa(string nama, DateTime tgllahir) {
2 Jumlah += 1;
3 this.Nama = nama;
this.TglLahir = tgllahir;
4 this.kuis = 0;
5 this.uts = 0;
6 this.uas = 0;
7 }
8
9 public static int Jumlah { get; set; }
10
?
1
2 class Program {
static void Main(string[] args) {
3 Siswa.Jumlah = 0;
4 Siswa Jane = new Siswa("Jane", new DateTime(1990, 5, 20));
5 Siswa Steven = new Siswa("Steven", new DateTime(1989, 3, 2));
6 Console.WriteLine(Siswa.Jumlah); //Menampilkan 2
7
Console.ReadKey();
8 }
9 }
10
Pada contoh di atas Property static Jumlah tidak dapat diakses melalui Jane.Jumlah ataupun
Steven.Jumlah. Melainkan harus diakses langsung dari Siswa.Jumlah, di mana Siswa adalah
Class, bukan Object. Hal ini hanya dapat dilakukan pada properties static.
Di bawah baris Siswa.Jumlah = 0, dibuat dua buah objek Siswa, yaitu Jane dan Steven.
Kedua objek tersebut dibuat dengan fungsi new Siswa, yaitu fungsi constructor yang
didefinisikan pada blok program public Siswa. Di dalam constructor tersebut, ada perintah
Jumlah += 1, yang akan menambahkan 1 ke property static Jumlah. Sehingga setelah dua
objek dibuat, maka Siswa.Jumlah akan bernilai 2.
Collection pada C#
Meskipun array pada C# dapat menyimpan banyak nilai sekaligus, mereka tidak dapat
mengubah ukurannya secara dinamis. Class-class collection pada C# mirip dengan Array,
tetapi dapat diubah ukurannya secara dinamis. Ada banyak class yang tersedia Collections
pada C#. Di bawah ini adalah beberapa contoh program yang menggunakan Collections.
Akan tetapi, sebelum itu, Saya ingin memperkenalkan perulangan foreach pada C# yang
sangat berguna ketika digabungkan dengan Collection. Struktur perulangan foreach adalah:
3 //Contoh: Console.WriteLine([IdentifierItem]);
4}
List pada C#
Di bawah ini adalah contoh suatu program yang menggunakan List pada C#. Method yang
penting pada List adalah Add, Remove, RemoveAt, dan Contains. Untuk method Remove
dan Contains, kita perlu mengoverride method Equals.
1 class Program {
11 oSales.ShowItems();
12 Console.ReadKey();
13 }
}
14
15
public class Sales {
16
public int ID { get; set; }
17
public DateTime TanggalBeli { get; set; }
18
public List<SalesItem> Items { get; private set; }
19
20
public Sales(int newid) {
21 this.ID = newid;
22 TanggalBeli = DateTime.Now;
24 }
25
31 return true;
32 } else {
39 return false;
40 }
41 Items.Remove(item);
return true;
43
}
44
public bool RemoveLast() {
45
if (Items.Count == 0) {
46
Console.WriteLine("Tak ada item");
47
return false;
48 }
50 Items.RemoveAt(Items.Count - 1);
51 return true;
52 }
63
69 return false;
70 }
}
71
}
72
73
74
75
76
77
Dictionary pada C#
Dictionary (kamus) pada C# berisi pasangan-pasangan key dan value. Tipe item pada
Dictionary adalah KeyValuePair<tipeKey, tipeValue>. Berikut adalah contoh program yang
menggunakan Dictionary:
1 class Program {
static void Main(string[] args) {
2
Dictionary<string, string> InggrisIndonesia = new Dictionary<string,
3 string>();
5 InggrisIndonesia.Add("Get", "Ambil");
6 InggrisIndonesia.Add("Like", "Seperti");
7 InggrisIndonesia.Add("Book", "Buku");
InggrisIndonesia.Add("I", "Saya");
8
InggrisIndonesia.Add("Code", "Kode");
9
InggrisIndonesia.Add("For", "Untuk");
10
InggrisIndonesia.Add("Money", "Uang");
11
12
foreach (KeyValuePair<string, string> kv in InggrisIndonesia) {
13
Console.WriteLine(kv.Key + " = " + kv.Value);
14 }
15 Console.WriteLine("---------------------------");
if (InggrisIndonesia.ContainsKey(cari)) {
18
Console.WriteLine(InggrisIndonesia[cari]);
19
} else {
20
Console.WriteLine("Kata tidak ditemukan");
21
}
22
Console.ReadKey();
23
}
24}
25
26
Queue pada C#
Ada 2 class Queue pada C#. Satu berada di bawah namespace System.Collections, yang lain
berada di bawah namespace System.Collections.Generic. Pada program di bawah, kita
menggunakan class Queue Generic:
1 class Program {
7
Pelanggan Dilayani;
8
for (int i = 1; i <= 3; i++) {
9
Dilayani = antrian.Dequeue();
10 Console.WriteLine("Antrian No." + Dilayani.NoAntrian + ", Tuan." +
Dilayani.Nama + " sedang dilayani");
11
}
12
13
Console.ReadKey();
14
}
15
}
16
this.Nama = nama;
23
this.Telepon = telp;
24
this.NoAntrian = NoAntrianBerikutnya++;
25
//Berarti: NoAntrian = NoAntrianBerikutnya
26
//Kemudian: NoAntrianBerikutnya++
27
}
28 }
29
30
Masih ada banyak class Collection pada C#. Tetapi kita tidak akan membahas semuanya di
sini. Untuk daftar class Collection pada C# yang lengkap, kunjungi MSDN.
LINQ pada C#
LINQ (Language-Integrated Query) pada C# merupakan cara sederhana untuk memanggil
atau memproses data pada suatu Collection. Kita dapat menggunakan LINQ misalnya
untuk memfilter, mengurutkan atau bahkan menggabungkan data di dalam Collection. Cara
paling sederhana untuk menggunakan LINQ adalah:
1 class Program {
static void Main(string[] args) {
2
List<Mahasiswa> Mhs = new List<Mahasiswa>() {
3
new Mahasiswa("Fandi", "Fisika", 2001),
4
new Mahasiswa("Agung", "Fisika", 2001),
5
new Mahasiswa("Jon", "Fisika", 2000),
6
new Mahasiswa("Arthur", "Fisika", 2000),
7 new Mahasiswa("Hendera", "Kimia", 2001),
8 new Mahasiswa("Kurniawan", "Kimia", 2001),
9 };
10
Console.WriteLine("Mahasiswa tahun 2001:");
11
IEnumerable<Mahasiswa> tahun2001 = from m in Mhs where m.TahunMasuk
12== 2001 select m;
14 Console.WriteLine(m);
15 }
16
Console.WriteLine("\nMahasiswa Fisika:");
17
List<Mahasiswa> fisika = (from m in Mhs where m.Jurusan == "Fisika"
18select m).ToList();
20 Console.WriteLine(m);
21 }
22
26 Console.WriteLine(nama);
27 }
28
29 Console.ReadKey();
}
30
}
31
32
?
1
class Mahasiswa {
2
public string Nama { get; set; }
3
public string Jurusan { get; set; }
4
public int TahunMasuk { get; set; }
5
public Student(string nama, string jurusan, int tahun) {
6 this.Nama = nama;
7 this.Jurusan = jurusan;
8 this.TahunMasuk = tahun;
9 }
Nilai hasil LINQ adalah berupa IEnumerable. IEnumerable adalah suatu Collection yang
cocok digunakan dengan perulangan foreach. Tetapi hasil ini juga dapat langsung dikonversi
menjadi List seperti contoh LINQ yang kedua di atas. Contoh yang ketiga, menunjukkan
bahwa LINQ juga dapat hanya mengambil satu member objek saja. Untuk teknik yang lebih
lanjut mengenai LINQ, dapat mengunjungi MSDN.
String pada C#
String adalah tipe data yang sangat banyak digunakan. Sehingga string menjadi suatu tipe
data yang penting. Berikut adalah beberapa kode yang berguna terkait dengan string:
Substring pada C#
Substring adalah suatu method yang berguna untuk mengamil sebagian string. Pada C#,
Substring adalah method dari objek-objek String:
[suatuString].Substring([mulai], [banyakKarakter]);
Mulai adalah posisi mula bagian string yang akan diambil. Posisi ini berindex mulai dari nol.
Banyak karakter bersifat opsional. Jika banyak karakter tidak disertakan, Substring akan
mengambil semua karakter dimulai dari posisi mulai. Berikut adalah contoh penggunaan
Substring:
?
1
2 class Program {
3 static void Main(string[] args) {
4 string kode = "P201203CX021";
string strTahun = kode.Substring(1, 4);
5 string strBulan = kode.Substring(5, 2);
6 string lokasi = kode.Substring(7, 2);
7 string strNo = kode.Substring(9);
8
9 Console.WriteLine(strTahun); //2012
10 Console.WriteLine(strBulan); //03
Console.WriteLine(lokasi); //CX
11 Console.WriteLine(strNo); //021
12 Console.ReadKey();
13 }
14}
15
String.Format pada C#
Ada banyak kasus ketika kita perlu merepresentasikan suatu tanggal atau angka dengan
bentuk-bentuk yang berbeda. Kita mungkin perlu memformat suatu tanggal ke dalam format
SQL, atau kita mungkin perlu menampilkan harga dengan titik pemisah ribuan. Untuk tujuan-
tujuan ini, method Format sangat berguna. Syntax untuk method Format adalah:
?
1suatuString.Format( [formatString], objTarget );
2suatuString.Format( [FormatProvider], [formatString], objTarget );
3suatuString.Format( [formatString], [ArrayObject] );
Ada beberapa cara lain untuk menggunakan method Format, tetapi method-mehod di atas
sudah cukup untuk mewakili mereka. Contoh penggunaan String.Format:
?
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Globalization;
6
7 namespace Learning3 {
8 class Program {
9 static void Main(string[] args) {
10 DateTime sekarang = DateTime.Now;
11 string strSekarang = string.Format("Tanggal sekarang: {0:yyyy-MM-
12 dd}", sekarang);
Console.WriteLine(strSekarang);
13
14 double harga = 45.99;
15 string strHarga = string.Format("{0:C3}", harga);
16 Console.WriteLine(strHarga); //$45.990
17
18 double hargaId = 29000;
CultureInfo id = new CultureInfo("id-ID");
19 string strHargaId = string.Format(id, "{0:C}", hargaId);
20 Console.WriteLine(strHargaId); //Rp.29.000
21
22 double pecahan = 23.0 / 3.0;
23 string strPecahan = string.Format("{0:N3}", pecahan);
24 Console.WriteLine(strPecahan); //7.669
25
double persen = 0.125;
26 string strPersen = string.Format("{0:P}", persen);
27 Console.WriteLine(strPersen); //12.50 %
28
29 string gabungan = string.Format("tanggal: {0:dd MMMM yyyy}, harga:
30 {1:C}, diskon: {2:P}", new object[] { sekarang, hargaId, persen });
Console.WriteLine(gabungan); //Tanggal: 29 October 2013, harga:
31$29,000.00, diskon: 12.50 %
32 Console.ReadKey();
33 }
34 }
35}
36
37
Memformat tanggal, yyyy mewakili tahun, MM mewakili bulan dalam dua digit, dd
mewakili tanggal, pada contoh terakhir, MMMM mewakili nama lengkap suatu bulan.
Memformat angka, N mewakili angka. N0 mewakili angka tanpa desimal, N2
mewakili angka dengan dua desimal.
Memformat uang, C mewakili mata uang. C2 mewakili mata uang dengan dua
desimal.
Memformat persen, P mewakili persen.
Kurung kurawal adalah posisi dimana variabel yang telah diformat akan ditempatkan. Contoh
ketiga menunjukkan hal ini. Variabel sekarang, hargaId dan persen akan diformat dan
ditempatkan pada kurung kurawal bernomor 0, 1, dan 2 secara berurutan.
?
1
2 class Program {
3 static void Main(string[] args) {
string kalimat = "Sukses datang kepada mereka yang berkerja keras.";
4
string[] katakata = kalimat.Split(' ');
5 foreach (string kata in katakata) {
6 Console.WriteLine(kata);
7 }
8
9 int[] deret = { 1, 2, 4, 8, 16, 32 };
string strDeret = string.Join(" + ", deret);
10 Console.WriteLine(strDeret); //1 + 2 + 4 + 8 + 16 + 32
11
12 Console.ReadKey();
13 }
14}
15
Saya rasa contoh di atas sudah cukup jelas menjelaskan dirinya sendiri.
Struct pada C#
Struct sangat mirip dengan class, terkecuali struct adalah tipe data nilai, sedangkan class
adalah tipe data referensi. Tipe data nilai menyimpan nilainya langsung di dalamnya.
Sedangkan tipe data referensi tidak. Tipe data referensi hanya merujuk ke nilai yang
tersimpan di tempat lain. Untuk mendeklarasikan struct pada C#, kita melakukannya seperti
ketika kita mendeklarasikan class:
struct Balok {
1
public int x;
2
public int y;
3
public double panjang;
4
public double lebar;
5
public double tinggi;
6
7 public Block(int x, int y, double panjang, double lebar, double tinggi) {
8 this.x = x;
this.y = y;
9
this.panjang = panjang;
10
this.lebar = lebar;
11
this.tinggi = tinggi;
12
}
13
}
14
15
1
class Program {
2
static void Main(string[] args) {
3
Balok b1 = new Balok(0, 0, 5, 3, 7);
4
Balok b2 = b1;
5 b2.x = 5;
6 b2.y = 10;
Berikutnya coba deklarasikan "Balok" sebagai class. Ubah keyword "struct" menjadi "class".
Program akan menampilkan:
Posisi b1: (5,10)
Posisi b2: (5,10)
Pada contoh di atas, Anda mungkin lebih suka struct daripada class, akan tetapi coba lihat
contoh berikut:
2 class Program {
static void Main(string[] args) {
3
Robot R1 = new Robot("Hidup");
4
Robot R2 = new Robot("Hidup");
5
6
R1.Bunuh(R2);
7
Console.WriteLine(R1.Status); //Hidup
8
Console.WriteLine(R2.Status); //Mati
9 Console.ReadKey();
10 }
11}
12
13class Robot {
public string Status;
14
public void Bunuh(Robot musuh) {
15
musuh.Status = "Mati";
16
}
17
18
public Robot(string status) {
19
this.Status = status;
20 }
21}
22
R2 seharusnya mati kan? Berikutnya coba ubah Robot menjadi struct. R2 akan tetap hidup
(kecuali Anda memasukkan R2 sebagai referensi ke dalam method Bunuh).
Enum pada C#
Untuk mendeklarasikan enum pada C#:
1
class Program {
2 static void Main(string[] args) {
4 Console.WriteLine(hariPertemuan); //Rabu
Console.WriteLine(suatuAngka);
7
Console.ReadKey();
8
}
9
}
10
11
enum Hari { Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu }
12
enum Angka { Nol, Satu, Dua, Tiga, Empat, Lima, Enam, Tujuh, Delapan,
Sembilan }
13
enum Status { Membaca = 1, Menulis = 2, Standby = 8 }
14
Enum sebetulnya disimpan sebagai int dan ditampilkan sebagai string seperti dapat dilihat
pada contoh Angka di atas. Nilai int tertentu dapat ditetapkan kepada enum tertenu pada saat
deklarasi enum seperti pada contoh Status di atas.
Database pada C#
Berurusan dengan database pada C#, pada dasarnya kita memerlukan paling tidak 4 dari
class-class berikut:
4 class pertama dari class-class di atas tidak benar-benar ada. Class-class tersebut merupakan
class yang spesifik terhadap database tertentu. Sebetulnya class-class tersebut di
atas merupakan class-class turunan dari class induk masing-masing fungsi. Sebagai contoh,
ketika Saya menyebutkan class Connection di atas, tergantung dari jenis databasenya, yang
saya maksud adalah: OleDbConnection, SqlConnection, MySqlConnection, OdbcConnection
atau NpgsqlConnection, yang merupakan class-class turunan dari class DbConnection.
Penggunaan class-class tersebut sangat mirip. Perbedaan antara mereka, tentunya ada pada
syntax SQL masing-masin DBMS (DataBase Management System).
Dari pilihan di atas, lebih dianjurkan menggunakan MariaDB atau XAMPP. Selain MySQL,
kita juga memerlukan MySQL .NET Connector, yang hanya tersedia
di: http://dev.mysql.com/downloads/connector/net/6.6.html#downloads. Jika Anda
menggunakan Visual Studio 2012 atau 2013, download versi terbaru (6.7.4 atau di atasnya).
Akan tetapi jika Anda masih menggunakan Visual Studio 2010 seperti Saya, download versi
6.5.4 atau sub versinya. Versi-versi tersebut sesunguhnya tidak jauh berbeda, saran tadi hanya
agar dapat menggunakan Data Source Configuration Wizard, apabila Anda ingin
mencobanya sewaktu waktu. Akan tetapi kita masih bisa terhubung ke MySQL tanpa wizard
tesebut. Perlu diketahui juga bahwa wizard tersebut tidak tersedia pada Visual Studio 2010
Express.
?
1var conn = new MySqlConnection();
2conn.ConnectionString = "Server=localhost; Uid=root; Pwd=123; Port=3306;";
3conn.Open();
4//Lakukan sesuatu dengan database
5conn.Close();
Agar Visual Studio dapat mengenali class MySqlConnection di atas, kita perlu menambahkan
perintah using MySql.Data.MySqlClient di atas deklarasi namespace. Tanpa perintah
using tersebut, kita akan harus
mengetikkan MySql.Data.MySqlClient.MySqlConnection pada saat membuat objek
koneksi di atas.
Deklarasi variabel menggunakan "var" di atas adalah suatu cara deklarasi variabel dengan
cara yang singkat. Visual Studio akan secara otomatis menentukan tipe data variabel conn di
atas berdasarkan nilai yang ditugaskan kepadanya. Baris pertama kode di atas bisa juga
ditulis:
?
1MySqlConnection conn = new MySqlConnection();
Dua baris pertama di atas juga dapat disingkat menjadi satu baris. Kita dapat langsung
memasukkan ConnectionString ke dalam Constructor class MySqlConnection:
?
var conn = new MySqlConnection("Server=localhost; Uid=root; Pwd=123;
1Port=3306;");
Server / Host, adalah alamat database server. Bisa berupa localhost atau 127.0.0.1
jika database server berada di komputer lokal, atau bisa juga alamat IP atau nama
domain dari komputer lain.
Uid / User Id / User, adalah username database yang digunakan untuk terhubung ke
database.
Pwd / Password, adalah password dari username di atas.
Port, adalah port database server. Port default untuk MySQL adalah 3306. Tidak
perlu ditulis apabila menggunakan port default.
Database, adalah nama database yang akan dipakai. Jangan gunakan parameter ini
jika tidak menggunakan database tertentu.
Parameter yang dipisah dengan garis miring di atas adalah alias. Sebagai contoh, kedua
ConnectionString di bawah sama-sama bisa dipakai:
?
1"Server=localhost; Uid=root; Pwd=123; Port=3306;"
2"Host=localhost; User=root; Password=123; Port=3306;"
7 //cmd.CommandText = "";
8 //cmd.Connection = conn;
16 nama,
gender,
17
fakultas,
18
tanggalDaftar.ToString("yyyy-MM-dd")
19
});
20
//Isi dari string query di atas akan menjadi:
21
//"INSERT INTO mahasiswa (id, namalengkap, gender, fakultas,
tanggaldaftar, updated)
22
23//VALUES (NULL, 'Fandi', 'Laki-laki', 'Fisika', '2001-08-08', NOW())"
24
25cmd.CommandText = query;
//Masukkan perintah/query yang akan dijalankan ke dalam CommandText
26
27
conn.Open();
28
//Buka koneksi
29
cmd.ExecuteNonQuery();
30
//Jalankan perintah / query dalam CommandText pada database
31
conn.Close();
32//Tutup koneksi
33
CommandText adalah Properties untuk menyimpan query yang akan dikirim ke MySQL, dan
Connection adalah objek koneksi yang akan digunakan Command untuk terhubung ke
database. Kode-kode di atas akan menginsert satu baris ke tabel "mahasiswa" di dalam
database "kampus" yang ada di database server "localhost". Untuk membuat database yang
digunakan pada contoh di atas, jalankan perintah berikut pada database server MySQL anda:
1 #Buat database
3
#Aktifkan database
4
USE kampus;
5
6
#Buat tabel
7
CREATE TABLE IF NOT EXISTS mahasiswa (
8
id INT PRIMARY KEY AUTO_INCREMENT,
9
namalengkap VARCHAR(100),
10 gender VARCHAR(10),
11 fakultas VARCHAR(50),
12 tanggaldaftar DATETIME,
13 updated DATETIME )
engine=innodb;
14
15
1
#Buat database
2
CREATE DATABASE IF NOT EXISTS kampus;
3
4
#Aktifkan database
5
USE kampus;
6
7 #Buat tabel
10 namalengkap VARCHAR(100),
gender VARCHAR(10),
11
fakultas VARCHAR(50),
12
tanggaldaftar DATETIME,
13
updated DATETIME )
14
engine=innodb;
15
Untuk membaca data dari database, terdapat paling tidak dua cara:
Menggunakan DataReader
Untuk menggunakan DataReader, kita memerlukan Connection, Command dan DataReader
itu sendiri. Perlu diketahui bahwa DataReader tidak memiliki Constructor. Kita harus mengisi
nilai DataReader menggunakan method ExecuteReader pada suatu objek Command. Berikut
contoh menggunakan DataReader:
4
//Koneksi harus terbuka untuk menjalankan ExecuteReader
5
conn.Open();
6
var r = cmd.ExecuteReader();
7 //Agar jelas, Anda juga bisa menuliskan:
8 //MySqlDataReader r = cmd.ExecuteReader();
11if (r.HasRows) {
//Method Read mencoba untuk membaca satu baris data dari database
12
//Menghasilkan true jika ada baris data, false apabila tidak ada
13baris data
14 r.Read();
15
16 Console.WriteLine("Data mahasiswa:");
25}
//Tutup koneksi setelah selesai membaca data
26
conn.Close();
27
Properties r, yaitu r.HasRows di dalam kondisi if di atas juga dapat diganti dengan r.Read()
jika kita ingin mengecek ada atau tidaknya suatu data sekaligus membaca satu baris data dari
database:
1 if (r.Read()) {
Console.WriteLine("Data mahasiswa:");
2
Console.WriteLine(r[0]); //Kolom pertama: (index 0)
3
Console.WriteLine(r[1]); //Kolom kedua:namalengkap (index 1)
4
Console.WriteLine(r[2]); //Kolom ketiga:gender (index 2)
5
Console.WriteLine(r["fakultas"]); //Dapat juga menggunakan nama kolom
6
Console.WriteLine(((DateTime)r["tanggaldaftar"]).ToString("dd MMMM
7 yyyy"));
//Kode di atas langsung mengkonversi data menjadi DateTime, kemudian
8
menjadi string.
9 r.Close(); //Sebaiknya r (DataReader) ditutup setelah dipakai
10}
Dan apabila kita ingin membaca seluruh baris data yang ada pada DataReader, kita dapat
mengganti if menjadi while. Dan jangan lupa untuk memindahkan perintah r.Close() keluar
dari loop while:
while (r.Read()) {
1
Console.WriteLine("Data mahasiswa:");
2
Console.WriteLine(r[0]); //Kolom pertama: (index 0)
3
Console.WriteLine(r[1]); //Kolom kedua:namalengkap (index 1)
4
Console.WriteLine(r[2]); //Kolom ketiga:gender (index 2)
5
Console.WriteLine(r["fakultas"]); //Dapat juga menggunakan nama kolom
6 Console.WriteLine(((DateTime)r["tanggaldaftar"]).ToString("dd MMMM
yyyy"));
7
//Kode di atas langsung mengkonversi data menjadi DateTime, kemudian
8 menjadi string.
}
9
r.Close(); //Sebaiknya r (DataReader) ditutup setelah dipakai
10
Kita juga dapat memindahkan semua baris data pada DataReader ke dalam suatu DataTable:
6
//Koneksi harus terbuka untuk menjalankan ExecuteReader
7
conn.Open();
8 var r = cmd.ExecuteReader();
9 //Baca semua baris data yang dapat diambil dari r ke dalam DataTable dt
10dt.Load(r);
11conn.Close();
12
Menggunakan DataAdapter
Menggunakan DataAdapter sebetulnya tidak terlalu berbeda dari contoh DataReader terakhir
di atas. Satu kelebihan menggunakan DataAdapter adalah ia secara otomatis membuka dan
menutup koneksi:
1
var conn = new
MySqlConnection("Host=localhost;Uid=root;Pwd=123;Database=kampus");
2
var cmd = new MySqlCommand("SELECT id, namalengkap, gender, fakultas,
3 tanggaldaftar, updated FROM mahasiswa", conn);
11 Console.WriteLine("Data mahasiswa:");
17 Console.WriteLine(baris.Field<DateTime>("tanggaldaftar").ToString("dd
MMMM yyyy"));
Perlu diketahui bahwa selain membaca data dengan method Fill di atas, DataAdapter juga
dapat secara otomatis mengupdate baris-baris data yang berubah, menginsert baris-baris baru,
dan menghapus baris-baris data yang telah dihapus. Atau dengan kata lain, perubahan yang
terjadi pada DataTable dikirim juga secara otomatis ke database server. Semua itu dilakukan
hanya dengan satu Method: Update. Akan tetapi penggunaan method tersebut tidak akan
dibahas di sini.