This blog has moved to http://ikhwanhayat.net

Thursday, August 25, 2005

Gunakanlah StringBuilder Utk Menyambung String

Satu entry bertajuk Never fail an interview question about System.String or StringBuilder again !!!! di blog Sahil Malik ni mengingatkan aku pasal teknik menyambung string dlm .NET. String data is usually stored in System.String object. Biasalah tu. Dan bila nak sambung dua string (append or concatenate) biasanya kita pakai symbol "+" seperti ini:

string foo = "Mahukah awak " + "minum saya?";
Tapi, mengikut blog entry tersebut (dan juga banyak artikel lagi yg dah aku baca dulu), System.String ni special sikit, ia adalah object tapi dia tak bersifat dgn sifat2 reference type (dlm .NET ada 2 jenis type; value dan reference). Ia adalah "immutable object". Bila assignment dilakukan (umpukan, tanda "="), biasanya pembolehubah reference type sebelah kiri akan copy the reference dari sebelah kanan (copy "memory address", mcm pointer la utk org2 C/C++). Tapi object String ni special sikit, dia akan make a whole copy of the original object, not just the reference. Ini bermaksud, ada new object instantiation, ada extra memory allocation dah berlaku. Instead of appending the "minum saya" string onto the "Mahukah awak " string, it will allocate a new string and put into it the combination of both. And again make a new copy of the new string and put it in the variable foo. Alamak, ter"speaking" pulak, susah la nak terang dlm BM :) Object instantiation will cost some overhead, jadi tak berapa bagus la buat selalu. Tapi kalau setakat dua string tak kisah sgt. Bila byk string yg ingin disambung, dan dibuat berulang2 maka jadi lembab la sikit code kita.
string bar = "Sejak saya " + "jumpa awak, " +
                "tidur " + "tak lena, " +
                "makan " + "tak kenyang.";
Kalau dah pjg mcm ni, tentu byk new string object yg dicipta. Cara yg lebih baik ialah menggunakan System.Text.StringBuilder. Code di atas boleh ditulis sebagai:
StringBuilder sb = new StringBuilder("Sejak saya ");
sb.Append("jumpa awak, ");
sb.Append("tidur ");
sb.Append("tak lena, ");
sb.Append("makan ");
sb.Append("tak kenyang.");

//utk tukar pada System.String
string foobar = sb.ToString();
StringBuilder object di instantiate sekali shj, string2 lain akan di append pada object tadi. Panjang la sikit, tapi takpe lah bersusah2 sedikit demi performance ye dak. Pelik kan String dlm .NET ni? Tapi sebenarnya dibuat begini utk memudahkan user jugak. Boleh anggap String mcm value type biasa. Ini khususnya memudahkan seperti dlm isu "shallow copy" versus "deep copy". p.s: Alamak, ingat nak tulis pendek je, jadi pjg pulak. Took some office hour for this, sorry ye boss :P

13 Comments:

At 8/25/2005 11:16:00 am, Anonymous Anonymous said...

This comment has been removed by a blog administrator.

 
At 8/25/2005 11:18:00 am, Blogger Ikhwan Hayat said...

oooh i hate spams..

 
At 8/25/2005 11:19:00 am, Anonymous Anonymous said...

This comment has been removed by a blog administrator.

 
At 8/25/2005 11:21:00 am, Blogger Ikhwan Hayat said...

siyut, baru delete satu dah dtg spam lain!

 
At 8/25/2005 11:29:00 am, Anonymous Anonymous said...

This comment has been removed by a blog administrator.

 
At 8/25/2005 11:34:00 am, Anonymous Anonymous said...

This comment has been removed by a blog administrator.

 
At 8/25/2005 11:34:00 am, Anonymous Anonymous said...

This comment has been removed by a blog administrator.

 
At 8/25/2005 11:37:00 am, Anonymous Anonymous said...

This comment has been removed by a blog administrator.

 
At 8/25/2005 11:44:00 am, Anonymous Anonymous said...

This comment has been removed by a blog administrator.

 
At 8/25/2005 01:56:00 pm, Blogger kitchenkidscoffee said...

'oooh i hate spams.. '

sblm buka aku ingatkn ramai gak respon isu string ko ni. isu jgk rupanya string ni ye(kataku dlm hati). rupa2nya, spam daaa.. :D

 
At 8/25/2005 02:34:00 pm, Blogger Ikhwan Hayat said...

whuhu.. byknya spam.. apahal2 tiba2 kena comment spam mcm ni plak..

 
At 8/27/2005 02:43:00 pm, Blogger darry said...

StringBuilder dgn String? Function tu macam Java gak, tp Java pakai StringBuffer, semua syntax sama.

Java pakai method StringBuffer.append(String string)

 
At 8/28/2005 10:16:00 pm, Blogger Ikhwan Hayat said...

Oho, String dlm Java pun immutable jugak ke? (aku tak berapa paham apa sebenarnya 'mutable' nih). Classes dlm .NET mmg byk yg sama dgn Java..

Java: StringBuffer and StringBuilder

 

Post a Comment

<< Home