Pemrosesan Data
6.1 Pengantar
Bab ini akan menyajikan beberapa topik
beragam. Setelah Anda mempelajari dasar-dasar pemrograman menggunakan Visual
C#, Anda dapat menggunakan topik-topik yang disajikan pada bab ini untuk
melakukan operasi-operasi yang lebih rumit. Pertama, Anda akan mempelajari sejumlah
teknik pemrosesan string dan karakter yang berguna pada aplikasi-aplikasi yang
secara ekstensif bekerja dengan teks. Kemudian, Anda akan mempelajari struktur,
yang dapat Anda pakai untuk mengenkapsulasi beberapa variabel ke dalam satu
item. Setelah itu, Anda akan mempelajari tipe enumerasi, yang merupakan tipe
data yang bisa Anda ciptakan, yang memuat nilai-nilai spesifik. Terakhir, Anda
akan mempelajari kontrol ImageList,
yang merupakan sebuah struktrur data untuk menyimpan dan membaca citra-citra.
6.2 Pemrosesan Karakter dan String
KONSEP:
Sejumlah pekerjaan pemrograman mensyaratkan bahwa Anda perlu memanipulasi
string pada level detil. C# dan .NET Framework menyediakan perangkat-perangkat
yang dapat Anda pakai untuk memanipulasi karakter-karakter secara individual
dan sejumlah karakter di dalam string.
Kadangkala data yang dipakai di dalam suatu
program memiliki bentuk teks. Pengolah kata, program pesan teks, aplikasi
e-mail, browser Web, dan pemeriksa ejaan merupakan beberapa contoh program yang
bekerja secara ekstensif dengan teks. Bab-bab sebelumnya pada buku ini telah
mendemonstrasikan sejumlah teknik pemrosesan teks, seperti membandingkan string
dan mengkonversi string menjadi tipe data lain. Kadangkala, Anda memerlukan
operasi pada string dengan level yang lebih detil. Beberapa operasi
mengharuskan Anda untuk mengakses dan memanipulasi karakter di dalam suatu
string.
Sebagai contoh, Anda bisa saja menggunakan
program atau situs Web yang mengharuskan Anda untuk membuat password yang
memenuhi persyaratan tertentu. Beberapa sistem mengharuskan password untuk
memiliki panjang minimum dan memuat sedikitnya satu huruf besar, sedikitnya
satu huruf kecil, dan sedikitnya satu dijit numerik. Persyaratan ini
dimaksudkan untuk mencegah kata-kata biasa digunakan sebagai password sehingga
membuat password lebih aman. Ketika sebuah password baru diciptakan, sistem
perlu memeriksa setiap karakter di dalam password untuk menentukan apakah ia
memenuhi persyaratan atau tidak. Pada bagian selanjutnya, Anda akan melihat
sebuah contoh algoritma yang melakukan operasi ini. Anda akan mempelajari tipe
data char dan proses pembacaan
karakter di dalam suatu string.
Tipe Data char
Sejauh ini, Anda telah menggunakan tipe data
string untuk menyimpan teks. C# juga menyediakan tipe data char, yang dipakai untuk menyimpan karakter. Sebuah variabel dengan
tipe char hanya dapat memuat satu
karakter pada suatu waktu. Berikut adalah sebuah contoh bagaimana Anda
mendeklarasikan sebuah variabel char:
char
huruf;
Statemen ini mendeklarasikan sebuah variabel
dengan nama huruf, yang dapat
menyimpan satu karakter. Pada C#, literal karakter diapit dengan tanda kutip
tunggal. Berikut adalah sebuah contoh yang menunjukkan bagaimana Anda
menugaskan sebuah karakter kepada variabel huruf:
huruf = 'g';
Statemen ini menugaskan karakter ‘g’ kepada
variabel huruf. Karena variabel char hanya dapat memuat satu karakter, ia tidak
kompatibel dengan string. Sebagai contoh, Anda tidak dapat menugaskan sebuah
string kepada suatu variabel char,
bahkan jika string hanya memuat satu karakter. Statemen berikut, misalnya,
tidak akan bisa dikompilasi karena ia mencoba menugaskan sebuah literal string
kepada sebuah variabel char:
huruf = "g"; // ERROR! Tidak dapat menugaskan sebuah string kepada suatu variabel
char
Adalah penting bahwa Anda tidak perlu bingung
dalam membedakan literal karakter, yang diapit oleh tanda kutip tunggal, dengan
literal string, yang diapit oleh tanda kutip ganda. Ketika Anda perlu
mengkonversi suatu variabel char
menjadi string, Anda dapat memanggil metode ToString. Sebagai contoh, statemen berikut menampilkan nilai dari
variabel huruf di dalam suatu kotak
pesan:
MessageBox.Show(huruf.ToString());
Statemen berikut menunjukkan contoh lain.
Asumsikan bahwa huruf adalah sebuah
variabel char dan labelKeluaran
merupakan nama dari suatu kontrol Label:
labelKeluaran.Text
= huruf.ToString();
Membaca Karakter Di Dalam Suatu
String
C# dapat dipakai untuk mengakses
karakter-karakter secara individual di dalam suatu string menggunakan notasi
pengindeksan. Ini dapat dimungkinkan dengan memandang string sebagai suatu
array karakter. Anda dapat menggunakan indeks 0 untuk mengakses karakter
pertama, indeks 1 untuk mengakses karakter kedua, dan seterusnya. Indeks dari
karakter terakhir adalah panjang string dikurangi dengan 1. Kode berikut
menunjukkan salah satu contohnya.
1
2
3
4
5
6
7
8
9
|
//Mendeklarasikan sebuah string
dan sebuah char
string nama = "Kristof";
char huruf;
//Membaca karakter pertama (pada posisi 0)
huruf = nama[0];
//Menampilkan karakter
MessageBox.Show(huruf.ToString());
|
Pada kode ini, baris 2 mendeklarasikan sebuah
variabel string dengan nama nama,
yang diinisialisasi dengan string “Kristof”. Baris 3 mendeklarasikan sebuah
variabel char dengan nama huruf. Baris 6 membaca karakter pada
posisi 0 di dalam nama (karakter pertama di dalam string) dan menugaskannya
kepada variabel huruf. Baris 9
menampilkan nilai dari variabel huruf
di dalam suatu kotak pesan. Jika kode ini dieksekusi, sebuah kotak pesan akan ditampilkan
yang menunjukkan karakter K.
Kode berikut menunjukkan bagaiman sebuah loop
dapat dipakai untuk menjejak karakter-karakter di dalam suatu string.
Perhatikan bahwa di dalam loop for,
variabel indeks memiliki nilai yang
diawali dari 0 dan diinkremen pada tiap iterasi loop, dan loop akan beriterasi
sepanjang nilai indeks kurang dari nama.Lenght. Jika kode ini dieksekusi,
serangkaian kotak pesan akan ditampilkan yang menampilkan karakter K, r, i, s,
t, o, dan f.
1
2
3
4
5
6
7
8
9
10
|
//Mendeklarasikan sebuah string
dan sebuah char
string nama = "Kristof";
char huruf;
//Menampilkan karakter-karakter
di dalam string
for (int indeks = 0; indeks <
nama.Length; indeks++)
{
huruf = nama[indeks];
MessageBox.Show(huruf.ToString());
}
|
Ingat bahwa indeks atau subskript menyediakan
akses read-only pada karakter-karakter di dalam suatu string. Anda tidak dapat
menggunakan sebuah indeks untuk mengubah nilai karakter. Sebagai contoh, kode
berikut tidak akan bisa dikompilasi karena statemen kedua mencoba menggunakan
sebuah ekspresi indeks untuk mengubah nilai dari karakter pertama di dalam
variabel nama:
string nama = "Kristof";
nama[0] = 'C'; // ERROR!
Anda dapat menggunakan loop foreach untuk membaca karakter-karakter
individual di dalam sebuah string. Kode berikut menunjukkan suatu contoh. Jika
kode ini dieksekusi, serangkaian kotak pesan akan ditampilkan yang menunjukkan
karakter-karakter K, r, i, s, t, o, dan f.
1
2
3
4
5
6
7
8
9
|
//Mendeklarasikan sebuah string
dan sebuah char
string nama = "Kristof";
char huruf;
//Menampilkan karakter-karakter
di dalam string
foreach (char huruf in nama)
{
MessageBox.Show(huruf.ToString());
}
|
Penguji Karakter dan Metode-Metode
Konversi
Tipe data char menyediakan sejumlah metode untuk menguji nilai dari sebuah
karakter. Sejumlah metode dicantumkan pada Tabel 6.1. Perhatikan bahwa setiap
metode yang dicantumkan pada tabel menghasilkan suatu nilai Boolean true atau false.
Contoh 6.1 Sejumlah metode penguji karakter
Metode
|
Deskripsi
|
char.IsDigit(ch)
char.IsDigit(str , indeks)
char.IsLetter(ch)
char.IsLetter(str , indeks )
char.IsLetterOrDigit(ch)
char.IsLetterOrDigit
(str , indeks)
char.IsLower(ch)
char.IsLower(str , indeks)
char.IsPunctuation(ch)
char.IsPunctuation
(str , indeks)
char.IsUpper(ch)
char.IsUpper(str , indeks)
char.IsWhiteSpace(ch)
char.IsWhiteSpace
(str , indeks)
|
Argumen ch adalah sebuah karakter. Metode ini menghasilkan true jika ch adalah sebuah dijit (0
sampai 9) atau false jika selain
itu.
Contoh:
string str = "12345";
if (char.IsDigit(str[0]))
{
MessageBox.Show("Karakter 0 adalah
" +
"sebuah dijit.");
}
Argumen str adalah sebuah string, dan indeks adalah posisi dari sebuah karakter di dalam str. Metode ini menghasilkan true jika karakter adalah sebuah
dijit (0 sampai 9) atau false jika
selain itu.
Contoh:
string str = "12345";
if (char.IsDigit(str, 0))
{
MessageBox.Show("Karakter
0 adalah “ +
"sebuah
dijit.");
}
Argumen ch adalah sebuah karakter. Metode ini menghasilkan true jika ch adalah sebuah huruf alfabetik atau false jika sebaliknya.
Contoh:
string str = "Hallo Dunia";
if (char.IsLetter(str[0]))
{
MessageBox.Show("Karakter
0 adalah " +
"sebuah
huruf.");
}
Argumen str adalah sebuah string, dan indeks adalah posisi dari sebuah karakter di dalam str. Metode menghasilkan true jika karakter adalah suatu huruf
alfabetik atau false jika tidak.
Contoh:
string str = "Hallo Dunia";
if (char.IsLetter(str, 0))
{
MessageBox.Show("Karakter
0 adalah " +
"a
letter.");
}
Argumen ch adalah sebuah karakter. Metode ini menghasilkan true jika ch adalah sebuah huruf alfabetik atau
sebuah dijit numerik. Selain itu, metode akan menghasilkan false.
Contoh:
string str = "Hallo Dunia";
if (char.IsLetterOrDigit(str[0]))
{
MessageBox.Show("Karakter
0 adalah " +
"sebuah
huruf atau " +
"sebuah
dijit.");
}
Argumen str di dalam sebuah string, dan indeks adalah posisi dari suatu karakter di dalam str. Metode menghasilkan true jika karakter adalah sebuah
huruf alfabetik atau sebuah dijit numerik. Selain itu, metode menghasilkan false.
Contoh:
string str = "12345";
if (char.IsLetterOrDigit(str, 0))
{
MessageBox.Show("Karakter
0 adalah " +
"sebuah
huruf atau " +
"sebuah dijit.");
}
Argumen ch adalah sebuah karakter. Metode menghasilkan true jika ch adalah sebuah huruf kecil atau false jika tidak.
Contoh:
string str = "hallo dunia";
if (char.IsLower(str[0]))
{
MessageBox.Show("Karakter
0 adalah" +
"sebuah
huruf kecil.");
}
Argumen str di dalam sebuah string, dan indeks adalah posisi dari suatu karakter di dalam str. Metode menghasilkan true jika karakter adalah sebuah
huruf kecil. Jika tidak, metode menghasilkan false.
Contoh:
string str = “hallo dunia”;
if (char.IsLower(str, 0))
{
MessageBox.Show("Karakter
0 adalah " +
"sebuah
huruf kecil.");
}
Argumen ch adalah sebuah karakter. Metode menghasilkan true jika ch dikategorikan sebagai tanda baca. Jika tidak, metode
menghasilkan false.
Contoh:
string str = "Hallo!";
if (char.IsPunctuation(str[5]))
{
MessageBox.Show("Karakter
7 adalah sebuah " +
"tanda baca.");
}
Argumen str adalah sebuah string, dan indeks adalah posisi dari sebuah
karakter di dalam str. Metode ini
menghasilkan true jika karakter
dikategorikan sebagai tanda baca. Jika tidak, metode menghasilkan false.
Contoh:
string str = "Hallo!";
if (char.IsPunctuation(str, 5))
{
MessageBox.Show("Karakter
5 adalah " +
"tanda baca.");
}
Argumen ch adalah sebuah karakter. Metode menghasilkan true jika ch adalah sebuah huruf besar atau false jika tidak.
Contoh:
string str = "Hallo Dunia";
if (char.IsUpper(str[0]))
{
MessageBox.Show("Karakter
0 adalah" +
"sebuah
huruf besar.");
}
Argumen str di dalam sebuah string, dan indeks adalah posisi dari suatu karakter di dalam str. Metode menghasilkan true jika karakter adalah sebuah
huruf besar. Jika tidak, metode menghasilkan false.
Contoh:
string str = “Hallo Dunia”;
if (char.IsUpper(str, 0))
{
MessageBox.Show("Karakter
0 adalah " +
"sebuah
huruf besar.");
}
Argumen ch adalah sebuah karakter. Metode menghasilkan true jika ch adalah sebuah karakter spasi-putih atau false jika tidak. (Karakter spasi-putih adalah spasi, tab,
linefeed, carriage-return, formfeed, vertical-tab, dan garis-baru).
Contoh:
string str = " ";
if (char.IsWhiteSpace(str[0]))
{
MessageBox.Show("Karakter
0 adalah " +
"spasi-putih.");
}
Argumen str di dalam sebuah string, dan indeks adalah posisi dari suatu karakter di dalam str. Metode menghasilkan true jika ch adalah sebuah karakter spasi-putih atau false jika tidak. (Karakter spasi-putih adalah spasi, tab,
linefeed, carriage-return, formfeed, vertical-tab, dan garis-baru).
Contoh:
string str = " ";
if (char.IsWhiteSpace(str, 0))
{
MessageBox.Show("Karakter
0 adalah " +
"spasi-putih.");
}
|
Pada Tutorial 6.1, Anda menggunakan beberapa
metode pengujian karakter pada suatu aplikasi yang memvalidasi password.
Tutorial 6.1: Menciptakan Aplikasi Validasi Password
Banyak sistem
terproteksi-password dapat dipakai user untuk menciptakan passwordnya sendiri.
Ketika user menciptakan sebuah password, sistem akan memeriksa password untuk
menenukan apakah ia memenuhi persyaratan minimum. Jika tidak, sistem akan
menolak password dan mengharuskan user untuk menciptakan password yang lebih
aman.
Pada tutorial
ini, Anda akan menciptakan sebuah aplikasi Validasi
Password. Form aplikasi, yang telah
diciptakan bagi Anda, ditampilkan pada Gambar 6.1. Ketika aplikasi dijalankan,
user akan memasukkan sebuah password dan kemudian mengklik tombol Periksa Password. Aplikasi akan memeriksa password untuk memastikan ia
memenuhi persyaratan berikut:
·
Password harus sedikitnya memiliki panjang delapan karakter.
·
Password harus memuat sedikitnya satu karakter huruf-besar.
·
Password harus memuat sedikitnya satu karakter huruf-kecil.
·
Password harus memuat sedikitnya satu dijit numerik.
Gambar 6.1 Form aplikasi Validasi Password
Langkah 1: Awali Visual Studio (atau Visual Studio Express). Buka
projek dengan nama Validasi Password.
Langkah 2: Buka kode dari form Form1 pada editor kode. Ketikkan komentar dan kode untuk metode JumlahHurufBesar, yang ditunjukkan pada
baris 20-37 pada Program 6.1. Tujuan dari metode JumlahHurufBesar adalah menerima sebuah string sebagai argumennya
dan menghasilkan jumlah huruf besar yang dimuat di dalam string.
Langkah 3: Ketikkan komentar dan kode untuk metode JumlahHurufKecil, yang ditunjukkan pada
baris 39-56 pada Program 6.1. Tujuan dari metode JumlahHurufKecil adalah menerima sebuah string sebagai argumennya
dan menghasilkan jumlah huruf kecil yang dimuat di dalam string.
Langkah 4: Ketikkan komentar dan kode untuk metode JumlahDijit, yang ditunjukkan pada
baris 58-75 pada Program 6.1. Tujuan dari metode JumlahDijit adalah menerima sebuah string sebagai argumennya dan
menghasilkan jumlah dijit numerik yang dimuat di dalam string.
Langkah 5: Selanjutnya, Anda menciptakan event-event handler Click untuk kontrol-kontrol Button. Kembali ke Designer dan klik ganda pada kontrol tombolPeriksa. Ini akan membuka editor kode, dan Anda akan melihat
sebuah event handler kosong dengan nama tombolPeriksa_Click.
Sempurnakan event handler dengan mengetikkan kode yang ditunjukkan pada baris
79-96 pada Program 6.1. Amati kode ini:
Baris 79-82: Statemen pada baris 79 mendeklarasikan sebuah konstanta
untuk panjang password minimum. Baris 82 mendeklarasikan variabel password dan menginisialisasinya dengan
nilai yang dimasukkan oleh user.
Baris 85: Statemen if-else
yang diawali pada baris 85 mengevaluasi sebuah ekspresi Boolean kompon.
Statemen itu dinterpretasikan seperti ini:
Jika panjang password sedikitnya 8 dan
jumlah huruf
besar di dalam password sedikitnya 1 dan
jumlah huruf
kecil di dalam password sedikitnya 1 dan
jumlah dijit
numerik di dalam password sedikitnya 1,
Maka password valid
Jika tidak
Maka password tidak valid
Langkah 6: Kembali ke Designer
dan klik ganda pada kontrol tombolKeluar.
Pada editor kode, Anda akan melihat sebuah event handler kosong dengan nama tombolKeluar_Click. Sempurnakan event
handler dengan mengetikkan kode yang ditunjukkan pada baris 101-102 pada
Program 6.1.
Langkah 7: Simpan projek dan jalankan aplikasi. Ketika aplikasi
dijalankan, uji sejumlah password untuk mengkonfirmasi apakah aplikasi telah
bekerja dengan benar. Ketika selesai, klik tombol Keluar untuk mengakhiri aplikasi.
Program 6.1 Kode utuh untuk form Form1 pada aplikasi Validasi
Password
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Validasi_Password
{
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
//Metode
JumlahHurufBesar menerima sebuah argumen string
//dan
menghasilkan banyak huruf besar yang dimuatnya
private
int JumlahHurufBesar(string str)
{
int
hurufBesar = 0; //jumlah huruf besar
//Menghitung karakter huruf-besar di dalam str
foreach (char ch in str)
{
if (char.IsUpper(ch))
{
hurufBesar++;
}
}
//Menghasilkan banyak huruf besar
return hurufBesar;
}
//Metode
JumlahHurufKecil menerima sebuah argumen string
//dan
menghasilkan banyak huruf kecil yang dimuatnya
private
int JumlahHurufKecil(string str)
{
int
hurufKecil = 0; //jumlah huruf kecil
//Menghitung karakter huruf-kecil di dalam str
foreach (char ch in str)
{
if (char.IsLower(ch))
{
hurufKecil++;
}
}
//Menghasilkan banyak huruf kecil
return hurufKecil;
}
//Metode
JumlahDijit menerima sebuah argumen string
//dan
menghasilkan banyak dijit yang dimuatnya
private
int JumlahDijit(string str)
{
int
dijit = 0; //jumlah dijit numerik
//Menghitung dijit di dalam str
foreach (char ch in str)
{
if (char.IsDigit(ch))
{
dijit++;
}
}
//Menghasilkan banyak dijit numerik
return dijit;
}
private
void tombolPeriksa_Click(object sender, EventArgs e)
{
const
int PANJANG_MIN = 8; //Panjang minimum password
//Membaca password dari TextBox
string password = teksPassword.Text;
//Memvalidasi password
if
(password.Length >= PANJANG_MIN &&
JumlahHurufBesar(password) >= 1 &&
JumlahHurufKecil(password) >= 1 &&
JumlahDijit(password) >= 1)
{
MessageBox.Show("Password valid.");
}
else
{
MessageBox.Show("Password tidak memenuhi " +
"persyaratan.");
}
}
private
void tombolKeluar_Click(object sender, EventArgs e)
{
//Menutup form
this.Close();
}
}
}
|
Konversi Jenis Huruf
Tipe data char juga menyediakan metode ToLower
dan ToUpper yang dicantumkan pada
Tabel 6.2 untuk mengkonversi jenis huruf (huruf besar atau huruf kecil) dari
sebuah karakter. Setiap metode menerima sebuah argumen char dan menghasilkan suatu nilai char.
Tabel 6.2 Metode-Metode Konversi Jenis Huruf Karakter
Metode
|
Deskripsi
|
char.ToLower(ch)
char.ToUpper(ch)
|
Argumen ch adalah sebuah karakter. Metode menghasilkan huruf kecil
ekivalen dari ch.
Argumen ch adalah sebuah karakter. Metode menghasilkan huruf besar
ekivalen dari ch.
|
Jika argumen dari metode ToLower adalah sebuah karakter huruf-besar, maka metode
menghasilkan huruf kecil ekivalen. Sebagai contoh, lihat pada kode berikut.
Statemen pada baris 2 menugaskan karakter ‘a’ kepada variabel huruf:
1
2
|
string str = "ABC";
char huruf =
char.ToLower(str[0]);
|
Jika argumen berupa huruf kecil, maka metode ToLower tidak mengubah apapun.
Jika argumen dari metode ToUpper adalah sebuah karakter huruf-kecil, maka metode
menghasilkan huruf besar ekivalen. Sebagai contoh, lihat pada kode berikut.
Statemen pada baris 2 menugaskan karakter ‘A’ kepada variabel huruf:
1
2
|
string str = "abc";
char huruf =
char.ToLower(str[0]);
|
Jika argumen berupa huruf besar, maka metode ToUpper tidak mengubah apapun.
Pencarian Substring
Beberapa pekerjaan mengharuskan Anda untuk
melakukan suatu pencarian string karakter tertentu di dalam sebuah string.
Sebuah string yang ada di dalam string lain disebut dengan substring. Objek dengan tipe data string memiliki sejumlah metode yang dapat Anda pakai untuk
melakukan pencarian substring. Tabel 6.3 mencantumkan metode Contains, StartsWith, dan EndsWith.
Setiap metode di dalam Tabel 6.3 menghasilkan sebuah nilai Boolean yang
mengindikasikan apakah substring ditemukan atau tidak.
Tabel 6.3 Metode-Metode Pencarian Substring
Metode
|
Deskripsi
|
stringVar.Contains(substring)
stringVar.Contains(ch)
stringVar.StartsWith(substring)
stringVar.EndsWith( substring )
|
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string. Metode menghasilkan true jika stringVar
memuat string substring atau false jika tidak.
Contoh:
//Kode beriktu menampilkan
// "es ditemukan."
string str = "es krim coklat";
if (str.Contains("es"))
{
MessageBox.Show("es
ditemukan.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen ch
adalah sebuah karakter. Metode menghasilkan true jika stringVar memuat karakter ch
atau false jika tidak.
Contoh:
//Kode berikut menampilkan
// "b ditemukan."
string str = "abcd";
if (str.Contains('b'))
{
MessageBox.Show("b
ditemukan.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string. Metode menghasilkan true jika stringVar
diawali dengan string substring
atau false jika tidak.
Contoh:
//Kode berikut menampilkan
//"String diawali dengan es."
string str = "es krim coklat";
if (str.StartsWith("es"))
{
MessageBox.Show("String
diawali dengan " +
"es.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string. Metode menghasilkan true jika stringVar
diakhiri dengan string substring
atau false jika tidak.
Contoh:
//Kode berikut menampilkan
//"String diakhiri dengan coklat."
string str = "es krim coklat";
if (str.StartsWith("coklat"))
{
MessageBox.Show("String
diawali dengan " +
"coklat.");
}
|
Metode-metode yang ditunjukkan pada Tabel 6.3
dapat dipakai untuk mengetahui apakah substring tertentu ditemukan di dalam
sebuah string atau tidak. Kadangkala Anda juga ingin mengetahui posisi dari
substring. Ketika hal ini diinginkan, Anda dapat menggunakan metode IndexOf atau LastIndexOf yang ditunjukkan pada Tabel 6.4. Perhatikan bahwa
setiap metode pada Tabel 6.4 menghasilkan sebuah int.
Tabel 6.4 Metode-Metode untuk Membaca Posisi Karakter
atau Substring
Metode
|
Deskripsi
|
stringVar.IndexOf(substring)
stringVar.IndexOf(substring,
awal)
stringVar.IndexOf(substring,
awal, hitung)
stringVar.LastIndexOf(substring)
stringVar.LastIndexOf(
substring,
awal)
stringVar.LastIndexOf(
substring,
awal, hitung)
stringVar.LastIndexOf(ch)
stringVar.LastIndexOf(ch, awal)
stringVar.LastIndexOf(ch,
awal,
hitung)
|
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string. Jika substring ditemukan di dalam stringVar, maka metode menghasilkan
posisi integer dari kemunculan pertama dari substring. Jika substring tidak
ditemukan, metode menghasilkan -1.
Contoh:
//Kode berikut menampilkan "3"
string str = "es krim coklat";
int posisi = str.IndexOf("krim");
if (posisi != −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show("krim
tidak ditemukan.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string dan argumen awal
adalah sebuah integer. Metode ini melakukan pencarian substring di dalam stringVar,
diawali dari posisi yang ditetapkan oleh awal
dan berlanjut sampai akhir dari stringVar.
Jika substring ditemukan, maka
metode akan menghasilkan integer posisi dari kemunculan pertamanya. Jika
tidak ditemukan, metode menghasilkan -1.
Contoh:
//Kode berikut menampilkan “7”
string str = “dimana-mana”;
int posisi = str.IndexOf(“ma”, 4);
if (posisi != −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show(“ma
tidak ditemukan.”);
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string, argumen awal
adalah sebuah integer, dan argumen hitung
juga sebuah integer. Metode ini melakukan pencarian substring di dalam stringVar,
diawali dari posisi yang ditetapkan oleh awal
dan berlanjut sampai sebanyak hitung
karakter. Jika substring
ditemukan, maka metode akan menghasilkan integer posisi dari kemunculan
pertamanya. Jika tidak ditemukan, metode menghasilkan -1.
Contoh:
//Kode berikut menampilkan "6"
string str = "xx oo xx oo xx";
int posisi = str.IndexOf("xx", 3,
8);
if (posisi!= −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show("xx
tidak ditemukan.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string. Jika substring ditemukan di dalam stringVar, maka metode menghasilkan
posisi integer dari kemunculan terakhir dari substring. Jika substring tidak ditemukan, metode menghasilkan
-1.
Contoh:
//Kode berikut menampilkan “11”.
string str = “biru hijau biru”;
int posisi = str.LastIndexOf(“biru”);
if (posisi!= −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show(“biru
tidak ditemukan.”);
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string dan argumen awal
adalah sebuah integer. Metode ini melakukan pencarian substring di dalam stringVar,
diawali dari posisi yang ditetapkan oleh awal
dan berlanjut mundur sampai awal dari stringVar.
Jika substring ditemukan, maka
metode akan menghasilkan integer posisi dari kemunculan pertamanya. Jika
tidak ditemukan, metode menghasilkan -1.
Contoh:
//Kode berikut menampilkan "6".
string str = "xx oo xx oo xx";
int posisi = str.LastIndexOf("xx",
10);
if (posisi != −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show("xx
tidak ditemukan.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen substring
juga merupakan suatu string, argumen awal
adalah sebuah integer, dan argumen hitung
juga sebuah integer. Metode ini melakukan pencarian substring di dalam stringVar,
diawali dari posisi yang ditetapkan oleh awal
dan berlanjut mundur ke awal stringVar
sebanyak hitung karakter. Jika substring ditemukan, maka metode akan
menghasilkan integer posisi dari kemunculan pertamanya. Jika tidak ditemukan,
metode menghasilkan -1.
Contoh:
//Kode berikut menampilkan "6".
string str = "oo xx oo xx oo";
int posisi = str.LastIndexOf("oo",
10, 8);
if (posisi != −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show("oo
tidak ditemukan.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen ch
adalah sebuah karakter. Jika ch
ditemukan di dalam stringVar, maka
metode menghasilkan posisi integer dari kemunculan terakhir dari ch. Jika ch tidak ditemukan, metode menghasilkan -1.
Contoh:
//Kode berikut menampilkan "10".
string str = "es krim coklat";
int posisi = str.LastIndexOf('k');
if (posisi != −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show("k
tidak ditemukan.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen ch
adalah sebuah karakter dan argumen awal
adalah sebuah integer. Metode ini melakukan pencarian ch di dalam stringVar,
diawali dari posisi yang ditetapkan oleh awal
dan berlanjut mundur sampai awal dari stringVar.
Jika ch ditemukan, maka metode
akan menghasilkan integer posisi dari kemunculan pertamanya. Jika tidak
ditemukan, metode menghasilkan -1.
Contoh:
//Kode berikut menampilkan "3".
string str = "es krim coklat";
int posisi = str.LastIndexOf('k', 9);
if (posisi != −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show("k
tidak ditemukan.");
}
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen ch
adalah sebuah karakter, argumen awal
adalah sebuah integer, dan argumen hitung
juga sebuah integer. Metode ini melakukan pencarian ch di dalam stringVar,
diawali dari posisi yang ditetapkan oleh awal
dan berlanjut mundur sebanyak hitung
karakter sampai awal dari stringVar.
Jika ch ditemukan, maka metode
akan menghasilkan integer posisi dari kemunculan pertamanya. Jika tidak
ditemukan, metode menghasilkan -1.
Contoh:
//Kode berikut menampilkan "3".
string str = "es krim coklat";
int posisi = str.LastIndexOf('k', 9, 8);
if (posisi != −1)
{
MessageBox.Show(posisi.ToString());
}
else
{
MessageBox.Show("k
tidak ditemukan.");
}
|
Kadangkala Anda perlu membaca sejumlah
karakter tertentu dari sebuah string. Sebagai contoh, dimisalkan bahwa sebuah
string memuat nomor telepon, seperti “(0622)6386-4834” dan Anda tertarik untuk
mendapatkan kode area. Anda memerlukan suatu cara untuk membaca
karakter-karakter pada posisi 1 sampai 4. Anda dapat menggunakan metode Substring, seperti ditunjukkan pada
Tabel 6.5. Perhatikan bahwa metode Substring
menghasilkan sebuah string.
Tabel 6.5 Metode Substring
Metode
|
Deskripsi
|
stringVar.Substring(awal)
stringVar.Substring(awal, hitung)
|
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen awal
adalah sebuah integer yang menetapkan sebuah posisi di dalam stringVar. Metode menghasilkan sebuah
string yang memuat karakter-karakter yang diawali pada awal, berlanjut ke akhir dari stringVar.
Contoh:
//Kode berikut menampilkan "datang".
string str = "selamat datang";
MessageBox.Show(str.Substring(8));
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen awal
adalah sebuah integer yang menetapkan sebuah posisi di dalam stringVar dan hitung juga adalah sebuah integer yang menentukan jumlah
karakter. Metode menghasilkan sebuah string yang memuat karakter-karakter
yang diawali pada awal, berlanjut
sebanyak hitung karakter.
Contoh:
//Kode berikut menampilkan "Serius".
string str = "Serius Santai";
MessageBox.Show(str.Substring(0, 6));
|
Metode-Metode
untuk Memodifikasi String
Tabel 6.6 menjelaskan beberapa metode yang
dimiliki oleh objek-objek string
untuk memodifikasi isi dari sebuah string dengan cara-cara berikut:
·
Metode Insert menyisipkan
sebuah string ke dalam string lain.
·
Metode Remove menghapus
karakter-karakter tertentu dari sebuah string.
·
Metode ToLower mengkonversi
sebuah string menjadi semua karakter huruf kecil.
·
Metode ToUpper mengkonversi
sebuah string menjadi semua karakter huruf besar.
·
Metode Trim menghapus semua
spasi di depan dan di belakang dari sebuah string.
·
Metode TrimStart menghapus
semua spasi yang ada di depan dari sebuah string.
·
Metode TrimEnd menghapus
semua spasi yang ada di depan dari sebuah string.
Adalah penting untuk mengingat bahwa
metode-metode yang ditunjukkan pada Tabel 6.6 sebenarnya tidak memodifikasi
objek string pemanggil. Metode-metode itu menghasilkan salinan termodifikasi
dari objek string pemanggil. Sebagai contoh, lihat pada kode berikut, yang
mendemonstrasikan metode Remove:
1
2
3
4
|
string str1 = "matahari";
string str2 = str1.Remove(4);
MessageBox.Show(str1);
MessageBox.Show(str2);
|
Baris 1 mendeklarasikan sebuah variabel string dengan nama str1, yang diinisialisasi dengan string “matahari”. Baris 2
memanggil metode str1.Remove, yang
melewatkan 4 sebagai argumen. Metode ini menghasilkan salinan dari str1 dengan semua karakter dari posisi
5 ke akhir string dihapus. Baris 3 menampilkan variabel str1, yaitu “matahari”,
dan baris 4 menampilkan variabel str2,
yaitu “mata”.
Tabel 6.6 Metode-Metode untuk Memodifikasi Sebuah
String
Metode
|
Deskripsi
|
stringVar.Insert(awal, strItem)
stringVar.Remove(awal)
stringVar.Remove(awal, hitung)
stringVar.ToLower()
stringVar.ToUpper()
stringVar.Trim()
stringVar.TrimStart()
stringVar.TrimEnd()
|
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen awal
adalah sebuah integer yang menetapkan sebuah posisi di dalam stringVar, dan argumen strItem adalah sebuah string yang
akan disisipkan. Metode ini menghasilkan sebuah string yang memuat salinan
dari stringVar dengan strItem disisipkan ke dalamnya
dimulai pada posisi yang ditetapkan oleh awal.
Contoh:
//Berikut menampilkan "Kota Pematang Siantar".
string str1 = "Kota Pematang";
string str2 = str1.Insert(13, " Siantar");
MessageBox.Show(str2);
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen awal
adalah sebuah integer yang menetapkan sebuah posisi di dalam stringVar. Metode ini menghasilkan
sebuah salinan stringVar dimana
semua karakter dari posisi yang ditetapkan oleh awal sampai ke akhir akan dihapus.
Contoh:
//Berikut menampilkan "blue".
string str1 = "blueberry";
string str2 = str1.Remove(4);
MessageBox.Show(str2);
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Argumen awal
adalah sebuah integer yang menetapkan sebuah posisi di dalam stringVar dan argumen hitung adalah sebuah integer yang
menetapkan banyaknya karakter. Metode ini menghasilkan sebuah salinan stringVar dimana sebanyak hitung
karakter dihapus, diawali dari posisi yang ditetapkan oleh awal.
Contoh:
//Berikut menampilkan “aku indonesia”.
string str1 = “aku cinta indonesia”;
string str2 = str1.Remove(4, 6);
MessageBox.Show(str2);
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Metode ini menghasilkan sebuah string yang
memuat salinan dari stringVar yang
dikonversi menjadi huruf kecil.
Contoh:
//Berikut menampilkan "abc".
string str1 = "ABC";
string str2 = str1.ToLower();
MessageBox.Show(str2);
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Metode ini menghasilkan sebuah string yang
memuat salinan dari stringVar yang
dikonversi menjadi huruf besar.
Contoh:
//Berikut menampilkan "ABC".
string str1 = "abc";
string str2 = str1.ToLower();
MessageBox.Show(str2);
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Metode menghasilkan sebuah string yang memuat
salinan dari stringVar dengan
semua spasi depan dan belakang dihapus.
Contoh:
//Berikut menampilkan ">Hallo<".
string str1 = " Hallo ";
string str2 = str1.Trim();
MessageBox.Show(">" + str2 + "<");
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Metode menghasilkan sebuah string yang memuat
salinan dari stringVar dengan
semua spasi depan dihapus.
Contoh:
//Berikut menampilkan ">Hallo<".
string str1 = " Hallo";
string str2 = str1.TrimStart();
MessageBox.Show(">" + str2 + "<");
stringVar adalah nama dari sebuah variabel string
atau sebuah ekspresi string. Metode menghasilkan sebuah string yang memuat
salinan dari stringVar dengan
semua spasi belakang dihapus.
Contoh:
//Berikut menampilkan ">Hallo<".
string str1 = "Hallo ";
string str2 = str1.TrimStart();
MessageBox.Show(">" + str2 + "<");
|
Pada Tutorial 6.2 dan 6.3, Anda menggunakan beberapa metode string yang telah didiskusikan.
Tutorial 6.2: Menciptakan Aplikasi Format
Telepon
Nomor telepon
pada kasus ini akan diformat dengan cara berikut:
(XXX)XXX-XXXX
Pada format,
X merepresentasikan sebuah dijit. Tiga dijit yang ada di dalam kurung merupakan
kode area. Tiga dijit yang mengikuti kode area adalah prefiks, dan empat dijit
setelah tanda hubung adalah nomor langganan. Berikut adalah salah satu
contohnya:
(021)346-4633
Meskipun
kurung dan tanda-hubung membuat nomor lebih mudah dibaca, karakter-karakter itu
tidak diperlukan pada pemrosesan oleh komputer. Pada sebuah sistem komputer,
nomor telepon umumnya disimpan dalam serangkaian dijit tak terformat, seperti
ditunjukkan di sini:
0213464633
Program yang
memproses nomor-nomor telepon perlu mengekstrak nomor-nomor yang dimasukkan
oleh user. Ini berarti bahwa tanda kurung dan tanda hubung harus dihilangkan
sebelum menyimpan nomor tersebut di dalam sebuah file atau memprosesnya dengan
cara tertentu. Selain itu, program semacam itu perlu memiliki kemampuan dalam
memformat sebuah nomor sehingga ia memuat kurung dan tanda hubung sebelum
menampilkannya di layar atau mencetaknya di kertas.
Pada tutorial
ini, Anda menciptakan aplikasi Format
Telepon. Form aplikasi, yang telah
disediakan bagi Anda, ditampilkan pada Gambar 6.2a. Ketika aplikasi dijalankan,
Anda akan dapat memasukkan sebuah string yang memuat 10 dijit ke dalam kontrol teksNomor dan mengklik tombol Format untuk melihat string itu
diformat sebagai sebuah nomor telepon.
Langkah 1: Awali Visual Studio (atau Visual Studio Express).
Langkah 2: Buka kode dari form Form1 pada editor kode. Ketikkan komentar dan kode untuk metode ApaNomorValid, yang ditunjukkan pada
baris 20-50 pada Program 6.2. Metode ini menerima sebuah string sebagai
argumennya dan menghasilkan true
jika string memiliki panjang 10 karakter dan hanya memuat dijit-dijit. Jika
tidak, metode akan menghasilkan false.
Anda menggunakan metode ini untuk memastikan bahwa user telah memasukkan sebuah
string dijit yang valid. Amati kode ini lebih dekat:
Baris 25: Statemen ini mendeklarasikan konstanta PANJANG_VALID,
yang diinisialisasi dengan nilai 10, untuk merepresentasikan panjang dari
sebuah string valid.
Baris 26: Statemen ini mendeklarasikan sebuah variabel bool dengan nama valid, yang diinisialisasi dengan nilai true. Variabel valid
dipakai sebagai bendera untuk mengindikasikan apakah parameter str adalah suatu nilai valid atau
tidak.
Baris 29: Statemen if
ini menentukan apakah panjang dari parameter str valid atau tidak. Jika ya, program akan berlanjut pada baris
32. Jika tidak, program akan melompat ke klausa else pada baris 42, dan baris
45 menugaskan false kepada variabel valid.
Baris 32: Loop foreach
ini menjejak setiap karakter di dalam parameter str. Jika statemen pada baris 36 menentukan bahwa sebuah karakter
bukan sebuah dijit, maka statemen pada baris 38 akan menugaskan false kepada variabel valid.
Baris 49: Statemen ini menghasilkan nilai dari variabel valid.
Langkah 3: Ketikkan komentar dan kode untuk metode FormatTelepon, yang ditampilkan pada
baris 52-64 pada Program 6.2. Metode ini menerima sebuah string sebagai
argumennya, yang dilewatkan dengan referensi, dan menyisipkan tanda kurung dan
tanda hubung pada lokasi-lokasi yang tepat sehingga ia ditampilkan dengan
bentuk (XXX)XXX-XXXX. Amati kode ini lebih dekat:
Baris 54: Perhatikan bahwa katakunci ref dipakai di dalam deklarasi dari variabel parameter str.
Baris 57: Statemen ini memanggil metode Insert untuk menyisipkan “(“ pada posisi 0. Semua karakter di dalam
string secara otomatis digeser ke kanan satu posisi untuk mengakomodasi
karakter yang disisipkan.
Baris 60: Statemen ini memanggil metode Insert untuk menyisipkan “)” pada posisi 4, yang menggeser
karakter-karakter yang sebelumnya ditampilkan mulai posisi 4 ke kanan satu
spasi.
Baris 63: Statemen ini memanggil metode Insert untuk menyisipkan “-“ pada posisi 8, yang menggeser
karakter-karakter yang sebelumnya ditampilkan mulai pada posisi 8 ke kanan satu
posisi. Setelah statemen ini dieksekusi, string yang direferensi oleh str
diformat sebagai (XXX)XXX-XXXX.
Langkah 4: Selanjutnya Anda menciptakan event-event handler Click untuk kontrol-kontrol Button. Kembali ke mode Designer dan klik ganda pada kontrol tombolFormat. Ini akan membuka editor
kode, dan Anda akan melihat sebuah event handler kosong dengan nama tombolFormat_Click. Sempurnakan event
handler ini dengan mengetikkan kode yang ditunjukkan pada baris 62-68 pada
Program 6.2. Amati kode ini lebih dekat:
Baris 69: Perhatikan bahwa ekspresi di sisi kanan dari operator =
adalah teksNomor.Text.Trim().
Ekspresi ini memanggil metode Trim
pada properti Text dari kontrol teksNomor. Metode ini menghasilkan
salinan dari properti Text dari
kontrol teksNomor dengan semua spasi
di depan dan di belakang dihapus. Hasilnya ditugaskan kepada variabel masukan.
Baris 73: Statemen if
ini memanggil metode ApaNomorValid,
yang melewatkan variabel masukan
sebagai argumen. Jika nilai dari variabel masukan
adalah suatu nomor valid, maka metode menghasilkan true dan program berlanjut ke baris 75. Pada baris 75, metode FormatTelepon dipanggil, yang
melewatkan masukan dengan referensi
sebagai argumen, dan kemudian baris 76 menampilkan nilai dari variabel masukan pada suatu kotak pesan.
Jika nilai
dari variabel masukan bukan merupakan nilai yang valid, maka metode ApaNomorValid akan menghasilkan false, dan program melompat ke klausa else pada baris 78. Kemudian, baris 81
menampilkan sebuah pesan error.
Langkah 5: Kembali ke mode Designer
dan klik ganda pada kontrol tombolKeluar.
Pada editor kode, Anda akan melihat sebuah event handler kosong dengan nama tombolKeluar_Click. Sempurnakan event
handler ini dengan mengetikkan kode yang ditampilkan pada baris 87-88 pada
Program 6.2.
Langkah 6: Simpan dan jalankan apliksi. Lakukan sejumlah pengujian
untuk melihat apakah aplikasi telah tepat.
Program 6.2 Kode utuh untuk form Form1 pada aplikasi Format
Telepon
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Format_Telepon
{
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
//Metode
ApaNomorValid menerima sebuah string dan
//menghasilkan true jika ia memuat 10 dijit, atau
//false
jika tidak.
private
bool ApaNomorValid(string str)
{
const
int PANJANG_VALID = 10; //Panjang dari sebuah string valid
bool
valid = true; //Bendera untuk validitas kevalidan
//Memeriksa panjang string
if
(str.Length == PANJANG_VALID)
{
//Memeriksa setiap karakter di dalam str
foreach (char ch in str)
{
//Jika karakter ini bukan dijit, maka
//string tidak valid
if (!char.IsDigit(ch))
{
valid = false;
}
}
}
else
{
//Panjang tidak tepat
valid = false;
}
//Menghasilkan status
return valid;
}
//Metode
FormatTelepon menerima sebuah argumen string
//dengan
referensi dan memformatnya sebagai nomor telepon
private
void FormatTelepon(ref string str)
{
//Pertama, sisipkan kurung kiri pada posisi 0
str =
str.Insert(0, "(");
//Selanjutnya, sisipkan kurung kanan pada posisi 4
str =
str.Insert(4, ")");
//Selanjutnya, sisipkan tanda-hubung pada posisi 8
str =
str.Insert(8, "-");
}
private
void tombolFormat_Click(object sender, EventArgs e)
{
//Mendapatkan salinan terpotong dari masukan user
string masukan = teksNomor.Text.Trim();
//Jika masukan adalah nomor yang tepat, ia akan
//diformat dan ditampilkan
if
(ApaNomorValid(masukan))
{
FormatTelepon(ref masukan);
MessageBox.Show(masukan);
}
else
{
//Menampilkan pesan error
MessageBox.Show("Masukan tidak valid");
}
}
private
void tombolKeluar_Click(object sender, EventArgs e)
{
//Menutup form
this.Close();
}
}
}
|
Keluaran yang
didapatkan saat aplikasi dijalankan ditampilkan pada Gambar 6.2b.
Tutorial 6.3: Menciptakan Aplikasi Hapus Format Telepon
Pada tutorial
ini, Anda menciptakan aplikasi Hapus
Format Telepon. Form aplikasi, yang telah disediakan bagi Anda, ditampilkan
pada Gambar 6.3a. Ketika aplikasi dijalankan, Anda akan memasukkan sebuah nomor
telepon dengan format (XXX)XXX-XXXX ke dalam kontrol teksNomor dan mengklik Hapus
Format untuk melihat apakah kurung
dan tanda-hubung dihapus.
Langkah 1: Awali Visual Studio (atau Visual Studio Express).
Langkah 2: Buka kode dari form Form1 pada editor kode. Ketikkan komentar dan kode untuk metode ApaFormatValid, seperti ditunjukkan
pada baris 20-44 pada Program 6.3. Metode ini menerima sebuah string sebagai
argumennya dan menghasilkan true
jika string diformat dengan (XXX)XXX-XXXX. Jika tidak, metode ini akan
menghasilkan false. Anda menggunakan
metode ini untuk memastikan bahwa user telah memasukkan sebuah nomor telepon
yang terformat dengan benar. Amati kode ini lebih dekat:
Baris 28: Statemen ini mendeklarasikan konstanta PANJANG_VALID,
yang diinisialisasi dengan nilai 13, untuk merepresentasikan panjang dari
sebuah nomor telepon yang terformat dengan benar.
Baris 29: Statemen ini mendeklarasikan sebuah variabel bool dengan nama valid, yang diinisialisasi dengan nilai true. Variabel valid dipakai sebagai bendera untuk mengindikasikan
apakah parameter str terformat
dengan benar atau tidak.
Baris 32-33: Statemen if-else
menentukan apakah parameter str
terformat dengan benar atau tidak. Interpretasi atas statemen ini seperti
berikut:
Jika panjang string adalah 13 dan karakter
pada posisi 0 adalah “(“ dan karakter pada posisi 4 adalah “)” dan karakter
pada posisi 8 adalah “-“ maka
Tetapkan valid menjadi true
Jika tidak
Tetapkan valid menjadi false
Setelah
statemen if-else dieksekusi,
variabel valid akan ditetapkan menjadi true
atau false, yang mengindikasikan
apakah str terformat dengan benar
atau tidak. Statemen pada baris 39 menghasilkan nilai dari variabel valid.
Baris 43: Statemen ini menghasilkan nilai dari variabel valid.
Langkah 3: Ketikkan komentar dan kode untuk metode HapusFormat, yang ditunjukkan pada
baris 46-65 pada Program 6.3. Metode HapusFormat
menerima sebuah string sebagai argumennya, yang dilewatkan dengan referensi.
Metode ini mengasumsikan bahwa string diformat sebagai (XXX)XXX-XXXX. Ketika
metode selesai dieksekusi, tanda kurung dan tanda hubung akan dihapus dari
string. Amati kode ini lebih dekat:
Baris 54: Statemen ini menghapus karakter pada posisi 0, yaitu
karakter “(“. Semua karakter lain secara otomatis digeser ke kiri sejauh satu
posisi untuk menempati ruang kiri dari karakter yang dihapus.
Baris 59: Statemen ini menghapus karakter pada posisi 3, yaitu
karakter “)”. Karakter-karakter yang sebelumnya ditampilkan diawali pada posisi
4 secara otomatis digeser ke kiri untuk menempati ruang yang ditinggalkan oleh karakter
yang dihapus.
Baris 64: Statemen ini menghapus karakter pada posisi 6, yaitu
tanda-hubung. Karakter-karakter yang sebelumnya ditampilkan di kanan dari
tanda-hubung secara otomatis digeser ke kiri sejauh satu posisi. Setelah
statemen ini dieksekusi, string yang direferensi oleh str akan terhapus
formatnya.
Langkah 4: Selanjutnya, Anda menciptakan event-event handler Click untuk kontrol-kontrol Button. Ganti ke mode Designer dan klik ganda pada kontrol tombolHapusFormat. Ini akan membuka
editor kode, dan Anda akan melihat sebuah event handler kosong dengan nama tombolHapusFormat_Click. Amati kode
ini:
Baris 70: Perhatikan bahwa ekspresi di sisi kanan dari operator =
adalah teksNomor.Text.Trim().
Ekspresi ini memanggil metode Trim
pada properti Text dari kontrol teksNomor. Metode ini menghasilkan
salinan dari properti Text dari
kontrol teksNomor dengan semua spasi
depan dan belakang terhapus. Hasilnya ditugaskan kepada variabel masukan.
Baris 74: Statemen if
ini memanggil metode ApaFormatValid,
yang melewatkan variabel masukan
sebagai argumen. Jika nilai dari variabel masukan
diformat secara benar, maka metode menghasilkan true, dan program berlanjut ke baris 76. Pada baris 76, metode HapusFormat dipanggil, yang melewatkan masukan dengan referensi sebagai
argumen, dan kemudian baris 77 menampilkan nilai dari variabel masukan pada suatu kotak pesan.
Jika nilai
dari variabel masukan tidak diformat dengan benar, maka metode ApaFormatValid akan menghasilkan false, dan program melompat ke klausa else pada baris 79. Kemudian, baris 82
menampilkan pesan error.
Langkah 5: Ganti ke mode Designer
dan klik ganda pada kontrol tombolKeluar.
Pada editor kode, Anda akan melihat sebuah event handler kosong dengan nama tombolKeluar_Click. Sempurnakan event handler
ini dengan mengetikkan kode yang ditunjukkan pada baris 88-89 pada Program 6.3.
Langkah 6: Simpan projek dan jalankan aplikasi. Uji aplikasi
dengan beberapa data.
Program 6.3 Kode utuh untuk form Form1 pada aplikasi Hapus
Format Telepon
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Hapus_Format_Telepon
{
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
//Metode
ApaFormatValid menerima sebuah argumen string
//dan
menentukan apakah ia terformat dengan benar sebagai
//sebuah nomor telepon dengan cara ini:
//
(XXX)XXX-XXXX
//Jika
argumen diformat dengan benar, maka metode ini
//menghasilkan true, jika tidak menghasilkan false
private
bool ApaFormatValid(string str)
{
const int PANJANG_VALID = 13; //Panjang dari sebuah string valid
bool
valid; //Bendera untuk
mengindikasikan validitas
//Menentukan apakah str terformat dengan benar
if
(str.Length == PANJANG_VALID && str[0] == '(' &&
str[4] == ')' && str[8] == '-')
{
valid = true;
}
else
{
valid = false;
}
//Menghasilkan nilai dari valid
return valid;
}
//Metode
HapusFormat menerima sebuah string, dengan referensi
//jika
diasumsiak ia memuat sebuah nomor telon yang terformat
//dengan
cara ini: (XXX)XXX-XXXX.
//Metode
ini akan menghapus format dengan menghapus
//tanda
kurung dan tanda hubung
private
void HapusFormat(ref string str)
{
//Pertama, hapus kurung kiri pada posisi 0
str =
str.Remove(0, 1);
//Selanjutnya, hapsu kurung kanan. Karena penghapusan
//sebelumnya, ia sekarang berada pada
//posisi 3
str =
str.Remove(3, 1);
//Selanjutnya, hapus tanda-hubung. Karena penghapusan
//sebelumnya, ia sekarang berada pada
//posisi 6
str =
str.Remove(6, 1);
}
private
void tombolHapusFormat_Click(object sender, EventArgs e)
{
//Membaca salinan terpotong dari masukan user
string masukan = teksNomor.Text.Trim();
//Jika masukan terformat dengan benar, maka hapus formatnya
//dan
tampilkan
if
(ApaFormatValid(masukan))
{
HapusFormat(ref masukan);
MessageBox.Show(masukan);
}
else
{
//Menampilkan pesan error
MessageBox.Show("Masukan tidak valid");
}
}
private
void tombolKeluar_Click(object sender, EventArgs e)
{
//Menutup form
this.Close();
}
}
}
|
Keluaran saat aplikasi dijalankan ditunjukkan pada Gambar 6.3b.
Mentokenkan String
Kadangkala sebuah string memuat serangkaian
kata atau item-item data lain yang dipisahkan dengan spasi atau karakter lain.
Sebagai contoh, lihat pada string berikut:
"satu dua tiga empat"
String ini memuat empat item data: satu, dua,
tiga, dan empat. Dalam pemrograman, item-item seperti ini dikenal dengan token. Perhatikan bahwa spasi diberikan
antar item. Karakter yang memisahkan token dikenal dengan delimiter. Berikut adalah salah satu contohnya:
"17;92;81;12;46;5"
String ini memuat token-token berikut: 17,
92, 81, 12, 46, dan 5. Perhatikan bahwa titik-koma ditampilkan antara tiap
item. Pada contoh ini, titik-koma dipakai sebagai delimiter. Sejumlah
permasalahan pemrograman mengharuskan Anda untuk membaca sebuah string yang
memuat sejumlah item dan kemudian mengekstrak semua token dari string untuk
diproses. Sebagai contoh, lihat pada string yang memuat suatu tanggal berikut:
"3-22-2016"
Token-token di dalam string adalah 3, 22, dan
2016, dan delimiter adalah karakter tanda-hubung. Suatu program bisa saja perlu
mengekstrak bulan, hari, dan tahun dari string semacam itu.
Proses pemecahan suatu string menjadi
token-token dikenal dengan penokenan.
Dalam C#, objek-objek string memiliki suatu metode dengan nama Split yang dapat dipakai untuk
mentokenkan string. Ketika Anda memanggil metode Split dari sebuah objek string, metode itu mengekstrak token-token
dari string dan menghasilkan (menjadikannya nilai balik) sebagai suatu array
string. Setiap elemen di dalam array adalah salah satu token.
Anda akan mempelajari dua cara dalam
memanggil metode Split. Cara pertama
adalah dengan melewatkan nilai null
sebagai argumen. Ketika Anda melewatkan null
sebagai argumen kepada metode Split,
metode ini mentokenkan string menggunakan karakter spasi putih sebagai
delimiter. (Spasi putih mencakup spasi, tab, linfeed, carriage-return,
formfeed, vertical-tab, dan garis-baru). Metode ini menghasilkan sebuah string,
dengan tiap elemen array memuat salah satu token. Kode berikut menunjukkan
salah satu contohnya:
1
2
3
4
5
6
7
8
9
10
11
|
//Menciptakan sebuah string
untuk ditokenkan
string str = "satu dua tiga
empat”;
//Mengekstrak token-token dari
string
string[] token =
str.Split(null);
//Menampilkan tiap token
foreach (string s in token)
{
MessageBox.Show(s);
}
|
Amati kode ini lebih dekat:
·
Baris 2 mendeklarasikan sebuah variabel string dengan nama str, yang diinisialisasi dengan string
“satu dua tiga empat”.
·
Baris 5 mendeklarasikan sebuah array string dengan nama token. Array token diinisialisasi dengan array yang dihasilkan dari pemanggilan
metode str.Split(null). Setelah
statemen ini dieksekusi, array token
akan memiliki empat elemen, yang memuat string “satu”, “dua”, “tiga”, dan
“empat”.
· Loop foreach pada baris 8-11
menampilkan tiap elemen array token
pada kotak-kotak teks. Ketika loop dieksekusi, empat kotak pesan akan
ditampilkan, satu demi satu, yang menampilkan string “satu”, “dua”, “tiga”, dan
“empat”.
Cara kedua dalam memanggil metode Split adalah dengan melewatkan suatu
array char sebagai argumen. Setiap
elemen dari array char dipakai
sebagai delimiter. Kode berikut menunjukkan salah satu contohnya:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//Menciptakan sebuah string
untuk ditokenkan
string str = "satu;dua;tiga;empat";
//Menciptakan sebuah array
delimiter
char[] delim = { ';' };
//Mengekstrak token-token dari
string
string[] token =
str.Split(delim);
//Menampilkan tiap token
foreach (string s in token)
{
MessageBox.Show(s);
}
|
Amati kode lebih dekat:
·
Baris 2 mendeklarasikan sebuah variabel string dengan nama str, yang
diinisialisasi dengan string “satu;dua;tiga;empat”.
· Baris 5 mendeklarasikan sebuah array char dengan nama delim.
Perhatikan bahwa daftar inisialisasi hanya memuat satu karakter. Array delim memiliki satu elemen, yang memuat
karakter ‘;’.
· Baris 8 mendeklarasikan sebuah array string dengan nama token. Array token diinisialisasi dengan array yang dihasilkan dari pemanggilan
metode str.Split(delim). Setelah
statemen ini dieksekusi, array token
akan memiliki empat elemen, yang memuat string “satu”, “dua”, tiga”, dan
“empat”.
· Loop foreach pada baris 11-14 menampilkan
tiap elemen array token pada
kotak-kotak pesan. Ketika loop ini dieksekusi, empat kotak pesan akan
ditampilkan, satu demi satu, yang menunjukkan string “satu”, “dua”, “tiga”, dan
“empat”.
Pada beberapa situasi, Anda diharuskan
menggunakan beberapa karakter sebagai delimiter pada string yang sama. Sebagai
contoh, lihat pada alamat e-mail berikut:
kristof@gmail.com
String ini menggunakan dua delimiter: @
(simbol at) dan . (titik). Untuk mengekstrak token-token dari string ini, Anda
perlu menetapkan kedua karakter tersebut sebagai delimiter. Berikut adalah salah
satu contohnya:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//Menciptakan sebuah string
untuk ditokenkan
string str =
"joe@gaddisbooks.com";
//Menciptakan sebuah array
delimiter
char[] delim = { '@', '.' };
//Mengekstrak token-token dari
string
string[] token =
str.Split(delim);
//Menampilkan setiap token
foreach (string s in token)
{
MessageBox.Show(s);
}
|
Amati kode lebih dekat:
·
Baris 2 mendeklarasikan sebuah variabel string dengan nama str,
yang diinisialisasi dengan string “kristof@gmail.com”.
· Mendeklarasikan sebuah array string
dengan nama token. Array token diinisialisasi dengan array yang
dihasilkan dari pemanggilan metode str.Split(delim).
Setelah statemen ini dieksekusi, array token akan memiliki tiga elemen, yang
memuat string “kristof”, “gmail”, dan “com”.
· Loop foreach pada baris 11-14 menampilkan
tiap elemen array token pada
kotak-kotak pesan. Ketika loop ini dieksekusi, tiga kotak pesan akan ditampilkan, satu demi
satu, yang menunjukkan string “kristof”, “gmail”, dan “com”.
Memotong atau
Merapikan String sebelum Penokenan
Ketika Anda menokenkan suatu string yang
dimasukkan oleh user dan Anda sedang menggunakan karakter selain spasi putih
sebagai delimiter, Anda mungkin ingin merapikan string sebelum menokenkannya.
Jika tidak, user bisa saja memasukkan beberapa karakter spasi-putih di depan
dan beberapa karakter spasi-putih di bagian belakang. Sebagai contoh, lihat
pada kode berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//Menciptakan sebuah string
dengan spasi-putih di depan dan di belakang
String str = " satu;dua;tiga
";
//Menciptakan sebuah array char
yang memuat titik-koma
char[] delim = { ';' };
//Mengekstrak token-token dari
string
string[] token =
str.Split(delim);
//Menampilkan tiap token
foreach (string s in token)
{
MessageBox.Show("*" + s +
"*");
}
|
Kode ini akan menghasilkan tiga kotak pesan
yang menampilkan keluaran berikut:
*
satu*
*dua*
*tiga
*
Perhatikan bahwa token pertama memuat spasi
putih di depan dan token terakhir memuat spasi putih di belakang. Untuk
mencegahnya, Anda bisa menggunakan metode Trim
untuk menghapusnya. Berikut adalah contohnya, yang menggunakan metode Trim:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//Menciptakan sebuah string
dengan spasi-putih di depan dan di belakang
String str = " satu;dua;tiga
";
//Menciptakan sebuah array char
yang memuat titik-koma
char[] delim = { ';' };
//Merapikan string
str = str.Trim();
//Mengekstrak token-token dari
string
string[] token =
str.Split(delim);
//Menampilkan tiap token
foreach (string s in token)
{
MessageBox.Show("*" + s +
"*");
}
|
Kode ini akan menghasilkan tiga kotak pesan
yang menampilkan keluaran berikut:
*satu*
*dua*
*tiga*
Pada Tutorial 6.4, Anda akan menciptakan
sebuah aplikasi yang membaca dan menokennya data dari suatu file yang diekspor
dari Microsoft Excel.
Tutorial 6.4: Menyelesaikan Aplikasi Pembaca CSV
Seorang
profesor menyimpan skor ujian dari tiap mahasiswanya di dalam sebuah
spreadsheet Microsoft Excel. Gambar 6.4 menunjukkan skor-skor ujian dari lima
mahasiswa. Setiap kolom memuat sebuah skor ujian, dan tiap baris
merepresentasikan skor-skor ujian untuk satu mahasiswa.
Dimisalkan
bahwa profesor meminta Anda menuliskan suatu aplikasi C# yang membaca skor-skor
ujian dari spreadsheet Excel dan melakukan beberapa operasi terhadap data itu.
Excel, seperti aplikasi lain, memiliki kemampuan untuk mengekspor data ke
sebuah file teks. Ketika data di dalam spreadsheet diekspor, setiap baris
dituliskan pada suatu baris, dan nilai dari tiap sel akan dipisahkan dengan
koma. Sebagai contoh, ketika data yang ditunjukkan pada Gamabr 6.4 diekspor, ia
akan dituliskan pada sebuah file teks dengan format berikut:
87,79,91,82,94
72,79,81,74,88
94,92,81,89,96
77,56,67,81,79
79,82,85,81,90
Ini dinamakan
dengan format file comma separated value
atau csv. Ketika Anda menyimpan
sebuah spreadsheet dengan format ini, Excel akan menyimpannya menjadi sebuah
file dengan ekstensi .csv. Pada suatu aplikasi C#, Anda dapat membaca sebuah
baris dari file ke dalam suatu variabel string dan kemudian menggunakan metode Split untuk mengekstrak nilai-nilai
sebagai token-token.
Untuk
mempelajari bagaimana ini dilakukan, Anda akan menciptakan aplikasi Pembaca
CSV. Form aplikasi, yang telah disediakan bagi Anda, ditampilkan pada Gambar 6.5.
Sebuah file dengan nama Skor.csv, yang memuat skor-skor ujian yang ditampilkan
pada Gambar 6.5, juga telah diciptakan bagi Anda. Ketika Anda menjalankan
aplikasi dan mengklik tombol Baca Skor, ia akan membaca skor-skor ujian
dari file Skor.csv. Skor rerata ujian dari setiap mahasiswa akan dihitung dan
ditampilkan pada kontrol kotakListRerata.
Langkah 1: Awali Visual Studio (atau Visual Studio Express).
Langkah 2: Buka kode dari form Form1 pada editor kode. Ketikkan direktif using System.IO; yang ditampilkan pada baris
10 pada Program 6.4. Direktif ini diperlukan karena Anda akan menciptakan
sebuah objek StreamReader untuk
membaca masukan dari sebuah file.
Langkah 3: Selanjutnya Anda menciptakan event-event handler Click untuk kontrol-kontrol Button. Kembali ke mode Designer dan klik ganda pada kontrol tombolBaca. Ini akan membuka editor
kode, dan Anda akan melihat sebuah event handler kosong dengan nama tombolBaca_Click. Sempurnakan event
handler dengan mengetikkan kode yang ditunjukkan pada baris 23-74 pada Program 6.4.
Amati kode ini lebih dekat:
Baris 23: Ini adalah awal dari statemen try-catch. Blok try
ditampilkan pada baris 25-68, dan blok catch
ditampilkan pada baris 72-73. Jika sebuah eksepsi dilemparkan oleh sembarang
statemen di dalam blok try, program
akan melompat ke blok catch, dan
baris 73 akan menampilkan pesan error.
Baris 25-29: Statemen-statemen ini mendeklarasikan variabel-variabel
berikut:
·
fileMasukan: sebuah variabel
StreamReader yang akan dipakai untuk membaca file masukan.
·
baris: sebuah variabel string untuk menampung
sebuah baris yang dibaca dari file.
· hitung: sebuah variabel int yang akan dipakai untuk menghitung jumlah mahasiswa ketika loop
beriterasi (Perhatikan bahwa variabel hitung diinisialisasi dengan nilai 0).
·
total: sebuah variabel int yang akan dipakai untuk memuat
total skor ujian dari seorang mahasiswa.
·
rerata: sebuah variabel double yang akan memuat rerata skor
dari seorang mahasiswa.
Baris 32: Statemen ini menciptakan sebuah array char dengan nama delim. Array ini
memiliki satu elemen yang memuat karakter ‘,’.
Baris 35: Statemen ini membuka file Skor.csv. Setelah statemen
ini dieksekusi, variabel fileMasukan mereferensi sebuah objek StreamReader yang berkaitan dengan file
itu.
Baris 37: Ini adalah awal dari sebuah loop while yang membaca isi
dari file Skor.csv.
Baris 40: Statemen ini menginkremen variabel hitung, yang menghitung banyak mahasiswa. Statemen ini akan
menyebabkan hitung ditetapkan 1
selama iterasi pertama loop, 2 selama iterasi kedua loop, dan seterusnya.
Baris 43: Statemen ini membaca sebuah baris dari file Skor.csv
dan menugaskannya kepada variabel baris.
Baris 46: Statemen ini menokenkan variabel baris, menggunakan karakter ‘,’ sebagai sebuah delimiter. Setelah
statemen ini dieksekusi, token-token disimpan di dalam elemen-elemen array token. (Skor ujian pertama di dalam token[0], skor ujian kedua disimpan di
dalam token[2], dan seterusnya).
Baris 49: Statemen ini menetapkan variabel total menjadi 0. Ini diperlukan karena total akan dipakai sebagai akumulator dalam menghitung total dari
semua skor ujian yang ada di dalam array token.
Baris 53-56: Loop foreach
ini menjejak elemen-elemen array token.
Pada baris 55, setiap elemen dikonversi menjadi sebuah int dan kemudian ditambahkan pada variabel total. Setelah loop selesai dieksekusi, variabel total akan memuat total dari semua skor
ujian yang ada di dalam array token.
Baris 60: Statemen ini menghitung rerata dari skor-skor ujian dan
menugaskan hasilnya kepada variabel rerata.
Perhatikan bahwa operator cast (double)
dipakai untuk mencegah pembagian integer.
Baris 63-64: Statemen ini menampilkan rerata, berikut dengan nomor
mahasiswa, pada kontrol kotakListRerata.
Baris 68: Statemen ini menutup file Skor.csv.
Langkah 4: Kembali ke mode Designer
dan klik ganda pada kontrol tombolKeluar.
Pada editor kode, Anda akan melihat sebuah event handler kosong dengan nama tombolKeluar_Click. Sempurnakan event
handler ini dengan mengetikkan kode yang ditunjukkan pada baris 79-80 pada
Program 6.4.
Langkah 5: Simpan projek dan jalankan aplikasi. Ketika aplikasi
dijalankan, klik pada tombol Baca Skor. Rerata mahasiswa akan ditampilkan
seperti ditunjukkan pada Gambar 6.6.
Program 6.4 Kode utuh untuk form Form1 pada aplikasi Pembaca
CSV
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace Pembaca_CSV
{
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
private
void tombolBaca_Click(object sender, EventArgs e)
{
try
{
StreamReader fileMasukan; //Untuk
membaca file
string baris;
//Untuk memuat sebuah baris dari file
int hitung = 0;
//Pencacah mahasiswa
int total;
//Akumulator
double rerata;
//Rerata skor ujian
//Menciptakan array delimiter
char[] delim = { ',' };
//Membuka file CSV
fileMasukan = File.OpenText("Skor.csv");
while (!fileMasukan.EndOfStream)
{
//Menginkremen pencacah mahasiswa
hitung++;
//Membaca satu baris dari file
baris = fileMasukan.ReadLine();
//Membaca skor-skor ujian sebagai
token-token
string[] token = baris.Split(delim);
//Menetapkan akumulator menjadi 0
total = 0;
//Menghitung total dari
//token-token skor ujian
foreach (string str in token)
{
total += int.Parse(str);
}
//Menghitung rerata dari
//skor-skor ujian
rerata = (double)total / token.Length;
//Menampilkan rerata
kotakListRerata.Items.Add("Rerata untuk mahasiswa " +
hitung + " adalah " + rerata.ToString("n1"));
}
//Menutup file
fileMasukan.Close();
}
catch
(Exception ex)
{
//Menampilkan pesan error
MessageBox.Show(ex.Message);
}
}
private
void tombolKeluar_Click(object sender, EventArgs e)
{
//Menutup form
this.Close();
}
}
}
|
6.3 Struktur
KONSEP: C#
dapat dipakai untuk mengelompokkan beberapa variabel menjadi satu item yang
dikenal dengan struktur.
Sejauh ini, Anda telah menciptakan
aplikasi-aplikasi yang menyimpan data ke dalam variabel-variabel individual.
Kadangkala, ada relasi antara item-item data yang berbeda. Sebagai contoh,
sebuah sistem inventori dealer mobil bekas bisa jadi menggunakan
variabel-variabel seperti ditunjukkan pada statemen-statemen deklarasi berikut:
string buatan; //Pembuat mobil
int tahun; //Tahun
pembuatan mobil
double jarakKm; //Jarak Km yang telah ditempuh
Semua variabel ini berelasi karena ketiganya
memuat data yang berkaitan dengan mobil yang sama. Statemen-statemen deklarasi
tersebut tidak menjelaskan bahwa ketiganya merupakan data yang saling
berkaitan. Untuk menciptakan relasi antara variabel-variabel, C# mempunyai
kapabilitas untuk mengelompokkannya menjadi satu item, yang dikenal dengan struktur. Struktur adalah sebuah tipe
data yang dapat Anda ciptakan yang memuat satu atau lebih variabel yang dikenal
dengan bidang-bidang. Bidang-bidang tersebut dapat berbeda tipe data.
Sebelum sebuah struktur dapat digunakan, ia
harus dideklarasikan. Berikut adalah bentuk umum yang dapat Anda gunakan untuk
mendeklarasikan sebuah struktur:
struct
NamaStruktur
{
Deklarasi-deklarasi bidang
}
Baris pertama dari deklarasi struktur diawali
dengan katakunci struct, yang
diikuti dengan nama struktur. Sepasang kurung kurawal mengapit satu atau lebih
deklarasi bidang. Berikut adalah sebuah contoh deklarasi struktur:
1
2
3
4
5
6
|
struct Otomobil
{
public string buatan;
public int tahun;
public double jarakKm;
}
|
Nama struktur adalah Otomobil. Pada buku ini,
Anda selalu mengawali nama struktur dengan huruf besar. Ini tidak diharuskan,
tetapi banyak programer mengikuti konvensi ini karena ia membantu membedakan
nama struktur dari nama variabel biasa.
Baris 3, 4, dan 5 mendeklarasikan tiga
bidang. Baris 3 mendeklarasikan sebuah bidang string dengan nama buatan,
baris 4 mendeklarasikan sebuah bidang int
dengan nama tahun, dan baris 5 mendeklarasikan sebuah bidang double dengan nama jarakKm. Perhatikan bahwa setiap deklarasi diawali dengan katakunci
public. Katakunci public merupakan sebuah pemodifikasi
akses yang menetapkan bidang yang dapat diakses secara langsung oleh
statemen-statemen dari luar struktur.
Pada buku ini, Anda akan selalu
mendeklarasikan struktur di dalam namespace dari suatu aplikasi tetapi tidak di
dalam dari sebuah kelas. Gambar 6.7 menunjukkan di mana, di dalam sebuah kode
form, Anda menuliskan deklarasi-deklarasi struktur. Pada gambar, Anda
menuliskan deklarasi dari struktor Otomobil
di dalam namespace aplikasi tetapi tidak di dalam kelas Form1.
Ingat bahwa sebuah deklarasi struktur tidak menciptakan apapun di dalam memori. Ia hanya memberitahu kompiler C# apa yang ada di dalam struktur. Sebelum Anda dapat menggunakan struktur untuk menyimpan data, Anda perlu menciptakan sebuah objek struktur di dalam memori.
Pada awal Bab 7, Anda telah mempelajari tipe
nilai dan tipe referensi. Struktur adalah tipe nilai, jadi penciptaan objek
dari sebuah struktur sama dengan pendeklarasian sebuah variabel. Sebagai
contoh, dimisalkan bahwa Anda ingin menciptakan sebuah objek dari struktur Otomobil dan Anda ingin menamai objek
itu menjadi mobilSport. Anda akan
menuliskannya dengan:
Otomobil
mobilSport;
Setelah statemen ini dieksekusi, sebuah objek
dari struktur Otomobil akan
ditempatkan di dalam memori. Nama objek itu adalah mobilSport. Seperti diilustrasikan pada Gambar 6.8, objek mobilSport memiliki tiga bidang: buatan, tahun, dan jarakKm.
Anda dapat menciptakan sejumlah objek dari
sebuah struktur dengan satu statemen deklarasi, seperti ditunjukkan di sini:
Otomobil
mobilSport, trukPickup;
Statemen ini menciptakan dua objek dari
struktur Otomobil. Objek-objek itu
dinamai dengan mobilSport dan trukPickup. Seperti diilustrasikan pada
Gambar 6.9, setiap objek memiliki sendiri bidang buatan, tahun, dan jarakKm.
Menggunakan Operator new untuk
Menciptakan Objek Struktur
Ketika Anda menciptakan sebuah objek struktur
dengan sebuah statemen deklarasi sederhana, seperti sebelumnya ditunjukkan,
bidang-bidang objek tidak diinisialisasi, dan jika Anda mencoba menggunakannya
sebelum menugaskannya nilai, error kompilasi akan terjadi. Cara alternatifnya
adalah dengan menggunakan operator new
untuk menciptakan sebuah objek struktur, seperti ditunjukkan di sini:
Otomobil
mobilSport = new Otomobil();
Ini merupakan teknik yang direkomendasikan
untuk menciptakan objek struktur karena operator new tidak hanya menciptakan objek di dalam memori, tetapi ia juga
menginisialisasi bidang-bidang objek dengan nilai default 0. (Jika struktur
memuat bidang yang merupakan variabel referensi, ia akan diinisialisasi dengan
nilai null). Berikut adalah sebuah
contoh dalam menciptakan dua objek dari struktur Otomobil menggunakan operator new:
Otomobil mobilSport = new Otomobil();
Automobile trukPickup = new Otomobil();
Mengakses
Bidang-Bidang Di Dalam Sebuah Struktur
Setelah Anda menciptakan objek dari sebuah
struktur, Anda dapat mengakses bidang-bidangnya menggunakan operator dot
(sebuah titik). Sebagai contoh, dimisalkan bahwa suatu aplikasi memuat
deklarasi struktur Otomobil yang
sebelumnya telah ditunjukkan dan kode berikut ada di dalam suatu metode:
1
2
3
4
|
Otomobil mobilSport = new Otomobil();
mobilSport.buatan = "Ford
Mustang";
mobilSport.tahun = 1965;
mobilSport.jarakKm = 67500.0;
|
Baris 1 menciptakan sebuah objek dari
struktur Otomobil di dalam memori.
Nama objek adalah mobilSport. Baris
2 menugaskan string “Ford Mustang” kepada bidang buatan dari objek mobilSport.
Baris 3 menugaskan nilai 1965 kepada bidang tahun dari objek mobilSport.
Baris 4 menugaskan nilai 67500.0 kepada bidang jarakKm dari objek mobilSport.
Kode berikut menunjukkan contoh lain
menggunakan objek mobilSport yang sama. Statemen-statemen ini menampilkan nilai
dari tiap bidang objek pada kotak pesan:
1
2
3
|
MessageBox.Show(mobilSport.buatan);
MessageBox.Show(mobilSport.tahun.ToString());
MessageBox.Show(mobilSport.jarakKm.ToString());
|
Berikut adalah contoh lain. Statemen ini
menampilkan sebuah pesan seperti “1965 Ford Mustang dengan jarak tempuh 67500
km.”
MessageBox.Show(mobilSport.tahun +
" " + mobilSport.buatan +
" dengan jarak tempuh " + mobilSport.jarakKm + " km.");
Menugaskan Satu Objek Struktur Ke
Objek Struktur Lain
Anda dapat menggunakan operator penugasan (=)
untuk menugaskan satu objek struktur kepada objek struktur lain. Sebagai
contoh, diasumsikan bahwa mobil1 dan
mobil2 keduanya adalah objek dari
struktor Otomobil. Statemen beriktu
menugaskan mobil1 kepada mobil2:
mobil2
= mobil1;
Setelah statemen ini dieksekusi,
bidang-bidang dari objek mobil2
memuat nilai-nilai sama dengan bidang-bidang dari objek mobil1.
Melewatkan Objek Struktur Kepada
Metode
Sama seperti tipe objek lain, Anda dapat
melewatkan sebuah objek struktur sebagai argumen kepada suatu metode. Kode
berikut menunjukkan sebuah metode dengan nama TampilOto yang dituliskan untuk menerima sebuah objek dari struktur
Otomobil sebagai argumen:
1
2
3
4
5
|
private void TampilOto(Otomobil
oto)
{
MessageBox.Show(oto.tahun + " "
+ oto.buatan +
" dengan jarak tempuh " + oto.jarakKm
+ " km.");
}
|
Perhatikan pada bab 1 bahwa metode memiliki
sebuah variabel parameter dengan nama oto,
dan tipe datanya adalah Otomobil.
Ketika Anda memanggil metode ini, Anda melewatkan sebuah objek Otomobil sebagai argumen, seperti
ditunjukkan pada kode berikut:
1
2
3
4
5
6
7
8
9
10
|
//Menciptakan sebuah objek dari
struktur Otomobil
Otomobil mobilSport = new Otomobil();
//Menugaskan nilai-nilai kepada
bidang-bidang objek
mobilSport.buatan = "Chevy
Corvette";
mobilSport.tahun = 1970;
mobilSport.jarakKm = 50000.0;
//Menampilkan bidang-bidang dari
objek
TampilOto(mobilSport);
|
Pada baris 10, objek mobilSport dilewatkan sebagai sebuah argumen kepada metode TampilOto. Di dalam metode TampilOto, parameter oto memuat salinan dari objek mobilSport.
Objek struktur dapat dilewatkan dengan nilai
atau dengan referensi. Umumnya, objek struktur dilewatkan dengan nilai.
Variabel parameter memuat salinan dari argumen, dan setiap perubahan yang
dilakukan terhadap parameter tidak memengaruhi argumen asli. Jika metode
penerima perlu mengubah isi dari argumen asli, katakunci ref atau out dapat
dipakai pada deklarasi parameter. Kode berikut menunjukkan sebuah parameter
yang menggunakan parameter referensi dengan tipe Otomobil. Asumsikan bahwa form aplikasi memuat kontrol-kontrol TextBox dengan nama teksBuata, teksTahun, dan teksJarakKm.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
private void BacaData(ref Otomobil
oto)
{
try
{
//Membaca data dari kontrol-kontrol TextBox
oto.buatan = teksBuatan.Text;
oto.tahun = int.Parse(teksTahun.Text);
oto.jarakKm = double.Parse(teksJarakKm.Text);
}
catch (Exception ex)
{
//Menampilkan pesan eksepsi
MessageBox.Show(ex.Message);
}
}
|
Perhatikan bahwa parameter oto dideklarasikan dengan katakunci ref. Statemen-statemen pada baris 6-8
membaca data dari kontrol-kontrol TextBox
dan menugaskan data itu kepada bidang-bidang dari parameter oto. Karena oto adalah sebuah parameter ref,
nilai-nilai sebenarnya ditugaskan kepada objek yang dilewatkan sebagai argumen
kepada metode.
Ketika Anda memanggil metode ini, Anda
melewatkan sebuah objek Otomobil
dengan referensi, seperti ditunjukkan di sini:
1
2
3
4
5
|
//Menciptakan sebuah objek dari
struktur Otomobil
Otomobil mobil = new Otomobil();
//Membaca data untuk objek
BacaData(ref mobil);
|
Setelah metode dieksekusi, objek mobil akan memuat data yang dimasukkan
ke dalam kontrol-kontrol TextBox.
Membandingkan Objek-Objek Struktur
Anda tidak bisa menggunakan operasi-operasi
perbandingan secara langsung pada objek-objek struktur. Sebagai contoh,
diasumsikan bahwa mobilSport dan mobilBalap adalah dua objek dari
struktur Otomobil. Statemen berikut
akan menyebabkan error:
if (mobilSport == mobilBalap) //
Error!
Untuk membandingkan dua objek struktur, Anda
perlu membandingkan bidang demi bidang, seperti ditunjukkan pada kode berikut:
if (mobilSport.buatan == mobilBalap.buatan
&&
mobilSport.tahun == mobilBalap.tahun &&
mobilSport.jarakKm == mobilBalap.jarakKm)
{
MessageBox.Show("Kedua objek sama.");
}
Array yang Memuat Objek-Objek Struktur
Objek-objek struktur dapat disimpan di dalam
suatu array. Sebagai contoh, diasumsikan bahwa struktur Otomobil yang sebelumnya ditunjukkan ada di dalam suatu aplikasi.
Kode berikut menciptakan sebuah array yang memuat lima objek Otomobil:
const int UKURAN = 5;
Otomobil[] mobil = new Otomobil[UKURAN];
Ketika Anda menciptakan sebuah array
struktor, setiap elemen array adalah sebuah objek struktur dan bidang-bidang
dari tiap objek diinisialisasi dengan 0. (Jika ada bidang yang merupakan
variabel referensi, ia akan diinisialisasi dengan nilai null).
Setiap elemen dari array struktur dapat
diakses melalui indeks. Sebagai contoh,
mobil[0] adalah objek pertama di dalam array, mobil[1] adalah objek kedua, dan seterusnya. Untuk mengakses sebuah
bidang dari sembarang elemen, Anda hanya perlu menggunakan operator dot dan
nama bidang setelah indeks. Sebagai contoh, ekspresi berikut mengakses anggota jarakKm dari mobil[2]:
mobil[2].jarakKm
Loop for
berikut menjejak array mobil, yang
menampilkan data yang disimpan pada tiap elemennya:
for (int indeks = 0; indeks < mobil.Length; indeks++)
{
MessageBox.Show(mobil[indeks].tahun
+ " " +
mobil[indeks].buatan
+ " dengan jarak tempuh " +
mobil[indeks].jarakKm
+ " km.");
}
Anda dapat menggunakan loop foreach untuk beriterasi pada semua
elemen di dalam sebuah array struktur seperti ditunjukkan pada kode berikut:
foreach (Otomobil aMobil in mobil)
{
MessageBox.Show(mobil[indeks].tahun
+ " " +
mobil[indeks].buatan
+ " dengan jarak tempuh " +
mobil[indeks].jarakKm
+ " km.");
}
Menyimpan Objek-Objek Struktur di dalam Sebuah List
Pada Bab 7, Anda telah mempelajari kelas List, yang merupakan sebuah kontainer
untuk menyimpan sekumpulan objek-objek. Berikut adalah sebuah contoh bagaimana
Anda menciptakan sebuah List yang
menampung objek-objek Otomobil:
List<Otomobil>
mobilList = new List<Otomobil>();
Statemen ini menciptakan sebuah objek List, yang direferensi ole variabel mobilList. Perhatikan bahwa kata Otomobil dituliskan di dalam kurung
siku, <>, yang ada setelah kata List.
Ini menetapkan bahwa List hanya
dapat memuat objek-objek dengan tipe data Otomobil.
Untuk menambahkan sebuah objek struktur ke
dalam sebuah List, Anda dapat
menggunakan metode Add. Kode berikut
menunjukkan salah satu contohnya:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//Menciptakan sebuah List untuk
menampung objek-objek Otomobil
List<Otomobil> mobilList =
new List<Otomobil>();
//Menciptakan sebuah objek dari
struktur Otomobil
Otomobil mobilSport = new Otomobil
();
//Menugaskan nilai-nilai kepada
bidang-bidang objek
mobilSport.buatan = "Chevy
Corvette";
mobilSport.tahun = 1970;
mobilSport.jarakKm = 50000.0;
//Menambahkan objek pada List
mobilList.Add(mobilSport);
|
Statemen pada baris 2 menciptakan sebuah List dengan nama mobilList yang dapat menampung objek-objek Otomobil. Baris 5 menciptakan sebuah objek dari struktur Otomobil dengan nama mobilSport, dan baris 8-10 menugaskan
nilai-nilai kepada bidang-bidang dari objek. Baris 13 menambahkan objek ke
dalam List.
Ingat bahwa objek-objek struktur adalah
objek-objek bertipe nilai, dan ketika Anda menambahkan sebuah objek tipe nilai
ke dalam sebuah List, List itu akan memuat salinan dari objek
itu. Sebagai contoh, lihat pada kode berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//Menciptakan sebuah List untuk
menampung objek-objek Otomobil
List<Otomobil> mobilList =
new List<Otomobil>();
//Menciptakan sebuah objek dari
struktur Otomobil
Otomobil mobilSport = new Otomobil();
//Menugaskan nilai kepada tiap
bidang dari objek
mobilSport.buatan = "Chevy
Corvette";
mobilSport.tahun = 1970;
mobilSport.jarakKm = 50000.0;
//Menambahkan objek ke dalam
List
mobilList.Add(mobilSport);
//Menugaskan nilai bari pada
tiap bidang dari objek
mobilSport.buatan = "Ford
Mustang";
mobilSport.tahun = 1965;
mobilSport.jarakKm = 67500.0;
//Menambahkan objek ke dalam
List
mobilList.Add(mobilSport);
|
Statemen pada baris 2 menciptakan sebuah List dengan nama mobilList yang dapat menampung objek-objek Otomobil. Baris 5-10 menciptakan sebuah objek Otomobil dengan nama mobilSport
dan menugaskan nilai-nilai kepada bidang-bidang dari objek. Baris 13
menambahkan objek mobilSport pada List. Ketika baris 13 dieksekusi,
sebuah salinan dari objek mobilSport
dibuat dan disimpan di dalam List.
(Ini terjadi karena objek mobilSport
adalah sebuah objek tipe nilai). Pada titik ini, dua objek dari struktur Otomobil telah ada: objek mobilSport dan salinan dari objek mobilSport yang ada di dalam List.
Baris 16-18 menugaskan nilai-nilai baru
kepada bidang-bidang dari objek mobilSport,
dan kemudian baris 21 menambahkan objek mobilSport
pada List lagi. Sekali lagi, sebuah
salinan dari objek mobilSport dibuat
dan ditambahkan pada List. Pada
titik ini, tiga objek dari struktur Otomobil
telah ada: objek mobilSport dan dua
objek yang ada di dalam List.
Lihat pada program yang mendemonstrasikan
objek-objek struktur yang ditambahkan pada sebuah List. Gambar 6.10 menunjukkan form aplikasi.
Ketika Anda menjalankan aplikasi, Anda dapat
memasukkan data tentang sebuah mobil ke dalam kontrol-kontrol TextBox. Ketika Anda mengklik kontrol tombolTambahkan, data itu ditugaskan
kepada sebuah objek Otomobil dan
kemudian ditambahkan pada sebuah List.
Anda dapat melakukan ini sebanyak yang Anda inginkan. Ketika Anda mengklik
kontrol tombolTampilkan, data dari
tiap objek di dalam List akan
ditampilkan pada kontrol kotakListMobil.
Gambar 6.11 menunjukkan sebuah contoh form aplikasi setelah empat objek ditambahkan
pada List dan kontrol tombolTampilkan telah diklik.
Program 6.5 menunjukkan kode dari Form1. Amati kode lebih dekat:
Baris 13-18: Struktur Otomobil dideklarasikan pada baris-baris ini.
Baris 23: Statemen ini menciptakan sebuah List yang dapat menampung objek-objek Otomobil. Perhatikan bahwa List dideklarasikan sebagai sebuah
bidang di dalam kelas Form1. Semua
metode di dalam kelas dapat mengaksesnya.
Baris 33-47: Metode BacaData
ditampilkan pada baris-baris ini. Metode ini menerima sebuah objek Otomobil, dengan referensi, sebagai
suatu argumen. Data yang dimasukkan ke dalam kontrol-kontrol TextBox ditugaskan kepada bidang-bidang
dari objek.
Baris 49-67: Event handler tombolTambahkan_Click ditampilkan pada baris-baris ini. Berikut adalah
simpulan dari kode dari event handler ini:
·
Baris 52 menciptakan sebuah objek mobil,
yang merupakan suatu objek dari struktur Otomobil.
·
Baris 55 memanggil metode BacaData,
yang melewatkan objek mobil, dengan
referensi, sebagai argumen. Setelah statemen ini dieksekusi, bidang-bidang dari
objek mobil memuat data yang telah
dimasukkan ke dalam kontrol-kontrol TextBox
dari form oleh user.
·
Baris 58 menambahkan sebuah salinan dari objek mobil pada mobilList.
·
Baris 61-63 membersihkan isi dari kontrol-kontrol TextBox.
·
Baris 66 memberikan fokus pada kontrol teksBuatan.
Baris 69-87: Event handler tombolTampilkan_Click ditampilkan pada
baris-baris ini. Berikut adalah simpulan dari kode event handler:
· Baris 72 mendeklarasikan sebuah variabel string dengan nama keluaran.
Ini dipakai untuk memuat sebuah baris keluaran yang ditampilkan pada kontrol ListBox.
·
Baris 75 membersihkan isi dari kontrol ListBox.
·
Loop foreach pada baris 78-86
menampilkan data tentang setiap objek pada mobilList.
·
Statemen pada baris 81-82 menciptakan sebaris keluaran dan menugaskannya
kepada variabel keluaran.
·
Baris 85 menambahkan variabel keluaran
pada kontrol kotakListKeluaran.
Pada Tutorial 6.5, Anda akan menciptakan
sebuah aplikasi buku telepon yang menggunakan sebuah List yang memuat objek-objek struktur.
Program 6.5 Kode utuh untuk form Form1 pada aplikasi List
Mobil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace List_Mobil
{
struct
Otomobil
{
public
string buatan;
public
int tahun;
public
double jarakKm;
}
public
partial class Form1 : Form
{
//Menciptakan sebuah List sebagai suatu bidang
private
List<Otomobil> mobilList = new List<Otomobil>();
public
Form1()
{
InitializeComponent();
}
//Metode
BacaData membaca data yang dimasukkan oleh
//user
dan menugaskannya bidang-bidang dari
//objek
parameter
private
void BacaData(ref Otomobil oto)
{
try
{
//Membaca data dari TextBox
oto.buatan = teksBuatan.Text;
oto.tahun = int.Parse(teksTahun.Text);
oto.jarakKm = double.Parse(teksJarakKm.Text);
}
catch (Exception ex)
{
//Menampilkan pesan eksepsi
MessageBox.Show(ex.Message);
}
}
private
void tombolTambahkan_Click(object sender, EventArgs e)
{
//Menciptakan sebuah objek dari struktur Otomobil
Otomobil mobil = new Otomobil();
//Membaca data yang dimasukkan oleh useer
BacaData(ref mobil);
//Menambahkan objek mobil pada List
mobilList.Add(mobil);
//Membersihkan TextBox
teksBuatan.Clear();
teksTahun.Clear();
teksJarakKm.Clear();
//Memberikan fokus pada kontrol teksBuatan
teksBuatan.Focus();
}
private
void tombolTampilkan_Click(object sender, EventArgs e)
{
//Mendeklarasikan sebuah string yang menampung sebaris keluaran
string keluaran;
//Membersihkan isi dari ListBox
kotakListMobil.Items.Clear();
//Menampilkan info mobil pada ListBox
foreach (Otomobil aMobil in mobilList)
{
//Membuat sebaris keluaran
keluaran = aMobil.tahun + " " + aMobil.buatan +
" dengan jarak tempuh " + aMobil.jarakKm + " km.";
//Menambah baris keluaran pada ListBox
kotakListMobil.Items.Add(keluaran);
}
}
}
}
|
Tutorial 6.5: Menciptakan Aplikasi Buku Telepon
Pada tutorial
ini, Anda akan menciptakan sebuah aplikasi Buku
Telepon. Ketika aplikasi dijalankan,
user dapat memilih nama seseorang dari sebuah kontro ListBox, dan program akan menampilkan nomor telepon orang tersebut.
Gambar 6.12 menunjukkan sebuah contoh bagaimana form ditampilkan saat aplikasi
dijalankan. Pada gambar, John Kristof diseleksi pada kontrol ListBox, dan nomor telepon John ditampilkan pada sebuah kontrol Label. Form aplikasi telah diciptakan
bagi Anda dan ditampilkan pada Gambar 6.13 dengan nama dari tiap kontrolnya.
Sebelum Anda
memulai menuliskan kode, akan diberikan simpulan bagaimana aplikasi bekerja.
Sebuah file dengan nama DaftarTelepon.txt,
yang memuat beberapa nama dan nomor teleponnya, telah diciptakan bagi Anda.
Isinya ditampilkan pada Gambar 6.14. Perhatikan bahwa tiap baris di dalam file
memuat sebuah nama, yang diikuti dengan koma, yang diikuti dengan sebuah nomor
telepon.
Ketika
aplikasi dijalankan, event handler Load
dari form memanggila sebuah metode dengan nama BacaFile. Metode BacaFile
membaca isi dari file DaftarTelepon.txt. Setiap baris yang dibaca dari file
akan ditokenkan, menggunakan karakter koma sebagai delimiter. Ini akan
menghasilkan dua token string: satu yang memuat nama orang dan yang lain yang
memuat nomor telepon. Token-token disimpan di dalam sebuah objek dari struktur EntriBukuTelepon berikut:
struct EntriBukuTelepon
{
public string nama;
public string telepon;
}
Objek EntriBukuTelepon kemudian ditambahkan
pada sebuah List. Ketika metode BacaFile selesai dieksekusi, List akan memuat sebuah objek EntriBukuTelepon untuk setiap baris
pada file DaftarTelepon.txt.
Event handler
Load kemudian memanggil metode lain
dengan nama TampilNama. Metode TampilNama menjejak List, membaca bidang nama dari tiap
objek dan menambahkan nama pada kontrol ListBox.
Ketika metode TampilNama selesai
dieksekusi, kontrol ListBox akan
memuat semua nama yang dimuat di dalam List.
Ketika user
mengklik sebuah nama pada kontrol ListBox,
sebuah event SelectedIndexChanged
terjadi. Anda perlu menuliskan sebuah event handler yang merespon event ini.
Event handler akan membaca indeks dari item terseleksi pada kontrol ListBox, dan menggunakan indeks itu
untuk membaca objek dari List. Objek
ini memuat nomor telepon untuk nama terseleksi, yang ditampilkan pada sebuah
kontrol Label.
Langkah 1: Awali Visual Studio (atau Visual Studio Express).
Langkah 2: Buka kode untuk form Form1 pada editor kode. Ketikkan direktif using System.IO yang ditunjukkan pada baris
10 pada Program 6.6. Direktif ini diperlukan karena Anda akan menciptakan
sebuah objek StreamReader untuk
membaca masukan dari suatu file.
Langkah 3: Tuliskan deklarasi dari struktur EntriBukuTelepon, yang ditunjukkan pada baris 14-18. Pastikan Anda
menuliskan deklarasi itu di dalam namespace Buku_Telepon, seperti ditunjukkan pada Program 6.6.
Langkah 4: Selanjutnya, tuliskan komentar dan deklarasi untuk daftarTelepon, yang ditampilkan pada
baris 22-24 pada Program 6.6. Perhatikan bahwa daftarTelepon dideklarasikan sebagai sebuah bidang pada kelas Form1. Ia tersedia bagi semua metode di
dalam kelas itu.
Langkah 5: Tuliskan komentar dan kode untuk metode BacaFile, seperti ditunjukkan pada
baris 31-72 pada Program 6.6. Metode BacaFile
membuka file DaftarTelepon.txt. Loop
while yang diawali pada baris 51
beriterasi sampai akhir file. Pada tiap iterasi loop, baris-baris berikut
dieksekusi:
Baris 54: Statemen ini membaca sebuah baris dari file dan
menugaskannya kepada variabel baris.
Baris 57: Statemen ini menokenkan variabel baris, menggunakan karakter koma sebagai delimiter. Token-token
ditugaskan kepada array token.
(Setelah statemen ini dieksekusi, token[0]
akan memuat sebuah nama dan token[1]
akan memuat sebuah nomor telepon).
Baris 60-61: Statemen-statemen ini menugaskan token-token kepada
bidang nama dan bidang telepon dari objek entri (yang merupakan sebuah objek dari struktur EntriBukuTelepon).
Baris 64: Statemen ini menambahkan objek entri pada koleksi daftarTelepon.
Gambar 6.15
mengilustrasikan langkah-langkah yang dilakukan pada baris-baris kode ini.
Setelah loop selesai dieksekusi, daftarTelepon
akan memuat sebuah objek EntriBukuTelepon
untuk tiap baris pada file DaftarTelepon.txt.
Langkah 6: Tuliskan komentar dan kode untuk metode TampilNama, yang ditampilkan pada baris
74-82 pada Program 6.6. Loop foreach
pada baris 78 menjejak semua objek di dalam daftarTelepon. Untuk setiap objek di dalam daftarTelepon, baris 89 menambahkan bidang nama pada kontrol kotakListNama.
Perhatikan
bahwa nama-nama ditambahkan pada kontrol ListBox dengan urutan yang sama dengan
yang ada pada daftarTelepon.
Gambar 6.16
mengilustrasikan bagaimana objek-objek di dalam daftarTelepon dan nama-nama pada kontrol ListBox berelasi berdasarkan indeks. Anda dapat memanfaatkan relasi
ini pada Langkah 7 ketika Anda menuliskan kode untuk membaca sebuah objek dari daftarTelepon.
Gambar 6.16 Objek-objek di dalam daftarTelepon dan nama-nama di dalam kotakListNama berelasi dengan indeks
Langkah 7: Selanjutnya, Anda menciptakan event handler Load dari form. Kembali ke mode Designer dan klik ganda pada bagian
dari form yang tidak memuat kontrol. Ini akan membuka editor kode, dan Anda
akan melihat sebuah event handler kosong dengan nama Form1_Load. Sempurnakan event handler dengan menuliskan kode yang
ditampilkan pada baris 86-90 pada Program 6.6. Statemen pada baris 87 memanggil
metode BacaFile, dan baris 90
memanggil metode TampilNama.
Langkah 8: Sekarang Anda menciptakan event handler SelectedIndexChange untuk kontrol kotakListNama. Kembali ke mode Designer dan klik ganda pada kontrol kotakListNama. Ini akan membuka editor
kode, dan Anda akan melihat sebuah event handler kosong dengan nama kotakListNama_SelectedIndexChanged.
Sempurnakan event handler ini dengan menuliskan kode yang ditunjukkan pada
baris 95-99 pada Program 6.6.
Telah
disebutkan pada Langkah 6 bahwa nama-nama pada ListBox dan objek-objek pada daftarTelepon
berelasi berdasarkan indeks. Ketika user menyeleksi sebuah nama pada ListBox, apa yang perlu Anda lakukan
adalah membaca indeks item dan kemudian menggunakan indeks itu untuk membaca
objek terkait pada daftarTelepon.
Inilah yang dilakukan oleh event handler ini. Baris 96 membaca indeks dari item
terseleksi pada kontrol kotakListNama
dan menugaskannya kepada variabel indeks.
Baris 99 menggunakan variabel indeks
untuk mendapatkan sebuah objek dari daftarTelepon.
Bidang telepon dari objek yang dibaca ditugaskan kepada labelTelepon.Text.
Langkah 9: Kembali ke mode Designer
dan klik ganda pada kontrol tombolKeluar.
Pada editor kode, Anda akan melihat sebuah event handler kosong dengan nama tombolKeluar_Click. Sempurnakan event
handler ini dengan menuliskan kode yang ditunjukkan pada baris 104-105 pada
Program 6.6.
Langkah 10: Simpan projek dan jalankan aplikasi.
Program 6.6 Kode utuh untuk form Form1 pada aplikasi Buku
Telepon
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace Buku_Telepon
{
struct
EntriBukuTelepon
{
public
string nama;
public
string telepon;
}
public
partial class Form1 : Form
{
//Bidang untuk
menampung sebuah list yang memuat objek-objek EntriBukuTelepon
private
List<EntriBukuTelepon> daftarTelepon =
new
List<EntriBukuTelepon>();
public
Form1()
{
InitializeComponent();
}
//Metode
BacaFile membaca isi dari file
//DaftarTelepon.txt dan menyimpannya sebagai objek-objek
//EntriBukuTelepon di dalam daftarTelepon
private
void BacaFile()
{
try
{
StreamReader fileMasukan; //Untuk membaca file
string baris; //Untuk
menampung sebaris dari file
//Menciptakan sebuah objek dari struktur EntriBukuTelepon
EntriBukuTelepon entri = new EntriBukuTelepon();
//Menciptakan sebuah array delimiter
char[] delim = { ',' };
//Membuka file DaftarTelepon.txt
fileMasukan = File.OpenText("DaftarTelepon.txt");
//Membaca baris-baris dari file
while (!fileMasukan.EndOfStream)
{
//Membaca sebuah baris dari file
baris = fileMasukan.ReadLine();
//Menokenkan baris
string[] token = baris.Split(delim);
//Menyimpan token-token di dalam objek entri
entri.nama = token[0];
entri.telepon = token[1];
//Menambahkan objek entri pada List
daftarTelepon.Add(entri);
}
}
catch
(Exception ex)
{
//Menampilkan pesan error
MessageBox.Show(ex.Message);
}
}
//Metode
TampilNama menampilkan daftar nama
//pada
kontrol kotakListNama
private
void TampilNama()
{
foreach (EntriBukuTelepon entry in daftarTelepon)
{
kotakListNama.Items.Add(entry.nama);
}
}
private
void Form1_Load(object sender, EventArgs e)
{
//Membaca file DaftarTelepon.txt
BacaFile();
//Menampilkan nama-nama
TampilNama();
}
private
void kotakListNama_SelectedIndexChanged(…)
{
//Membaca indeks dari item terseleksi
int
indeks = kotakListNama.SelectedIndex;
//Menampilkan nomor telepon terkait
labelTelepon.Text = daftarTelepon[indeks].telepon;
}
private
void tombolKeluar_Click(object sender, EventArgs e)
{
//Menutup form
this.Close();
}
}
}
|
6.4 Tipe Enumerasi
KONSEP: Tipe
enumerasi data adalah tipe data yang didefinisikan oleh programer. Tipe data
ini terdiri-dari konstanta-konstanta, yang dikenal dengan enumerator, yang
merepresentasikan nilai-nilai integer.
Kadangkala, di dalam sebuah program, Anda
memerlukan suatu cara untuk merepresentasikan nilai-nilai yang tidak dapat
disimpan di memori dengan cara yang sederhana. Misalnya, Anda sedang menuliskan
sebuah program yang bekerja dengan nama-nama hari (Minggu, Senin, Selasa, dan
seterusnya), dan Anda memerlukan suatu cara untuk merepresentasikan setiap hari
di dalam memori. Salah satu solusinya adalah dengan menetapkan integer 0 sampai
6 untuk merepresentasikan nama-nama hari; 0 dapat merepresentasikan Minggu, 1
dapat merepresentasikan Senin, dan seterusnya. Meskipun pendekatan ini dapat
dilakukan, ia memiliki beberapa kekurangan.
Sebagai contoh, bagi mereka yang membaca kode
hal itu tidak jelas. Selain itu, ketika Anda menetapkan Minggu sebagai hari
pertama dari seminggu, orang lain bisa saja menetapkan Senin sebagai hari
pertama. Ketika orang itu melihat nilai 0, ia bisa berpikir bahwa nilai itu
merepresentasikan Senin.
Pendekatan yang lebih baik dalam menangani
tipe data ini adalah dengan menciptakan tipe data enumerasi. Tipe data
enumerasi adalah sebuah tipe data yang dapat Anda ciptakan. Ketika Anda
menciptakan sebuah tipe data enumerasi, Anda menetapkan sejumlah nilai simbolik
untuk tipe data itu. Berikut adalah salah satu contoh dari deklarasi tipe data
enumerasi:
enum
Hari{Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu}
Deklarasi tipe data enumerasi diawali dengan
katakunci enum, yang diikuti dengan
nama tipe, yang diikuti dengna sejumlah pengenal di dalam kurung kurawal.
Deklarasi tersebut menciptakan sebuah tipe enumerasi dengan nama Hari. Pengenal-pengenal Minggu, Senin,
Selasa, Rabu, Kamis, Jumat, dan Sabtu, yang dicantumkan di dalam kurung
kurawal, dikenal dengan enumerator.
Enumerator adalah konstanta yang
merepresentasikan nilai integer. Ketika Anda mendeklarasikan sebuah tipe
enumerasi, tiap enumerator ditugasi nilai integer, diawali dengan 0. Sebagai
contoh, pada tipe data Hari,
enumerator Hari.Minggu ditugasi
nilai 0, enumerator Hari.Senin
ditugasi nilai 1, dan seterusnya.
Sebuah deklarasi enum dapat dimunculkan pada
tempat-tempat berikut:
·
Di luar namespace dari aplikasi.
·
Di dalam namespace dari aplikasi.
·
Di dalam sebuah kelas
Pada buku ini, Anda akan selalu menuliskan
deklarasi num pada region yang sama: di dalam namespace aplikasi tetapi tidak
di dalam sebuah kelas.
Setelah Anda menciptakan sebuah tipe
enumerasi, Anda dapat mendeklarasikan variabel dengan tipe itu. Sebagai contoh,
statemen berikut mendeklarasikan hariKerja
sebagai sebuah variabel bertipe Hari:
Hari
hariKerja;
Anda menamakan ini sebagai variabel enum. Karena hariKerja adalah variabel bertipe Hari, nilai-nilai yang ditugaskan kepadanya adalah
enumerator-enumerator tipe Hari.
Sebagai contoh, statemen berikut menugaskan nilai Hari.Rabu kepada variabel hariKerja:
hariKerja
= Hari.Rabu;
Perhatikan bahwa Anda menugaskan Hari.Rabu, bukan hanya Rabu. Nama Hari.Rabu adalah nama lengkap dari enumerator Rabu dari tipe Hari.
Anda perlu menggunakan nama utuh enumerator
karena dimungkinkan untuk memiliki enumerator yang sama pada beberapa tipe
enumerasi. Berikut adalah salah satu contohnya:
Hari
hariLibu = Hari.Sabtu;
Statemen ini mendeklarasikan sebuah variabel Hari dengan nama hariLibur dan menginisialisasinya dengan nilai Hari.Sabtu.
Kode berikut menunjukkan contoh lain.
(Asumsikan bahwa form aplikasi memiliki sebuah kontrol tombol radio dengan nama
tombolRadioSenin).
1
2
3
4
5
|
Hari hariTerseleksi;
if (tombolRadioSenin.Checked)
{
hariTerseleksi = Hari.Senin;
}
|
Pada kode ini, baris 1 mendeklarasikan sebuah
variabel Hari dengan nama hariTerseleksi.
Statemen if pada baris 2 menentukan
apakah kontrol tombolRadioSenin
diseleksi atau tidak. Jika ya, statemen pada baris 4 akan menugaskan Hari.Senin pada variabel hariTerseleksi.
Anda dapat melakukan perbandingan variabel
enum dengan enumerator. Kode berikut menunjukkan salah satu contoh. (Asumsikan hariTerseleksi adalah sebuah variabel Hari).
1
2
3
4
|
if (hariTerseleksi == Hari.Rabu)
{
MessageBox.Show("Setengah minggu terlampaui!");
}
|
Statemen if pada baris 1 menentukan apakah
variabel hariTerseleksi sama dengan Hari.Rabu atau tidak. Jika ya, baris 3 akan
menampilkan sebuah kotak pesan.
Kode berikut menunjukkan bahwa sebuah
variabel enum dapat diuji di dalam
suatu statemen switch. (Asumsikan
bahwa hariTerseleksi adalah sebuah
variabel Hari).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
switch (hariTerseleksi)
{
case Hari.Minggu:
MessageBox.Show("Istrahat.");
break;
case Hari.Senin:
MessageBox.Show("Kembali bekerja.");
break;
case Hari.Selasa:
MessageBox.Show("Hari kerja biasa.");
break;
case Hari.Rabu:
MessageBox.Show("Setengah minggu terlampaui.");
break;
case Hari.Kamis:
MessageBox.Show("Hampir sampai.");
break;
case Hari.Jumat:
MessageBox.Show("Hari kerja terakhir minggu ini!");
break;
case Hari.Sabtu:
MessageBox.Show("Tidur larut hari ini.");
break;
}
|
Pada baris 1, statemen switch menguji
variabel hariTerseleksi. Tergantung
dari nilai dari variabel, program bercabang ke statemen case tertentu.
Menggunakan Metode ToString dari
Enumerator atau dari Variabel enum
Enumerator dan variabel enum memiliki metode ToString. Ketika Anda memanggil metode ToString dari sebuah enumerator, ia
akan menghasilkan nama dari enumerator sebagai suatu string. Sebagai contoh,
kode berikut menampilkan string “Minggu” pada sebuah kotak pesan:
MessageBox.Show(Haru.Minggu.ToString());
Ketika Anda memanggil metode ToString dari variabel enum, ia akan menghasilkan nama dari
nilai yang dimuat variabel itu, sebagai suatu string. Sebagai contoh, kode
berikut akan menampilkan string “Kamis” pada sebuah kotak pesan:
Hari hariIni = Hari.Kamis;
MessageBox.Show(hariIni.ToString());
Ketika Anda menggunakan operator + pada suatu
string dan sebuah variabel enum,
metode ToString dari variabel enum akan secara implisit dipanggil.
(Hal yang sama terjadi ketika Anda menggunakan operator + pada suatu variabel int. Metode ToString dari variabel int
akan secara implisit dipanggil). Berikut adalah salah satu contohnya:
Hari hariIni = Har.Kamis;
MessageBox.Show("Hari ini adalah hari " + hariIni);
Kode ini akan menampilkan string “Hari ini
adalah hari Kamis” pada suatu kotak pesan.
Pada Tutorial 6.6, Anda akan menciptakan
sebuah aplikasi yang menggunakan suatu tipe enumerasi untuk merepresentasikan
sejumlah warna.
Tutorial 6.6: Menciptakan Aplikasi Spektrum Warna
Singkatan ROY
G BIV umumnya dipakai untuk membantu mengingat runtun warna berikut: red,
orange, yellow, green, blue, indigo, dan violet. Pada tutorial ini, Anda akan
menciptakan apliksi Spektrum Warna, yang menampilkan warna-warna ini. Aplikasi
akan menampilkan nama dari suatu warna ketika Anda mengkliknya.
Form
aplikasi, yang telah diciptakan bagi Anda, ditampilkan pada Gambar 6.17.
Warna-warna sebenarnya merupakan kontrol-kontrol Label dengan properti BackColor-nya
ditetapkan menjadi warna tertentu.
Langkah 1: Awali Visual Studio (atau Visual Studio
Express).
Langkah 2: Buka kode dari form Form1 pada editor kode. Tuliskan deklarasi dari tipe enumerasi Spektrum, yang ditunjukkan pada baris
13-17 pada Program 6.7. Pastikan Anda menuliskan deklarasi itu di dalam
namespace Spektrum_Warna, persis
seperti ditunjukkan pada Gambar 6.7. Perhatikan bahwa enumerator-enumerator
pada tipe Spektrum merepresentasikan
warna-warna.
Langkah 3: Tuliskan komentar dan kode untuk metode TampilWarna, yang ditunjukkan pada
baris 26-31 pada Program 6.6. Perhatikan pada baris 28 bahwa metode ini
memiliki sebuah variabel parameter dengan tipe Spektrum. Ketika Anda memanggil metode ini, Anda melewatkan sebuah
enumerator Spektrum sebagai argumen.
Pada baris 30, nama dari enumerator
ditampilkan pada kontrol labelWarna.
Langkah 4: Selanjutnya, Anda menciptakan event handler
Click untuk kontrol-kontrol Label. Kembali ke mode Designer dan klik ganda pada kontrol labelRed. Ini akan membuka kode editor,
dan Anda akan melihat sebuah event handler kosong dengan nama labelRed_Click. Sempurnakan event
handler ini dengan menuliskan statemen yang ditunjukkan pada baris 35 pada
Program 6.7. Statemen ini memanggil metode TampilWarna,
yang melewatkan enumerator Spektrum.Red
sebagai argumen.
Langkah 5: Ulangi proses ini untuk kontrol-kontrol Label yang lain, dan tuliskan event
handler Click untuk tiap kontrol itu
pada Program 6.7.
Langkah 6: Simpan projek dan jalankan aplikasi. Ketika
aplikasi dijalankan, klik pada salah satu warna yang ditunjukkan pada form
untuk memastikan bahwa aplikasi telah bekerja dengan benar.
Program 6.7 Kode utuh untuk form Form1 pada aplikasi Spektrum
Warna
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Spektrum_Warna
{
enum Spektrum
{
Red,
Orange, Yellow, Green,
Blue,
Indigo, Violet
}
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
//Metode
TampilWarna menampilkan
//nama
dari sebuah warna.
private
void TampilWarna(Spektrum warna)
{
labelWarna.Text = warna.ToString();
}
private
void labelRed_Click(object sender, EventArgs e)
{
TampilWarna(Spektrum.Red);
}
private
void labelOrange_Click(object sender, EventArgs e)
{
TampilWarna(Spektrum.Orange);
}
private
void labelYellow_Click(object sender, EventArgs e)
{
TampilWarna(Spektrum.Yellow);
}
private
void labelGreen_Click(object sender, EventArgs e)
{
TampilWarna(Spektrum.Green);
}
private
void labelBlue_Click(object sender, EventArgs e)
{
TampilWarna(Spektrum.Blue);
}
private
void labelIndigo_Click(object sender, EventArgs e)
{
TampilWarna(Spektrum.Indigo);
}
private
void labelViolet_Click(object sender, EventArgs e)
{
TampilWarna(Spektrum.Violet);
}
}
}
|
Membaca Nilai Integer dari Variabel
enum atau Enumerator
Anda tidak dapat menugaskan sebuah enumerator
secara langsung kepada suatu variabel, tetapi Anda dapat mengkonversinya
menjadi tipe integer ekivalennya menggunakan operator cast. Berikut adalah
salah satu contohnya:
int
nilai = (int)Hari.Jumat;
Statemen ini mendeklarasikan sebuah variabel int dengan nama nilai dan menginisialisasinya dengan nilai integer Hari.Jumat. Setelah statemen ini
dieksekusi, nilai akan bernilai 5.
Berikut diberikan contoh lain:
Hari hariKerja = Hari.Senin;
int
nilai = (int)hariKerja;
Statemen pertama mendeklarasikan sebuah
variabel Hari dengan nama hariKerja, yang diinisialisasi dengan Hari.Senin. Statemen kedua
mendeklarasikan sebuah variabel int
dengan nama nilai dan
menginisialisasinya dengan nilai integer dari variabel hariKerja. Setelah statemen ini dieksekusi, nilai akan bernilai 1.
Menetapkan Nilai Integer untuk
Enumerator
Secara default, enumerator-enumerator pada
sebuah tipe data enumerasi ditugasi nilai integer 0, 1, 2, dan seterusnya. Jika
tidak sesuai dengan keinginan Anda, Anda dapat menetapkan nilai-nilai yang akan
ditugaskan, seperti pada contoh berikut:
enum
Air {Beku = 0, Didih = 100}
Pada contoh ini, enumerator Air.Beku ditugasi
nilai integer 0 dan enumerator Air.Didih ditugasi nilai integer 100.
Nilai-nilai integer yang Anda tugaskan kepada
enumerator-enumerator tidak harus unik. Sebagai contoh, kode berikut
menunjukkan sebuah tipe enumerasi dengan nama HariBulan. Enumerator-enumeratornya adalah Januari, Februari, Maret, dan seterusnya. Perhatikan bahwa
nilai-nilai yang ditugaskan kepada enumerator-enumerator adalah jumlah hari
pada bulan tertentu (Januari
memiliki 31 hari, Februari memiliki
28 hari, dan seterusnya). Tipe data ini dapat dimunculkan pada suatu aplikasi
yang menggunakan banyak hari pada tiap bulan:
1
2
3
4
5
6
7
|
enum HariBulan
{
Januari = 31, Februari = 28, Maret = 31,
April = 30, Mei = 31, Juni = 30,
Juli = 31, Agustus = 31, September = 30,
Oktober = 31, November = 30, Desember = 31
}
|
Membandingkan Enumerator dan Variabel
enum
Sebelumnya, Anda telah melihat bahwa
enumerator dan variabel enum dapat dibandingkan menggunakan operator ekualitas
(==). Anda dapat membandingkan enumerator dan variabel enum menggunakan operator relasional yang lain. Sebagai contoh,
dengan menggunakan tipe data Hari
yang telah didiskusikan sebelumnya, ekspresi berikut bernilai true:
Hari.Jumat > Hari.Senin
Ekspresi ini bernilai true karena enumerator Hari.Jumat
disimpan di memori sebagai nilai 5 dan enumerator hari.Senin disimpan 1. Kode berikut menampilkan pesan “Jumat lebih
besar dari Senin”:
1
2
3
4
|
if (Hari.Jumat > Hari.Senin)
{
MessageBox.Show("Jumat lebih besar dari Senin");
}
|
Kode berikut menampilkan contoh lain yang
membandingkan dua variabel enum.
Kode ini menampilkan pesan “Jumat lebih besar dari Senin”:
1
2
3
4
5
6
7
|
Hari hari1 = Hari.Jumat;
Hari hari2 = Hari.Senin;
if (hari1 > hari2)
{
MessageBox.Show(hari1 + " lebih besar dari " + hari2);
}
|
Enumerator dan variabel enum dapat
dibandingkan secara langsung dengan nilai integer. Sebagai contoh, kode berikut
menampilkan pesan “Minggu sama dengan nol”:
1
2
3
4
|
if (Hari.Minggu == 0)
{
MessageBox.Show("Minggu sama dengan nol");
}
|
Menggunakan Variabel enum untuk
Menjejak Elemen-Elemen Array
Karena enumerator merepresentasikan nilai
integer, ia dapat dipakai di dalam suatu loop untuk menjejak elemen-elemen dari
sebuah array. Sebagai contoh, lihat pada kode berikut:
1
2
3
4
5
6
7
8
|
decimal[] penjualan = { 1000,
2000, 3000, 4000,
5000, 6000, 7000 };
for (Hari jumHari = Hari.Minggu;
jumHari <= Hari.Sabtu; jumHari++)
{
MessageBox.Show("Penjualan untuk " + jumHari + " sebesar
Rp. " +
penjualan [(int)jumHari].ToString());
}
|
Baris 1 dan baris 2 menciptakan sebuah array decimal dengan nama penjualan. Loop for yang diawali pada baris 4
menggunakan sebuah variabel dengan nama jumHari
sebagai pencacah loop.
6.5 Kontrol ImageList
KONSEP:
Kontrol ImageList dapat Anda pakai untuk menyimpan koleksi citra. Saat aplikasi
dijalankan, Anda dapat membaca sebuah citra dari kontrol ImageList dan
menampilkannya pada kontrol PictureBox.
Kontrol ImageList
adalah sebuah kontainer yang dapat menampung sejumlah citra. Seperti
diimplikasikan dari namanya, ia merupakan suatu daftar citra. Anda dapat
menggunakan indeks untuk membaca citra dari kontrol ImageList dan menampilkannya pada kontrol PictureBox.
Ada beberapa panduan yang perlu diikuti
ketika Anda berencana menggunakan kontrol ImageList pada aplikasi:
·
Semua citra yang disimpan di dalam sebuah kontrol ImageList harus berukuran sama.
·
Citra-citra yang disimpan di dalam sebuah kontrol ImageList tidak lebih besar dari ukuran 256 x 256 piksel.
·
Semua citra yang disimpan di dalam sebuah kontrol ImageList harus dengan format yang sama (.bpm, .jpg, atau lainnya).
Meskipun panduan ini tampak membatasi, Anda
perlu mengingat bahwa kontrol ImageList didesain untuk menyimpan citra-citra
kecil seperti ikon atau thumbnail.
Anda akan mendapati kontrol ImageList pada bagian Components pada jendela Toolbox. Ketika Anda mengklik ganda
ikon ImageList tesebut, sebuah
kontrol ImageList diciptakan pada
area di bawah Designer. (Kontrol ImageList tidak ditampilkan pada form).
Gambar 6.18 menunjukkan salah satu contoh. Ketika Anda menciptakan kontrol ImageList, ia diberikan nama default
seperti imageList1, imageList2, dan seterusnya.
Setelah Anda menciptakan sebuah kontrol ImageList, Anda dapat mengatur properti
ImageSize menjadi ukuran citra yang
ingin Anda simpan di dalam kontrol itu. Ukuran defaultnya adalah 16, 16. Anda
dapat mengatur properti ImageSize
menjadi sembarang nilai dari 0,0 sampai 256,256. (Jika nilai dari properti ImageSize tidak sesuai dengan ukuran
dari citra-citra yang disimpan di dalam kontrol, citra-citra itu akan
ditampilkan terdistorsi).
Kemudian, Anda dapat menggunakan properti Images untuk menambahkan citra-citra
pada kontrol. Pada jendela Properties, klik tombol elipsis (…) yang ditampilkan
di samping dari properti Images. Ini akan menampilkan jendela Images Collection Editor yang
ditunjukkan pada Gambar 6.19. Klik pada tombol Add, dan sebuah kotak dialog Open
akan ditampilkan. Gunakan kotak dialog untuk mencari dan memilih citra file
(atau beberapa citra file) yang ingin Anda tambahkan pada kontrol ImageList.
Gambar 6.20 menunjukkan jendela Images Collection Editor setelah
sejumlah cira ditambahkan. Perhatikan bahwa nilai indeks ditampilkan di samping
tiap nama citra. Anda akan menggunakan nilai indeks ini nanti untuk membaca
citra dari kontrol ini.
Jika Anda mengetahui nilai indeks dari citra tertentu, Anda dapat membaca citra itu dari kontrol ImageList dan menampilkannya pada PictureBox. Kode berikut menunjukkan salah satu contoh. Asumsikan bahwa kuImageList adalah nama dari kontrol ImageList dan kuPictureBox adalah nama dari kontrol PictureBox:
kuPictureBox.Image
= kuImageList.Images[5];
Statemen ini membaca citra pada indeks 5 dari
kuImageList dan menugaskannya kepada
properti Images dari kontrol kuPictureBox. Hasilnya, citra itu
ditampilkan pada PictureBox.
Pada kode, Anda dapat menentukan banyaknya
citra yang disimpan di dalam sebuah kontrol ImageList dengan mendapatkan nilai dari properti Images.Count. Kode berikut menunjukkan
salah satu contoh. Asumsikan bahwa kuImageList
adalah nama dari sebuah kontrol ImageList
dan banyakCitra adalah nama dari
sebuah variabel int.
banyakCitra
= kuImageList.Images.Count;
Pada Tutorial 6.7, Anda menciptakan sebuah
aplikasi yang secara acak memilih citra-citra dari sebuah kontrol ImageList dan menampilkannya pada
sebuah PictureBox.
Tutorial 6.7: Menciptakan Aplikasi
Kartu Acak
Pada tutorial ini, Anda akan menciptakan
aplikasi Kartu Acak, yang secara acak menampilkan citra dari tiap kartu poker yang
diseleksi dari sebuah kontrol ImageList.
Form aplikasi, yang telah disediakan bagi Anda, ditampilkan pada Gambar 6.21.
Perhatikan bahwa kontrol PictureBox
menampilkan salah satu citra kartu.
Langkah 1: Awali Visual Studio (atau Visual Studio
Express).
Langkah 2: Pastikan form Form1 dibuka pada mode Designer.
Gulung ke bawah pada jendela Toolbox
sampai Anda melihat bagian Components,
dan klik ganda pada kontrol ImageList.
Ini akan menciptakan sebuah kontrol ImageList
dengan nama imageList1, yang akan
Anda lihat di bagian bawah form.
Langkah 3: Ubah nama dari kontrol imageList1 menjadi iLKartu.
Langkah 4: Setiap citra yang akan Anda tambahkan pada
kontrol iLKartu adalah berukuran
lebar 71 dan tinggi 96. Ubah properti ImageSize
dari kontrol iLKartu menjadi 71,96.
Langkah 5: Selanjutnya, Anda menambahkan citra-citra
pada kontrol iLKartu. Pada jendela
Properties, klik tombol elipsis (…) yang ada di samping properti Images. Ini akan menampilkan jendela Images Collection Editor. Klik tombol Add, dan sebuah kotak dialog Open akan ditampilkan. Gunakan kotak
dialog itu untuk menemukan dan memilih file citra.
Langkah 6: Sekarang Anda menciptakan event handler Click untuk kontrol tombolAmbilKartu. Klik ganda pada
kontrol itu pada mode Designer. Ini
akan membuka editor kode, dan Anda akan melihat sebuah event handler kosong
dengan nama tombolAmbilKartu_Click.
Sempurnakan event handler ini dengan menuliskan kode yang ditunjukkan pada
baris 22-29 pada Program 6.8. Amati kode ini lebih dekat:
Baris 23: Statemen ini menciptakan sebuah objek Random, yang direferensi oleh variabel rand.
Baris 26: Statemen ini mendeklarasikan sebuah
variabel int dengan nama indeks. Variabel ini diinisialisasi
dengan sebuah nilai acak yang dihasilkan dari metode rand.Next. Perhatikan bahwa iLKartu.Images.Count
dilewatkan sebagai argumen kepada metode. Hasilnya, Anda mendapatkan sebuah
nilai acak dalam rentang 0 sampai, tetapi tidak termasukn, banyak citra di
dalam kontrol.
Baris 29: Statemen ini menggunakan variabel indeks untuk membaca citra dari kontrol
iLKartu dan menugaskannya kepada
properti Image dari kontrol pbKartu. Hasilnya, citra akan
ditampilkan pada kontrol PictureBox.
Langkah 7: Simpan projek dan jalankan aplikasi. Ketika
aplikasi dijalankan, klik pada tombol Ambil
Kartu beberapa kali untuk melihat
citra-citra yang diseleksi secara acak.
Program 6.8 Kode utuh untuk form Form1 pada aplikasi Kartu
Acak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Kartu_Acak
{
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
private
void tombolAmbilKartu_Click(object sender, EventArgs e)
{
//Menciptakan sebuah objek Random
Random rand = new Random();
//Membaca indeks acak
int
indeks = rand.Next(iLKartu.Images.Count);
//
Display a card.
pbKartu.Image = iLKartu.Images[indeks];
}
}
}
|
No comments:
Post a Comment