ครบ 1 ปี จาก Visual Basic ไป C#
posted on 30 Nov 2007 12:33 by ninkungz in Programming
พรุ่งนี้เมื่อ 1 ปีที่แล้ว (งงมั้ย?) เป็นวันที่ผมโหลด Visual C# (แน่ล่ะ Express Edition) มาลองเขียนโปรแกรมเล่น จะเป็นอย่างไรถ้าคนที่เขียน ภาษา Basic มาทั้งชีวิต ต้องก้าวเข้าสู่โลกของปีกกา (จริง ๆ ก็ลองก้าวไปบ้างแล้วสมัยเรียน ไหนจะ PHP กะ Action Script อีก) ต่อไปนี้คือประสบการณ์ที่จะเอามาบอกเล่ากัน ซึ่งอาจจะเป็นประโยชน์กับบางคนที่ไม่รู้จะเล่น Visual Basic หรือ C# ดี (มันคือ Visual Basic vs. C# แบบนึงว่างั้นเถอะ)
เรื่องวุ่น ๆ ของเซมิโคล่อนและวงเล็บ
แน่ล่ะ Visual Basic มันใช้เซมิโคล่อน (;) กะเขาที่ไหนกัน ใครย้ายจาก VB ไป C# (หรือภาษาอื่น ๆ ที่คล้าย ๆ กัน) ย่อมจะลืมเซมิโคล่อนเป็นกิจวัตร กินเวลานานโขกว่าจะชิน (ตอนนี้ชินแล้ว) อีกตัวที่ลืมบ่อยไม่แพ้กันคือวงเล็บครับ วงเล็บเปิดปิดต่อท้าย Method นั่นแล ปกติ VB มันไม่ค่อยสนใจครับว่าจะมีไอ้วงเล็บนี่มั้ย บางครั้งยังเติมให้เราเองซะอีกแน่ะ แต่ C# ไม่ยอมครับ แถมเวลาลืมยังไม่ยอมบอก ต้องให้รอลุ้นตอนรันนู้น เฮ้อ~
นี่หรือคือ for
คำสั่ง For ของ Basic เป็นอะไรที่ดูครั้งแรกก็ยังเข้าใจ
For i = 1 to 10
--- บลา ๆ ๆ --
Next
แต่พอมา C# ...
for (int i = 1; i <= 5; i++)
{
--- บลา ๆ ๆ --;
}
จริง ๆ ไม่ได้เห็นครั้งแรกที่ C# หรอก เห็นครั้งแรกที่ภาษา C เลย แน่นอนว่าแว้บแรกเป็นงง ต่อมาไม่นานก็เข้าใจ แต่พอทิ้งไปก็ลืมอีก มันไม่ปิ๊งแล้วรู้เรื่องเลยแบบ for ของ VB แฮะ และไอ้ตรงส่วนที่ใช้ประกาศเงื่อนไข (ไอ้ i <= 5 นั่นน่ะ) มันเป็นบั๊กได้บ่อย ๆ (เป็นโรคไม่ถูกกับเครื่องหมายมากกว่าน้อยกว่า) ผมล่ะกลัวจริง ๆ (แล้วภาษาอื่น ๆ อีกมากมายก็ดันใช้ for แบบนี้ด้วย)
การแปลงชนิดข้อมูลอันแสนเข้มงวด
ไม่ใช่ว่าไม่มีนะครับ จริง ๆ การแปลงชนิดข้อมูลนี่ VB มีมาตั้งแต่ก่อนยุค .NET แล้ว แต่ก็ไม่ได้เข้มงวดอะไร ซ้ำยังมีตัวแปรชนิด Variant ที่ปลอมตัวเป็นข้อมูลชนิดไหนก็ได้มาอำนวยความ(มักง่าย)สะดวกอีกต่างหาก ซึ่งไอ้เรื่องแบบนี้ C# ไม่ยอมง่าย ๆ ครับ แค่แปลงจาก Char Array ไปเป็น String ยังไม่ง่ายเลย ดังนี้..
VB
ตัวแปรString = ตัวแปรCharArray 'ก็จบแล้ว
C#
string ตัวแปร = new string(ตัวแปรCharArray); //ต้องสร้าง string ใหม่จาก CharArray ตรงนั้นเลย
ที่เห็นนี่ VB ตั้ง Option strict เป็น on แล้วนะครับ หรือพูดง่าย ๆ คือให้เข้มงวดกับการแปลงชนิดข้อมูลมากขึ้นน่ะล่ะ ซึ่งพอตั้งให้เข้มงวดขึ้นแล้ว VB ยังอุตส่าห์มีตัวช่วย (ดังภาพ)
จะเห็นว่า VB บอกวิธีแปลงชนิดข้อมูลให้เห็นกันจะ ๆ ในขณะที่ C# แค่บอกว่า "เฮ้ย ทำแบบนี้ไม่ได้นะ" แต่ไม่บอกว่าต้องทำยังไง

วิถีแบบเดิม ๆ ใช้ไม่ได้ใน C#
วันหนึ่ง ผมเปิด C# เพื่อจะลองเขียนเกมเล็ก ๆ เล่นดู ซึ่งหัวใจของเกมเล็ก ๆ ก็คือการสุ่มตัวเลขครับ ซึ่งคนที่โตมากับ Basic อย่างผมรู้ดีว่าต้องใช้ฟังก์ชั่น Rnd น่ะสิ แบบนี้
Dim value As Integer = CInt(Int((6 * Rnd()) + 1))
ก็แก้โค้ดให้เป็นสไตล์ C# แล้วรันดู....ไม่ผ่าน! เพราะว่า C# มันไม่มี!! (Rnd เป็นมรดกตกทอดเฉพาะภาษา Basic สินะ) ไปค้น ๆ ดูก็พบว่า C# มันใช้ของใหม่แสนสะดวกอย่าง Class Random ซึ่งใช้ง่ายซะ แบบนี้
Random rndNum = new Random();
int Result;
Result = rndNum.Next(ค่าต่ำสุด,ค่าสูงสุด);
ไม่ต้องจำสูตรมากมายแบบภาษา Basic แล้ว!! (แน่นอนว่า VB ก็ใช้ได้) นอกจากนี้หลาย ๆ อย่างที่ VB รับมรดกมาก็ใช้ใน C# ไม่ได้อีกมากมาย แต่ขี้เกียจกล่าวถึง
เอกสารที่โคตรลำเอียง

และถ้าดูหัวข้อ Reference (Visual Basic) ใน MSDN Express จะพบว่ามีการสรุปทุกสิ่งทุกอย่างเอาไว้อย่างครบถ้วน ไม่ว่าจะเป็น คีย์เวิร์ด ฟังก์ชั่น ชนิดข้อมูล ค่าคงที่ เป็นต้น เรียกได้ว่าสรุปทุกสิ่งทุกอย่างไว้ในนี้ล่ะ แต่ใน C# Reference จะมีแต่คีย์เวิร์ด โอเปอเรเตอร์ และ คอมไพเลอร์ออพชั่นของตัวเอง ไม่พบอะไรพวกนี้อยู่เลย ทั้ง ๆ ที่บางอย่าง C# ก็ใช้ได้เหมือนกัน คงคิดว่าไปหาเอาจาก .NET Framework Reference แทนก็ได้มั้ง (ก็ C# มันเป็นแก่นแท้ของ .NET นี่นา)
สรุปเลยดีกว่า...
ใช้ VB เถอะ ถ้า...
- ชอบสีฟ้า
- ไม่สนใจว่า Code จะหน้าตาน่าเกลียดแค่ไหน (ล้นไปนอกจอก็ช่างมัน)
- ขี้ลืม (เอกสารมันรวบรวมมาให้ค้นทวนความจำได้ง่าย ๆ)
- ชอบเครื่องอำนวยความสะดวก (มีมากมายทั้งในส่วนของภาษา และ IDE)
- ไม่คิดมาก (ไม่ได้หมายความว่าสิ้นคิดนะ
)
ใช้ C# ไปเลย หากว่า...
- ชอบสีเขียว
- Code ต้องดูงดงามสะอาดตา
- ชอบทำอะไรด้วยตนเอง
- ชอบอะไรที่มันย่อ ๆ
- โดนบังคับเรียน
จบล่ะ (ดูเหมือนจะมีสาระ แต่ดันไม่มีแฮะ
)
ไหนจะนินคุงตัวที่เป็นสัญลักษณ์ Programming อีก


#1 By นิเกะ on 2007-11-30 13:41