Tipe di C++ bisa tumbuh panjang: std::vector<std::string>, unsigned long long, atau kombinasi container yang muncul berulang di banyak fungsi. Menulis nama panjang yang sama di sepuluh tempat membuat kode berat dibaca dan rawan salah ketik. Type alias menyelesaikan masalah tersebut dengan memberi nama baru yang setara dengan tipe aslinya. Pada Chapter ini kita membuat alias dengan using, membandingkannya dengan typedef yang lama, dan melihat kapan alias benar-benar menguntungkan.
Membuat Alias dengan using #
Deklarasi alias berbentuk using nama_baru = tipe_asal;. Setelah deklarasi tersebut, nama_baru dapat dipakai di semua tempat yang mengharuskan tipe_asal, dan compiler memperlakukan keduanya sebagai tipe yang sama persis — alias tidak menciptakan tipe baru, hanya nama baru.
#include <iostream>
#include <string>
#include <vector>
using DaftarNama = std::vector<std::string>;
using PasanganNilai = std::pair<std::string, int>;
void cetakDaftar(const DaftarNama& daftar) {
for (const std::string& nama : daftar) {
std::cout << "- " << nama << "\n";
}
}
int main() {
DaftarNama peserta = {"Budi", "Siti", "Dewi"};
PasanganNilai skor = {"Budi", 92};
cetakDaftar(peserta);
std::cout << "Skor " << skor.first << ": " << skor.second << "\n";
return 0;
}Output yang Dihasilkan:
- Budi
- Siti
- Dewi
Skor Budi: 92Mari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 5 (
using DaftarNama = std::vector<std::string>;): compiler mencatat bahwaDaftarNamaadalah nama lain untukstd::vector<std::string>. Deklarasi ini tidak mengalokasikan apa pun karena alias hanya entri nama pada saat kompilasi. - Baris 6 (
using PasanganNilai = std::pair<std::string, int>;): alias kedua menyingkat pasangan nilai yang mencampur string dan integer. - Baris 8-13 (
void cetakDaftar(const DaftarNama& daftar)): parameter fungsi memakai alias sehingga tanda tangan fungsi terbaca sebagai “daftar nama”, bukan sebagai template container yang panjang. - Baris 16-17: dua variabel dideklarasikan lewat alias. Jika suatu saat kita mengganti tipe menjadi
std::deque<std::string>, cukup satu baris alias yang berubah.
Perhatikan bahwa cetakDaftar(peserta) menerima variabel bertipe alias tanpa konversi apa pun. Bila kita menulis tipe asalnya di pemanggilan fungsi lain, compiler tetap menganggap keduanya identik karena alias dan tipe asal adalah satu tipe yang sama.
typedef: Bentuk Lama yang Masih Ditemui #
Sebelum C++11, satu-satunya cara membuat alias adalah kata kunci typedef. Sintaksnya terasa terbalik: nama alias diletakkan di tengah deklarasi, bukan di sisi kiri tanda sama dengan.
typedef unsigned long long UkuranBesar; // gaya lama
using UkuranBesar2 = unsigned long long; // gaya modern, maknanya sama
typedef int Matriks[3][3]; // typedef pada array terasa rumit
using Matriks2 = int[3][3]; // versi using lebih mudah dibaca
Kedua bentuk di atas menghasilkan alias yang identik di mata compiler. Perbedaannya terletak pada keterbacaan dan kemampuan: using membaca dari kiri ke kanan seperti deklarasi variabel biasa, dan hanya using yang dapat dibuat generik sebagai alias template. Kode C++ modern memakai using; typedef masih perlu kita pahami karena banyak header lama dan pustaka pihak ketiga masih menulisnya.
Kapan Alias Menguntungkan #
Alias paling berguna ketika satu tipe muncul berulang di banyak tempat atau ketika nama tipe membawa maksud domain. Beberapa pola yang umum ditemui:
- Menyingkat tipe bertingkat:
std::map<std::string, std::vector<int>>menjadiKamusNilaisehingga deklarasi parameter dan return type tidak menggeser pandangan. - Memberi makna domain: alias
TahunLahiruntukinttidak mengubah perilaku, tetapi membuat tanda tangan fungsi terdokumentasi sendiri. - Menyembunyikan detail platform: header standar mendefinisikan
std::size_tsebagai alias ke tipe unsigned yang ukurannya bergantung platform, sehingga kode kita tetap portabel. - Menandai niat perubahan: ketika tipe internal proyek diganti, cukup definisi alias yang disunting dan seluruh penggunaannya ikut berubah pada kompilasi berikutnya.
Alias juga bisa dibuat generik dengan template — template <typename T> using Set = std::set<T>; — sehingga satu alias melayani banyak tipe. Pembahasan lengkapnya menunggu kita memasuki Section Generic Programming dan Templates, tetapi bentuk dasarnya pantas diingat sejak sekarang.
Referensi resmi untuk deklarasi alias dapat dibaca pada halaman type alias
di cppreference. Dengan alias di tangan, chapter berikutnya membahas sizeof dan <limits> untuk menanyakan ukuran serta batas setiap tipe secara langsung kepada compiler.