Dalam pengaturcaraan komputer, **pemboleh ubah** merujuk kepada lokasi storan abstrak yang dipasangkan dengan nama simbolik yang berkaitan, yang mengandungi beberapa kuantiti maklumat yang diketahui atau tidak yang dirujuk sebagai *nilai*; atau dalam istilah yang lebih mudah, pemboleh ubah ialah bekas bernama bagi set bit atau jenis data tertentu (seperti integer, *float*, rentetan, dll.). Pemboleh ubah akhirnya boleh dikaitkan dengan atau dikenal pasti oleh alamat memori. Nama pemboleh ubah ialah cara biasa untuk merujuk nilai yang disimpan, selain merujuk kepada pemboleh ubah itu sendiri, bergantung pada konteks. Pemisahan nama dan kandungan ini membolehkan nama itu digunakan secara bebas daripada maklumat tepat yang diwakilinya. Pengecam dalam kod sumber komputer boleh terikat pada nilai semasa masa larian, dan nilai pemboleh ubah mungkin berubah semasa pelaksanaan atur cara.

Pemboleh ubah dalam pengaturcaraan mungkin tidak sepadan secara langsung dengan konsep pemboleh ubah dalam matematik. Pemboleh ubah matematik adalah abstrak, dan tidak merujuk kepada objek fizikal seperti lokasi penyimpanan. Nilai pemboleh ubah pengkomputeran tidak semestinya sebahagian daripada persamaan atau formula seperti dalam matematik. Pemboleh ubah dalam pengaturcaraan komputer selalunya diberi nama yang panjang untuk menjadikannya secara relatifnya menerangkan penggunaannya, manakala pemboleh ubah matematik selalunya mempunyai nama yang ringkas, yakni satu atau dua aksara sebagai ringkasan dalam transkripsi dan manipulasi.

Lokasi storan pemboleh ubah mungkin dirujuk oleh beberapa pengecam yang berbeza, situasi yang dikenali sebagai *aliasing*. Menetapkan nilai kepada pemboleh ubah menggunakan salah satu pengecam akan mengubah nilai yang boleh diakses melalui pengecam lain.

Penyusun perlu menggantikan nama simbolik pemboleh ubah dengan lokasi sebenar data. Walaupun nama, jenis dan lokasi pemboleh ubah biasanya kekal tetap, data yang disimpan di lokasi mungkin ditukar semasa pelaksanaan program.

Tindakan pada pemboleh ubah
---------------------------

Dalam bahasa pengaturcaraan imperatif, nilai umumnya boleh diakses atau diubah pada bila-bila masa. Dalam bahasa fungsian dan logik tulen, pemboleh ubah terikat pada ungkapan dan mengekalkan satu nilai sepanjang hayatnya oleh kerana keperluan ketelusan rujukan. Dalam bahasa imperatif, tingkah laku yang sama ditunjukkan oleh pemalar bernama (pemalar simbolik), yang biasanya berbeza dengan pembolehubah normal.

Bergantung pada sistem jenis bahasa pengaturcaraan, pemboleh ubah mungkin hanya boleh menyimpan jenis data tertentu (cth. integer atau rentetan). Sebagai alternatif, jenis data mungkin hanya dikaitkan dengan nilai semasa, membenarkan pemboleh ubah tunggal untuk menyimpan apa-apa jenis data yang disokong bahasa pengaturcaraan.

Jenis data
----------

Dalam bahasa yang ditaip statik seperti Go atau ML, pemboleh ubah juga mempunyai *jenis*, bermakna hanya jenis nilai tertentu boleh disimpan di dalamnya. Sebagai contoh, pemboleh ubah jenis "integer" tidak boleh menyimpan nilai teks.

Dalam bahasa yang ditaip dinamik seperti Python, jenis pemboleh ubah disimpulkan oleh nilainya, dan boleh berubah mengikut nilainya. Dalam Common Lisp, kedua-dua situasi wujud serentak: Pemboleh ubah diberi jenis (jika tidak diisytiharkan, ia diandaikan sebagai `T`, supertaip sejagat) yang wujud pada masa penyusunan. Nilai juga mempunyai jenis, yang boleh disemak dan ditanya pada masa larian kod.

Tatanama pemboleh ubah
----------------------

Tidak seperti pemboleh ubah matematik, pemboleh ubah dan pemalar pengaturcaraan biasanya mengambil nama panjang, contohnya `COST` atau `total`. Nama aksara tunggal lazim digunakan hanya bagi pemboleh ubah tambahan; contohnya, `i`, `j`, `k` untuk pemboleh ubah indeks arai.

Beberapa tatanama dikuatkuasakan pada peringkat bahasa sebagai sebahagian daripada sintaks bahasa yang melibatkan format pengecam yang sah. Dalam hampir semua bahasa, nama pembolehubah tidak boleh bermula dengan angka (0–9) dan tidak boleh mengandungi aksara ruang kosong. Sama ada tanda baca dibenarkan atau tidak dalam nama pembolehubah berbeza dari bahasa ke bahasa; banyak bahasa hanya membenarkan garis bawah ("\_") dalam nama pemboleh ubah dan melarang semua tanda baca lain. Dalam sesetengah bahasa pengaturcaraan, sigil (simbol atau tanda baca) dilekatkan pada pengecam pemboleh ubah untuk menunjukkan jenis data atau skop pemboleh ubah.

Kepekaan huruf bagi nama pemboleh ubah juga berbeza antara bahasa dan sesetengah bahasa memerlukan penggunaan kes tertentu dalam menamakan entiti tertentu; Kebanyakan bahasa moden adalah sensitif huruf besar-kecil, dan beberapa bahasa yang lebih tua tidak. Sesetengah bahasa menyimpan bentuk nama pemboleh ubah tertentu bagi kegunaan dalaman sendiri; dalam banyak bahasa, nama yang bermula dengan dua garis bawah ("\_\_") selalunya termasuk dalam kategori ini.

Walau bagaimanapun, di luar sekatan asas yang dikenakan bahasa, penamaan pemboleh ubah sebahagian besarnya adalah soal gaya tulisan. Pada peringkat kod mesin, nama pemboleh ubah tidak digunakan, jadi nama tepat yang dipilih tidak penting kepada komputer. Oleh itu, nama pemboleh ubah bertindak sebagai pengecama, dan selebihnya ia hanyalah cara bagi pengatur cara untuk menjadikan kod mereka lebih mudah untuk ditulis dan difahami. Penggunaan nama pemboleh ubah yang buruk boleh menjadikan kod lebih sukar untuk disemak daripada nama bukan deskriptif, jadi nama yang jelas sering digalakkan.

Pengatur cara sering mencipta dan mematuhi garis panduan gaya kod yang menawarkan panduan tentang penamaan pemboleh ubah atau mengenakan tatanama yang tepat. Nama yang lebih pendek lebih pantas untuk ditaip tetapi kurang deskriptif; nama yang lebih panjang selalunya menjadikan program lebih mudah dibaca dan tujuan pemboleh ubah lebih mudah difahami. Walau bagaimanapun, nama yang keterlaluan juga boleh menyebabkan kod sukar difahami.

Rujukan
-------

1. ↑  *Compilers: Principles, Techniques, and Tools*, m/s. 26–28
2. ↑  Knuth, Donald (1997). *The Art of Computer Programming*. **1** (ed. 3rd). Reading, Massachusetts: Addison-Wesley. m/s. 3–4. ISBN 0-201-89683-4.
3. ↑  "Programming with variables". *Khan Academy*. Dicapai pada 23 March 2020.
4. ↑  "Scratch for Budding Coders". Harvard. Dicapai pada 23 March 2020.
5. ↑  How Not To Pick Variables, Retrieved July 11, 2012 [DEAD LINK]
6. ↑  Edsger Dijkstra, *To hell with "meaningful identifiers"!*