Apa perbedaan dapat diubah versus tidak dapat diubah?

Komputer laptop di meja dengan kode biner pada layar

Penyusun

Gregg Lindemulder

Staff Writer

IBM Think

Annie Badman

Staff Writer

IBM Think

Apa itu dapat diubah versus tidak dapat diubah?

Dapat diubah versus tidak dapat diubah menggambarkan apakah sistem, infrastruktur, atau data dapat diubah setelah pembuatan. Sumber daya yang dapat diubah dapat dimodifikasi di tempatnya. Sumber daya yang tidak dapat diubah tidak dapat diubah—modifikasi apa pun akan membuat instans baru.

Dapat diubah versus tidak dapat diubah adalah prinsip yang mendorong pendekatan modern pada pengembangan perangkat lunak dan manajemen infrastruktur.

Perbedaannya dapat dibandingkan dengan menulis teks di papan tulis. Jika Anda dapat menambahkan kata, menghapus bagian, atau mengubah apa yang tertulis, itu seperti sumber daya yang dapat diubah. Tetapi, jika papan tulis disegel di bawah kaca saat Anda selesai dan Anda harus menggunakan papan tulis baru untuk menulis sesuatu yang lain, itu adalah sumber daya yang tidak dapat diubah.

Meskipun konsep ini berlaku secara luas di seluruh komputasi, ini paling sering ditemui dalam pemrograman. Dalam pemrograman, memahami jenis data mana yang dapat dimodifikasi secara langsung versus kapan salinan baru harus dibuat sangat penting untuk berbagai tugas umum. Tugas ini termasuk menulis algoritma, membangun antarmuka pemrograman aplikasi (API), dan merancang kelas dalam pemrograman berorientasi objek (OOP).

Pilihan untuk menggunakan objek yang dapat diubah atau tidak dapat diubah memengaruhi bagaimana data dikelola dalam memori, seberapa aman data tersebut dapat dibagikan atau diubah, dan apakah ada efek samping tidak diinginkan yang mungkin terjadi. Inilah alasan mengapa dapat diubah versus tidak dapat diubah adalah konsep dasar bagi programer pemula maupun berpengalaman.

Misalnya, dalam bahasa pemrograman Python, daftar dan kamus adalah jenis yang dapat diubah. Item dapat ditambahkan, dihapus, atau dimodifikasi dalam objek tersebut. Sebaliknya, objek seperti boolean (nilai benar atau salah) atau tuple—kumpulan yang diurutkan seperti (1,2,3)—adalah tipe yang tidak dapat diubah. Isinya tidak dapat diubah atau dikonversi tanpa membuat objek yang sama sekali baru.

Berita teknologi terbaru, didukung oleh insight dari pakar

Tetap terinformasi tentang tren industri yang paling penting—dan menarik—tentang AI, otomatisasi, data, dan di luarnya dengan buletin Think. Lihat Pernyataan Privasi IBM®.

Terima kasih! Anda telah berlangganan.

Langganan Anda akan disediakan dalam bahasa Inggris. Anda akan menemukan tautan berhenti berlangganan di setiap buletin. Anda dapat mengelola langganan atau berhenti berlangganan di sini. Lihat Pernyataan Privasi IBM® kami untuk informasi lebih lanjut.

Memilih jenis yang dapat diubah versus yang tidak dapat diubah

Memilih antara data yang dapat diubah dan tidak dapat diubah umumnya bergantung pada tiga faktor utama: apakah data perlu sering diperbarui, dibagikan di seluruh utas, atau memerlukan riwayat versi. 

Jenis yang dapat diubah: penggunaan dan manfaat

Jenis yang dapat diubah umumnya bekerja paling baik ketika data perlu sering diperbarui dan beberapa bagian program memodifikasi objek yang sama.

Pembaruan yang efisien

Objek yang dapat berubah memodifikasi data di tempat, mengurangi penggunaan memori dengan menghindari kebutuhan untuk membuat objek baru. Hal ini dapat menurunkan penggunaan prosesor untuk pengumpulan sampah—proses menghapus data yang tidak digunakan untuk mengosongkan memori—karena lebih sedikit objek sementara yang perlu dibuat dan dikumpulkan.

Sebagai contoh, keranjang belanja di aplikasi menggunakan daftar yang dapat diubah untuk menambah atau menghapus item secara langsung tanpa membuat objek baru untuk setiap perubahan.

Kinerja lebih cepat 

Jenis yang dapat berubah bekerja lebih baik dengan data yang sering berubah—seperti daftar yang terus bertambah atau penghitung real-time—karena jenis ini memperbarui objek yang sudah ada alih-alih membuat objek baru. Efisiensi ini mempercepat operasi dalam struktur data yang bergantung pada modifikasi cepat.

Misalnya, daftar putar aplikasi musik dapat menggunakan daftar yang dapat diubah untuk membuat pembaruan cepat. Hal ini dapat dilakukan dalam hitungan mikrodetik ketika sebuah lagu ditambahkan atau dihapus, dibandingkan dengan membuat ulang 1.000 daftar putar lagu untuk setiap perubahan.

Status bersama 

Objek yang dapat diubah memungkinkan beberapa bagian dari program mengakses dan mengubah objek yang sama. Proses ini memungkinkan mereka untuk bekerja dengan status bersama—data yang dibaca dan ditulis oleh beberapa komponen untuk mengoordinasikan tindakan mereka. Hal ini berguna ketika komponen perlu berkoordinasi atau berkomunikasi melalui data umum.

Misalnya, aplikasi manajemen proyek menggunakan objek yang dapat diubah untuk berbagi daftar tugas, kalender, dan notifikasi. Ketika satu anggota tim memperbarui tugas, semua orang langsung melihat perubahan tersebut.

Jenis yang tidak dapat diubah: penggunaan dan manfaat

Jenis yang tidak dapat diubah biasanya bekerja paling baik ketika data tidak boleh berubah setelah pembuatannya. Ini sangat penting dalam aplikasi dengan konkurensi, di mana beberapa bagian program mengakses data yang sama.

Prediktabilitas

Karena status objek yang tidak dapat diubah adalah tetap, status ini tidak akan diubah oleh kode lain. Fitur ini membuat program lebih mudah diprediksi dan lebih mudah dipahami karena menghilangkan bug yang terkait dengan perubahan tidak terduga.

Misalnya, aplikasi perbankan sering menyimpan catatan transaksi sebagai objek yang tidak dapat diubah sehingga tidak ada kode yang dapat mengubahnya pada lain waktu. Hal ini sangat penting untuk membantu memastikan kepatuhan terhadap peraturan dan menjaga jejak audit yang membuktikan bahwa transaksi tidak dirusak.

Keamanan utas

Objek yang tidak dapat diubah umumnya merupakan utas yang aman karena statusnya tidak dapat berubah setelah pembuatan. Beberapa utas dapat dengan aman membacanya secara bersamaan tanpa konflik, meskipun pengembang masih perlu mengelola referensi dengan hati-hati dalam sistem yang dijalankan bersamaan. Hal ini membuatnya ideal untuk program dengan banyak utas, di mana beberapa utas harus mengakses data yang sama tanpa menyebabkan konflik.

Misalnya, aplikasi cuaca dapat menjalankan utas bersamaan untuk kondisi saat ini, prakiraan, dan peringatan. Menyimpan data cuaca sebagai objek yang tidak dapat diubah berarti setiap utas dapat membaca informasi yang sama tanpa risiko perubahan yang tidak terduga.

Debug yang lebih mudah

Objek yang tidak dapat diubah dapat menyederhanakan debug karena nilai tidak berubah secara tak terduga selama eksekusi program. Fitur ini dapat mengurangi bug yang disebabkan oleh efek samping dan membantu tim menyelesaikan masalah lebih cepat.

Misalnya, video game sering menyimpan kesehatan dan statistik untuk pemain sebagai objek yang tidak dapat diubah. Karena semua nilai ini tidak dapat berubah secara tidak terduga, pengembang dapat dengan mudah melacak bug karena mengetahui bahwa kode yang tidak terkait tidak akan mengubah statistik.

Mixture of Experts | 12 Desember, episode 85

Decoding AI: Rangkuman Berita Mingguan

Bergabunglah dengan panel insinyur, peneliti, pemimpin produk, dan sosok kelas dunia lainnya selagi mereka mengupas tuntas tentang AI untuk menghadirkan berita dan insight terbaru seputar AI.

Pendekatan pemrograman pada jenis dapat diubah versus tidak dapat diubah

Dua gaya pemrograman yang paling banyak digunakan—pemrograman berorientasi objek (OOP) dan pemrograman fungsional—memiliki pendekatan berbeda terhadap mutabilitas ini.

OOP sering merangkul mutabilitas, membangun program di sekitar objek yang menyimpan data dan perilaku. Semua objek ini dapat berubah seiring waktu dengan menggunakan fungsi khusus yang disebut pengatur, yang dapat memperbarui nilai properti (misalnya, mengubah usia seseorang atau harga produk).

Sebaliknya, pemrograman fungsional condong ke arah imutabilitas. Ini menciptakan dan menghasilkan nilai baru setiap kali ada sesuatu yang perlu diubah, membuat program lebih dapat diprediksi dan lebih mudah diuji.

Bahasa pemrograman juga bervariasi dalam pendekatannya terhadap jenis yang dapat diubah versus yang tidak dapat diubah.

Python

Di Python, jenis yang bisa berubah dan tidak bisa diubah adalah hal yang umum.

Salah satu contohnya adalah string — urutan karakter seperti nama atau kalimat. String dalam Python tidak dapat diubah. Menambahkan teks baru akan membuat objek string baru. Sebaliknya, daftar dapat diubah. Kumpulan yang diurutkan ini dapat diulang—Anda dapat menambahkan, menghapus, atau memodifikasi item dalam objek daftar.

Alih-alih menggunakan compiler (program yang mengubah kode menjadi bahasa mesin sebelum eksekusi) untuk memeriksa kode sebelum dijalankan, Python memeriksa jenis pada waktu berjalan. Ini berarti bahwa kesalahan hanya tertangkap saat program sedang berjalan. Kesalahan yang melibatkan mutabilitas—seperti mencoba memodifikasi string yang tidak dapat diubah— memicu TypeError.

Jika tidak ditangani, kesalahan akan langsung menghentikan program sehingga mencegah kode berjalan lebih lanjut. Prosedur ini memungkinkan pengembangan yang lebih cepat tetapi membutuhkan perhatian yang cermat untuk penanganan jenis.

Memahami mutabilitas dalam Python membantu mencegah kesalahan saat berbagi data antara fungsi atau bekerja dalam modul bersama. Tutorial dan contoh kode di GitHub memberikan praktik terbaik untuk menggunakan jenis bawaan Python.

JavaScript

JavaScript menggunakan jenis dapat diubah dan tidak dapat diubah. Seperti Python, string juga tidak dapat diubah. Namun, tidak seperti Python, semua objek bisa diubah secara default.

Sintaksis JavaScript yang fleksibel mendukung gaya berorientasi pada objek dan fungsional, sehingga pengembang dapat mengelola mutabilitas sesuai kebutuhan.

Java

Mirip dengan Python, string Java tidak dapat diubah. Setelah dibuat, nilai string tidak dapat diubah. Karakteristik ini bisa tidak efisien untuk program yang sering membangun atau memodifikasi teks.

Untuk mengatasi masalah ini, Java menyediakan StringBuilder—kelas string dapat diubah yang memungkinkan teks dimodifikasi secara langsung tanpa membuat objek baru. Ini dapat meningkatkan kinerja dan mengurangi penggunaan memori, menyeimbangkan keamanan yang tidak dapat diubah dengan manfaat kinerja yang dapat diubah.

C++

C++ menggunakan kata kunci const untuk menandai variabel, fungsi, dan bahkan seluruh objek sebagai hanya baca. Ini dapat memberikan pengembang kontrol terperinci atas mutabilitas, secara efektif mengubah objek yang dapat berubah menjadi objek yang tidak dapat berubah dengan mencegah perubahan.

Seperti Java, string C++ dapat diubah atau tidak dapat diubah, tergantung pada implementasinya.

C++ mendukung gaya pemrograman berorientasi objek dan fungsional. Dalam gaya OOP, pengembang memodifikasi objek yang ada dari waktu ke waktu, sementara pemrograman fungsional menciptakan nilai baru alih-alih mengubah data yang ada. 

Dapat diubah versus tidak dapat diubah di luar pemrograman

Prinsip mutabilitas versus imutabilitas tidak hanya diterapkan pada pemrograman, tapi meluas hingga ke infrastruktur dan sistem. Insinyur perangkat lunak modern menerapkan konsep yang sama saat merancang arsitektur cloud dan alur penerapan.

Infrastruktur dapat diubah

Infrastruktur dapat diubah mengacu pada server atau sumber daya TI lainnya yang dapat diubah setelah penerapan. Misalnya, Anda mungkin masuk ke server dan memperbarui perangkat lunak secara manual, mengubah konfigurasi, atau menginstal tambalan. Meskipun menawarkan fleksibilitas, pendekatan ini dapat menyebabkan penyimpangan konfigurasi di mana server menjadi "kepingan salju" yang unik dan perubahannya menjadi tidak mungkin dilacak atau direproduksi.

Infrastruktur tidak dapat diubah

Infrastruktur tidak dapat diubah berarti bahwa server atau sumber daya TI tidak dapat diubah setelah penerapan. Alih-alih memperbarui sistem yang sedang berjalan, tim menerapkan instans baru dengan perubahan bawaan, lalu menghentikan instans lama. Pendekatan ini mengurangi penyimpangan konfigurasi, menyederhanakan pengembalian, dan membantu memastikan penerapan yang konsisten.

Aplikasi lainnya

Prinsip mutabilitas dan imutabilitas juga dapat diterapkan pada bidang lain perangkat lunak dan desain sistem.

Basis Data

Beberapa basis data menggunakan log khusus lampiran, yang berarti setiap perubahan dicatat secara permanen dan tidak dapat diubah. Basis data lainnya dapat berubah, memungkinkan pembaruan atau penghapusan data secara langsung, seperti mengedit dokumen.

Penyimpanan cloud

Sistem penyimpanan cloud tertentu dapat dikonfigurasikan sebagai penyimpanan yang tidak dapat diubah untuk menyimpan versi sebelumnya dan menguncinya dari perubahan. Ini membantu melindungi data agar tidak diubah atau dihapus secara tidak sengaja. Penyimpanan yang dapat diubah memungkinkan file untuk diedit atau diganti kapan saja.

Sistem kontrol versi

Banyak alat kontrol versi, seperti Git, mengikuti model yang tidak dapat diubah, di mana setiap komitmen disimpan sebagai cuplikan terpisah dan tidak dapat diubah. Ini membantu memastikan riwayat versi yang andal, bahkan ketika perubahan baru ditambahkan.