Tanda kurung siku membuat kode array di beberapa bahasa terlihat seolah dapat diterjemahkan langsung. Di Rust, [10, 20, 30] dapat menjadi array berukuran tetap dengan panjang sebagai bagian dari tipe. Di Python, bentuk yang hampir sama menghasilkan list yang mutable. PHP memakai sintaks bracket untuk ordered map, sedangkan JavaScript membuat object Array yang dapat berubah ukuran.

Sintaksnya mudah diingat. Perbedaan yang lebih penting adalah arti dari nilai tersebut setelah dibuat.

Bahasa Sintaks umum Model ukuran Sequence growable yang umum
Go [3]int{10, 20, 30} Panjang array tetap dan menjadi bagian tipe slice []int
PHP [10, 20, 30] Dinamis PHP array
JavaScript [10, 20, 30] Dinamis Array
Kotlin arrayOf(10, 20, 30) Array berukuran tetap MutableList
Rust [10, 20, 30] Panjang array tetap dan menjadi bagian tipe Vec<T>
Python [10, 20, 30] Dinamis list

Go memisahkan array dan slice

Go memiliki array dan slice sebagai dua konsep yang berbeda, dan perbedaannya terlihat langsung pada tipe.

Array berukuran tetap menyertakan panjangnya:

values := [3]int{10, 20, 30}

Tipe values adalah [3]int. Tipe [3]int berbeda dari [4]int meskipun keduanya berisi elemen int.

Slice tidak menuliskan panjang:

values := []int{10, 20, 30}
values = append(values, 40)

Tipenya adalah []int. Slice merupakan descriptor atas underlying array dengan length dan capacity. append dapat memakai kembali underlying array yang sama atau mengalokasikan array baru ketika capacity tidak mencukupi.

Karena itu, padanan Go yang umum untuk growable array adalah slice, bukan array.

Indexing tetap memakai bracket:

first := values[0]
values[1] = 99

Array dan slice Go bersifat homogen: seluruh elemen memiliki element type yang sama.

Array PHP sebenarnya ordered map

PHP memakai tanda kurung siku untuk tipe array:

$values = [10, 20, 30];
$values[] = 40;

Bentuk ini tampak seperti dynamic array biasa, tetapi PHP mendefinisikan array sebagai ordered map. Key dapat berupa integer atau string.

Nilai berurutan otomatis mendapat integer key:

$values = [
    0 => 10,
    1 => 20,
    2 => 30,
];

Tipe yang sama juga dapat digunakan sebagai key-value map:

$user = [
    'name' => 'Mira',
    'age' => 28,
];

Fleksibilitas ini khas model data PHP. Satu tipe array dapat dipakai sebagai list, dictionary, stack, queue, atau bentuk collection lain tanpa berpindah ke built-in container berbeda.

Akses elemen tetap menggunakan bracket:

echo $values[0];
echo $user['name'];

PHP array juga dapat menyimpan nilai dengan tipe berbeda di dalam array yang sama.

Array JavaScript adalah object yang dapat berubah ukuran

Literal array JavaScript memakai tanda kurung siku:

const values = [10, 20, 30];
values.push(40);

Array adalah object yang dapat berubah ukuran, memiliki elemen berindeks integer dan property length. Elemennya tidak harus mempunyai satu runtime type yang sama:

const mixed = [10, "twenty", true];

Array JavaScript bukan associative array. Property string arbitrer memang dapat ditambahkan ke object, tetapi property tersebut bukan array index dan tidak mengikuti perilaku indexed element.

Mutasi memakai indexing biasa:

const values = [10, 20, 30];

values[1] = 99;

console.log(values[0]);
console.log(values.length);

Array juga dapat bersifat sparse. Assignment ke index yang jauh dapat meningkatkan length sambil meninggalkan index di antaranya kosong.

Hal ini membuat Array JavaScript lebih dinamis dibanding array berukuran tetap di Go, Kotlin, dan Rust.

Array Kotlin memiliki ukuran tetap

Kotlin membuat generic object array dengan arrayOf():

val values = arrayOf(10, 20, 30)

values[1] = 99
println(values[0])

Isi array dapat diubah, tetapi jumlah slot tetap setelah array dibuat. Menambahkan elemen keempat berarti membuat array lain.

Kotlin juga menyediakan primitive array khusus:

val integers = intArrayOf(10, 20, 30)
val doubles = doubleArrayOf(1.5, 2.5, 3.5)

Tipe ini menghindari penggunaan boxed primitive object pada representasi array.

Untuk collection yang dapat bertambah dan berkurang, Kotlin biasanya memakai mutable collection:

val values = mutableListOf(10, 20, 30)

values.add(40)
values.removeAt(0)

Jadi Array<T> lebih dekat dengan container berukuran tetap, sedangkan MutableList<T> merupakan padanan yang lebih langsung untuk sequence aplikasi yang biasanya dapat bertambah.

Rust memasukkan panjang ke dalam tipe array

Tipe array Rust memiliki bentuk [T; N], dengan T sebagai element type dan N sebagai panjang:

let values: [i32; 3] = [10, 20, 30];

Compiler biasanya dapat melakukan inferensi tipe:

let values = [10, 20, 30];

Nilai yang diulang dapat memakai bentuk repetition:

let zeros = [0; 8];

Kode tersebut menghasilkan array berisi delapan nilai nol.

Array Rust memiliki panjang tetap. Collection kontigu yang dapat bertambah adalah Vec<T>:

let mut values = vec![10, 20, 30];

values.push(40);
values[1] = 99;

Seperti array Rust, Vec<T> bersifat homogen. Setiap elemen harus memiliki tipe T yang sama.

Perbedaan [T; N] dan Vec<T> memiliki konsekuensi semantik. Yang pertama membawa panjang di dalam tipe, sedangkan yang kedua membawa runtime length dan capacity serta dapat melakukan realokasi ketika bertambah.

Sintaks bracket Python menghasilkan list

Sintaks bracket yang umum di Python menghasilkan list:

values = [10, 20, 30]

values.append(40)
values[1] = 99

List adalah mutable sequence dan dapat bertambah atau berkurang setelah dibuat:

values = [10, 20, 30]

values.append(40)
values.insert(1, 15)
values.pop()

Python tidak mengharuskan seluruh elemen list memiliki runtime type yang sama:

mixed = [10, "twenty", True]

Hal itu valid meskipun banyak program sengaja menjaga isi list tetap homogen secara konseptual.

Python juga memiliki representasi sequence lain seperti tuple, array.array, bytes, bytearray, serta numerical array dari library pihak ketiga. Namun ketika kode Python biasa menulis [a, b, c], hasilnya adalah list, bukan tipe array berukuran tetap.

Sintaks yang mirip tidak berarti perilakunya setara

Ekspresi berikut terlihat sangat berdekatan:

Go          [3]int{10, 20, 30}
PHP         [10, 20, 30]
JavaScript  [10, 20, 30]
Kotlin      arrayOf(10, 20, 30)
Rust        [10, 20, 30]
Python      [10, 20, 30]

Kontraknya berbeda.

Go dan Rust memiliki tipe array berukuran tetap dengan panjang yang menjadi bagian dari tipe. Array Kotlin juga fixed-size, meskipun panjangnya tidak ditulis sebagai bagian dari nama generic type. Array JavaScript dan list Python merupakan sequence mutable yang dapat bertambah. Array PHP melangkah lebih jauh dengan menggabungkan perilaku ordered sequence dan key bergaya map.

Perbedaan tersebut memengaruhi function signature, copying, equality, memory layout, perilaku append, dan interoperability. Karena itu, translasi sintaks secara langsung dapat mempertahankan nilai yang tampak sama sambil mengubah semantik struktur datanya.

Saat memindahkan kode antarbahasa, pertanyaan yang berguna bukan hanya “bagaimana menulis array?”. Yang perlu dipertahankan adalah kontraknya: apakah nilainya fixed-size, growable, homogen, dapat diakses dengan key, kontigu, atau sekadar berurutan. Tipe tujuan yang tepat mengikuti kebutuhan tersebut.