BAB 2: TIPE DATA, VARIABEL, NILAI, DAN EKSPRESI
2.1.2 TIPE BENTUKAN
Dalam kehidupan sehari-hari, data yang kita jumpai jarang sekali berdiri sendiri sebagai entitas tunggal yang sederhana. Seorang mahasiswa, misalnya, bukan hanya sekadar nomor induk (string) atau indeks prestasi (real), melainkan satu kesatuan utuh yang memiliki NIM, Nama Lengkap, Jurusan, Tanggal Lahir, dan IPK.
Jika kita hanya mengandalkan tipe dasar, kita terpaksa harus membuat puluhan variabel yang terpisah-pisah dan tidak saling terkait. Untuk memodelkan entitas dunia nyata secara elegan, ilmu pemrograman menyediakan fasilitas Tipe Bentukan (User-Defined / Composite Types)—yaitu tipe data baru yang didefinisikan dan dinamai sendiri oleh pemrogram dengan mengombinasikan tipe-tipe data yang telah ada sebelumnya.
Ragam Tipe Bentukan dalam Algoritma
Terdapat beberapa varian tipe bentukan yang umum digunakan:
+-------------------------------------------------------------------------------+
| TAKSONOMI TIPE DATA BENTUKAN |
+--------------------------+----------------------------------------------------+
| Jenis Tipe Bentukan | Karakteristik dan Skenario Penggunaan |
+--------------------------+----------------------------------------------------+
| 1. Rekaman (Record/Struct) Menggabungkan beberapa medan (field) berbeda tipe. |
| | Contoh: Data Mahasiswa, Titik Koordinat, Jam Waktu.|
+--------------------------+----------------------------------------------------+
| 2. Penamaan Ulang (Alias)| Memberikan nama baru yang lebih bermakna bisnis |
| | kepada tipe dasar yang sudah ada. |
+--------------------------+----------------------------------------------------+
| 3. Rentang (Subrange) | Membatasi domain nilai dari suatu tipe ordinal |
| | (misal: angka 1 s/d 12 untuk representasi Bulan). |
+--------------------------+----------------------------------------------------+
| 4. Enumerasi (Enum) | Mendefinisikan himpunan nilai diskrit berupa |
| | daftar nama konstanta (misal: nama-nama Hari). |
+--------------------------+----------------------------------------------------+
1. Tipe Terstruktur / Rekaman (Record / Struct)
Tipe Rekaman (Record) adalah tipe bentukan yang paling penting dan paling luas digunakan. Record mengelompokkan satu atau beberapa elemen data yang masing-masing disebut sebagai medan (field).
Medan-medan di dalam sebuah record dapat memiliki tipe data yang berbeda-beda (heterogen).
Contoh 1: Mendefinisikan Tipe Titik Koordinat 2 Dimensi ($X, Y$)
Dalam notasi teks algoritma:
type Titik : record < x : real,
y : real >
Contoh 2: Mendefinisikan Tipe Data Waktu (Jam)
type Jam : record < hh : integer, { jam: 0..23 }
mm : integer, { menit: 0..59 }
ss : integer > { detik: 0..59 }
Contoh 3: Mendefinisikan Tipe Data Mahasiswa
type Mahasiswa : record < nim : string,
nama : string,
ipk : real >
Pengaksesan Medan Record (Field Selector):
Untuk mengisi atau membaca nilai dari suatu medan di dalam record, digunakan operator titik (.):
deklarasi:
mhs : Mahasiswa
p : Titik
deskripsi:
{ Mengisi nilai ke dalam medan record }
mhs.nim <- "2026001"
mhs.nama <- "Budi Susanto"
mhs.ipk <- 3.85
p.x <- 12.5
p.y <- 7.0
{ Menampilkan isi medan record }
write(mhs.nama, " meraih IPK: ", mhs.ipk)
2. Rekaman Bersarang (Nested Record)
Sebuah record dapat memuat medan yang tipe datanya adalah record lain:
type Tanggal : record < hari : integer,
bulan : integer,
tahun : integer >
type Karyawan : record < nik : string,
nama : string,
tgl_lahir : Tanggal > { Medan bertipe record Tanggal }
deklarasi:
staf : Karyawan
deskripsi:
staf.nama <- "Citra Lestari"
staf.tgl_lahir.hari <- 16
staf.tgl_lahir.bulan <- 9
staf.tgl_lahir.tahun <- 2000
3. Penamaan Ulang Tipe (Type Alias)
Pemrogram dapat memberikan nama alias baru pada tipe dasar untuk meningkatkan keterbacaan kode (code readability):
type BilanganBulat = integer
type Pecahan = real
type Huruf = char
deklarasi:
total_gaji : BilanganBulat
rasio : Pecahan
4. Tipe Rentang Nilai (Subrange Type)
Tipe rentang membatasi domain nilai dari suatu tipe dasar berurutan (ordinal):
type IndexBulan = 1 .. 12
type NilaiMutu = 'A' .. 'E'
deklarasi:
bulan_sekarang : IndexBulan
mutu : NilaiMutu
Jika ada instruksi yang mencoba memasukkan angka 15 ke dalam variabel bulan_sekarang, sistem kompilator akan langsung menolak dan membangkitkan pesan kesalahan batas (out of range error).
5. Tipe Enumerasi (Enumerated Type)
Tipe enumerasi mendefinisikan tipe data baru yang nilainya secara eksplisit hanya berupa daftar konstanta pengenal terhitung:
type Hari = (Senin, Selasa, Rabu, Kamis, Jumat, Sabtu, Minggu)
type StatusMenikah = (Lajang, Menikah, Duda, Janda)
deklarasi:
hari_kerja : Hari
status_staf : StatusMenikah
deskripsi:
hari_kerja <- Senin
status_staf <- Menikah
Secara internal di memori komputer, nilai enumerasi disimpan sebagai deretan bilangan bulat mulai dari $0, 1, 2, \dots$ (Senin = 0, Selasa = 1, dst.).
Rangkuman
Tipe bentukan memberikan keleluasaan tak terbatas bagi pemrogram untuk membangun struktur data yang meniru kompleksitas dunia nyata. Melalui pendefinisian rekaman (record/struct), penamaan ulang alias, pembatasan rentang (subrange), dan enumerasi (enum), algoritma yang dirancang menjadi jauh lebih terstruktur, modular, dan memiliki integritas tipe yang kuat.