By Arnon Puitrakul - 25 ธันวาคม 2014
เมื่อวานเราได้เรียนเรื่องของอะไรว่ะ ลืม... เดียวนะอ่อ Array กับ ArrayList ไปแล้ว วันนี้มาเปลี่ยนอารมณ์กันบ้าง (ตรงไหนว่ะ!!) วันนี้เราจะมาเรียนรู้ในเรื่องของ String กัน
String หรือในภาษาไทยอันสวยเก๊ว่า "สายอัขระ" สวยป่ะล่ะ สรุปสั้นเลยว่า String มันก็คือชุดของตัวอักษรนั้นแหละ แต่มันจะต่างจากภาษา C อยู่ จากในภาษา C String มันคือ Array ของ Char แต่ใน Java เราพัฒนาแล้วจร้า มันถูกบัญญัติลงไปเป็น Datatype แบบนึงเลยล่ะแกร์!! เจ๋งเวอร์!! ถามว่า แล้วเราจะประกาศมันยังไงล่ะ? ไม่ยาก
ถ้าเราจำเรื่องของการสร้าง Object ได้ (String 1 อันเราจะมองว่ามันเป็น Object ชิ้นหนึ่งเหมือนกัน)
String a = new String();
ก็ได้ หรือ เอาที่ง่ายกว่านั้นคือ
String a;
จบง่ายมั้ยล่าาา
การให้ค่ามันก็ไม่ยุ่งยากเหมือนใน C เพียงแค่บอกว่า (สมมุติผมประกาศ String a; ไปแล้วนะ)
a = “Hello World”;
ได้เลย ก็ยังไม่ยากอยู่ดี ทีนี้เมื่อตอนแรกผมบอกว่า String มันก็คือ Object ตัวนึงใช่ม่ะ
แปลว่ามันจะต้องมี Method ด้วยเหมือนกัน เรามาดู Method กันดีกว่า
ถามว่าแล้วเราจะสร้างมันขึ้นมาได้ยังไง
ก่อนหน้านั้น ขอให้มองมัน 2 ตัวนี้เป็น Class ตัวนึงก่อน เหมือนเดิม การสร้าง Object จาก Class
ในที่นี้ผมจะยกตัวอย่างแค่ StringBuffer พอนะ เพราะว่าการใช้มันเหมือนกันเลย (ส่วนความแตกต่างเดียวจะมาอธิบายข้างล่างนะ)
มาสร้างกันเลย สมมุติว่าผมจะสร้าง StringBuffer ชื่อ sb มาตัวนึง
StringBuffer sb = new StringBuffer();
[/code]
**Warning เราไม่สามารถ sb = “Hello”; ไม่ได้นะ มันจะ Error**
แค่นี้เองเราก็จะได้ StringBuffer ตัวนึงมาใช้แล้ว ทีนี้เรามาดู Method ของมันบ้าง
append() - อันนี้เราจะส่ง String แล้วเอาไปต่อข้างหลังสุด เช่น sb.append(“Hello World”); เพราะฉะนั้น StringBuffer ของเราจะมีคำว่า Hello World อยู่ด้านหลังสุด
insert() - คล้ายๆ append เมื่อกี้เลย แต่ append มันเอาไปต่อที่หลังสุด insert ก็เอาไปต่อเหมือนกัน แต่เราระบุตำแหน่งเองได้ เช่น sb.insert(0,”HI!!”); จากเมื่อกี้เรามีคำว่า Hello World อยู่แล้ว ถ้าเราอัก insert เมื่อกี้เข้าไปมันก็จะเป็น HI!!Hello World
delete() - ตามชื่อเลยคือการลบออก เช่น sb.delete(0,3); นั่นคือการ delete char ตั้งแต่ตำแหน่ง 0 ถึง 3 นั่นคือคำว่า HI!! เพราะฉะนั้น sb จะเหลือแค่คำว่า Hello World เหมือนเดิม
length() - ก็ตามชื่ออีกตามเคย เราจะได้จำนวนตัวอักษรของมันกลับมา เช่น sb.length(); ใน sb เรามี Hello World เพราะฉะนั้นค่าที่เราจะได้จาก Method length ก็คือ 11 นั่นเอง (รวม space ด้วยนะ)
อย่างที่ผมบอกไว้ตอนข้างบนว่า เดียวจะมาอธิบายความแตกต่างของ StringBuilder กับ StringBuffer
จริงๆแล้วมันทั้ง 2 นั้นต่างกันเพียงเล็กน้อยเท่านั้น
ต่างกันในเรื่องของ Thread S****ynchronization ซึ่งผมว่ามันลึกไปในระดับเบื้องต้นจึงไม่ขอพูดถึงในที่นี้
เอาง่ายๆถ้าอยาก Play Safe ให้ใช้ StringBuffer
แต่ถ้าอยากไวใน String ใหญ่ๆยาวๆ (รู้นะคิดอะไรกัน) ให้ใช้ StringBuilder
จบแล้ว สำหรับเรื่อง String ตอนนี้น่าจะมาได้สักครึ่งทางของ Java 101 แล้ว สู้ๆๆ
Source Code
**String : ** https://drive.google.com/folderview?id=0BwrPA9Miv4o2RUFsbzVNT1Q3YXc&usp=sharing
** StringBuilder & StringBuffer : ** https://drive.google.com/folderview?id=0BwrPA9Miv4o2RlB0YUFCcUN0b0k&usp=sharing
สำหรับคนที่ใช้ Synology NAS บางรุ่นจะมีช่อง M.2 สำหรับเสียบ NVMe SSD โดยพื้นฐาน Synology บอกว่ามันสำหรับการทำ Cache แต่ถ้าเราต้องการเอามันมาทำเป็น Storage ละ มันจะทำได้มั้ย วันนี้เราจะมาเล่าวิธีการทำกัน...
หลังจากที่เรามาเล่าเรื่อง malloc() มีคนอยากให้มาเล่าเรื่อง pthread เพื่อให้สามารถยัด Content ที่ละเอียด และเข้าใจง่ายในเวลาที่ไม่นานเกินไป เลยจะมาเล่าพื้นฐานที่สำคัญของคำ 3 คำคือ Multiprogramming, Multitasking, Multiprocessing และ Multithreading...
ใน Synology NAS มีความสามารถนึงที่น่าสนใจคือ การใช้ SSD เป็น Cache สำหรับระบบ ที่ทำให้ Performance ในการอ่านเขียน เร็วขึ้นกว่าเดิมมาก ๆ แน่นอนว่า เราลองละ วันนี้เราจะมาเล่าให้อ่านกันว่า หากใครคิดที่จะทำ มันเหมาะ หรือ ไม่เหมาะกับการใช้งานของเรา...
เรื่องราวเกิดจากการที่เราต้องย้าย Add-on Package ใน DSM และคิดว่าหลาย ๆ คนน่าจะต้องประสบเรื่องราวคล้าย ๆ กัน วันนี้เราจะมาเล่าวิธีการว่า เราทำยังไง เจอปัญหาอะไร และ แก้ปัญหาอย่างไรให้ได้อ่านกัน...