ความรู้ทั่วๆไปของการเขียน Visual Basic.NET2008
เรื่องทั่วไปเกี่ยวกับ String และ StringBuilder
Tags: VB, C#, Blog
มีคำถามเกี่ยวกับ StringBuilder ที่มีคนถามและมีคนตอบแล้ว
แต่จะขอเพิ่มให้เกิดความชัดเจนมากขึ้น ผมจึงเขียนความเข้าใจทั่วไปเรื่องนี้ขึ้นมา
เรื่องทั่วไปเกี่ยวกับ String และ StringBuilder
1. String เป็นคลาส แต่เราไม่ต้องใช้งานมันแบบคลาสทั่วไป เพราะ syntax ของภาษาต้องการให้เป็นเช่นนั้น เช่น
s = "apple"
จะเกิดการสร้างอ๊อบเจ็กต์ String หนึ่งอ๊อบเจ็กต์ โดยกำหนดค่าเป็นข้อความ "apple"
2. String เป็น immutable class คือเราไม่สามารถเปลี่ยนแปลงค่าของอ๊อบเจ็กต์ของคลาสดังกล่าวได้
หลังจากที่ได้สร้างไปแล้ว ดังนั้น
s = "apple"
s = s & "barney"
การกำหนดค่า "applebarney" ให้ตัวแปร s ไม่ใช่เป็นการเปลี่ยนแปลงค่าของอ๊อบเจ็กต์ s เดิม
(เพราะ immutable หรือ แก้ไขค่าไม่ได้) แต่จะเป็นการสร้างอ๊อบเจ็กต์ String ใหม่ ที่มีค่า "applebarney"
แล้วให้ตัวแปร s (object reference) ไปชี้หา ตอนนี้ อ๊อบเจ็กต์ String เดิม ("apple") กลายเป็นขยะไปแล้ว (garbage)
3. ทำนองเดียวกัน เช่น
s = "SELECT ProductName "
s = s & "FROM Products "
s = s & "WHERE CategoryId = 4"
จะเกิดการสร้างอ๊อบเจ็กต์ String 3 ครั้ง และขยะ 2 ก้อน
คิดดูสิครับว่า ถ้ามีการต่อข้อความหลายๆ statement อย่างนี้ จะเกิดขยะอ๊อบเจ็กต์มากสักเท่าใด
4. แต่ประโยคนี้ compiler ฉลาดพอที่จะต่อ string ให้เราเลยตอน compile
s = "SELECT ProductName " _
& " FROM Products " _
& " WHERE CategoryId = 4"
เป็น statement เดียว เกิดการสร้างอ๊อบเจ็กต์ String ทีเดียว
5. โค้ดอย่างข้อ 3 ถ้าเรามีการต่อข้อความ หลายๆ statement
เราใช้ StringBuilder ช่วยสร้าง string เช่นตัวอย่างนี้
Dim sb As New StringBuilder()
sb.Append("SAMPLE" & ControlChars.NewLine)
For n As Integer = 1 To 100
sb.AppendFormat("I'm line {0}.{1}", n, ControlChars.NewLine)
Next
Dim output As String
output = sb.ToString()
6. จะเห็นว่าเราใช้เมธอด ToString เพื่อเอาผลลัพธ์ที่ได้จากการ Append (ต่อ) ข้อความของ StringBuilder
มีข้อแนะนำว่า เมื่อใช้ ToString แล้ว ไม่ควรไป Append อีกเพื่อเอา ToString มาอีกเรื่อยๆ
เพราะก็จะเกิดขยะมากมายเช่นเดิมได้อีก ควรต่อให้เสร็จในครั้งเดียวให้จบ แล้วใช้ ToString เพื่อได้ผลลัพธ์นั้น
7. การต่อข้อความจำนวนไม่มาก ใช้ StringBuilder จะได้ผลแย่กว่า การใช้ & (หรือ + ใน c#)
วันพุธที่ 18 มีนาคม พ.ศ. 2552
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)

ไม่มีความคิดเห็น:
แสดงความคิดเห็น