Untuk sebagian besar tujuan, "string" adalah (digunakan / diperlakukan sebagai / dianggap / dianggap) unit atom yang bermakna , seperti halnya angka .
Bertanya mengapa karakter individu dari string tidak bisa berubah adalah seperti menanyakan mengapa bit individu dari integer tidak bisa berubah.
Anda harus tahu alasannya. Pikirkan saja itu.
Saya benci mengatakannya, tapi sayangnya kami memperdebatkan ini karena bahasa kami payah, dan kami mencoba menggunakan satu kata, string , untuk menggambarkan konsep atau kelas objek yang kompleks dan terletak secara kontekstual.
Kami melakukan perhitungan dan perbandingan dengan "string" yang mirip dengan yang kami lakukan dengan angka. Jika string (atau bilangan bulat) bisa berubah, kita harus menulis kode khusus untuk mengunci nilai-nilai mereka ke dalam formulir lokal yang tidak dapat diubah untuk melakukan segala jenis perhitungan dengan andal. Oleh karena itu, yang terbaik adalah memikirkan string seperti pengenal angka, tetapi alih-alih panjangnya 16, 32, atau 64 bit, panjangnya bisa ratusan bit.
Ketika seseorang mengatakan "string", kita semua memikirkan hal-hal yang berbeda. Mereka yang menganggapnya hanya sebagai seperangkat karakter, tanpa tujuan tertentu, tentu akan terkejut bahwa seseorang hanya memutuskan bahwa mereka seharusnya tidak dapat memanipulasi karakter tersebut. Tetapi kelas "string" bukan hanya array karakter. Ini STRING
, bukan char[]
. Ada beberapa asumsi dasar tentang konsep yang kita sebut sebagai "string", dan secara umum dapat digambarkan sebagai unit atom yang bermakna dari data kode seperti angka. Ketika orang berbicara tentang "memanipulasi string", mungkin mereka benar-benar berbicara tentang memanipulasi karakter untuk membangun string , dan StringBuilder sangat bagus untuk itu.
Pertimbangkan sejenak bagaimana rasanya jika string bisa berubah. Fungsi API berikut ini dapat diperdaya untuk mengembalikan informasi untuk pengguna yang berbeda jika string nama pengguna yang dapat diubah secara sengaja atau tidak sengaja diubah oleh utas lain ketika fungsi ini menggunakannya:
string GetPersonalInfo( string username, string password )
{
string stored_password = DBQuery.GetPasswordFor( username );
if (password == stored_password)
{
//another thread modifies the mutable 'username' string
return DBQuery.GetPersonalInfoFor( username );
}
}
Keamanan bukan hanya tentang 'kontrol akses', tetapi juga tentang 'keamanan' dan 'menjamin kebenaran'. Jika suatu metode tidak dapat dengan mudah ditulis dan diandalkan untuk melakukan perhitungan atau perbandingan sederhana dengan andal, maka tidak aman untuk menyebutnya, tetapi akan aman untuk mempertanyakan bahasa pemrograman itu sendiri.