ไม่ได้เขียนเรื่อง Visual Basic มานานแล้ว เอาซะหน่อย เรื่องมันเริ่มจาก ผมไปเจอบทความนึงในบล็อกเกี่ยวกับ VB ที่ชื่อ @ Head ของ Bill เข้า ซึ่งคนเขียนเขาพบว่า Live Search API ที่ MS เพิ่งปล่อยออกมานั้น มีทั้ง Code Sample ของ Java, PHP, Python, Ruby ... และ C# แต่ไม่มี VB .. ทำไมล่ะเนี่ย!!?
หากย้อนกลับไปดูก็จะพบว่า "ของ" หลาย ๆ อย่างที่ MS ปล่อยออกมา เช่น XNA Game Studio (ใช้ได้แต่ VC#2005 Express ถ้านับเฉพาะ Express Edition นะ), .NET Micro Framework นั่น ก็ไม่สนับสนุน VB .. และยังมี SDK อีกมากมายที่ไม่มีโค้ดตัวอย่างของ VB อยู่ด้วย
จริง ๆ ตั้งแต่สมัยก่อนแล้ว ที่ VB มักจะถูกมองอย่างต้อยต่ำ ตั้งแต่นู่น DirectX SDK (ผมทันสมัย 6 - 7 กะ 8 ตอนนี้เลิกแตะ) ที่ C++ มีโค้ดตัวอย่างมากกว่า และทำอะไร ๆ ได้มากกว่า
แต่นี่มันยุค .NET แล้ว ถึงแม้จะยังไม่ได้เทียบชั้น C++ แต่ VB ก็ถูกเข็นขึ้นมาระดับเดียวกับ C# ชาว VB ก็ตายใจคิดว่า "ตูรอดจากภาวะลูกเมียน้อยแล้วววว" แต่สุดท้าย... ถ้าไปดูดี ๆ โค้ดตัวอย่างของ VB ที่อยู่ใน MSDN (นับจากหมวด Sample ตรง ๆ นะ ไม่นับไอ้ที่แทรกอยู่ตามที่ต่าง ๆ ) มันต่างจาก C# โดยสิ้นเชิง ของ VB เป็นโค้ดใช้งานทั่ว ๆ ไป (มีเกมด้วย!) แต่ C# โค้ดตัวอย่างจะเป็นพวกเน้นคุณสมบัติทางภาษามากกว่า (ใน VS 2008 Express โค้ดตัวอย่างของ VB มีมากกว่า C# นะ อ้าว งี้แสดงว่าเมียน้อยได้ค่าเลี้ยงดูมากกว่าสินะ) และ โค้ดตัวอย่างที่แทรกอยู่ตามเอกสารนั้น บางอย่างก็มีให้เฉพาะ C# (ส่วนใหญ่เป็นเรื่องยากโคตร ๆ) .. เห็นได้ชัดว่า ต่างระดับกันชัดเจน
ในโลกกว้าง... C# ถูกมองเป็นลูกเมียหลวงที่ใคร ๆ ก็ชื่นชม ทำให้มีโค้ดตัวอย่างและบทความมากมาย แต่ลูกเมียเก็บแบบ VB กลับมีคนสนใจน้อยกว่า 10 เท่า (ประมาณแบบชุ่ย ๆ) แต่.. VB ก็มีเอกสารและโค้ดตัวอย่างแบบเอาไปใช้งานได้จริง (ไม่ใช่เอาไปสอบ!!) ติดมากับมันพอสมควรแล้ว ไหนจะ Code Snippet ที่ช่วยเราได้มากมาย และ MS เองก็มีบล็อกเกี่ยวกับ VB ที่อัพเดตค่อนข้างบ่อย (ไอ้บรรดาบล็อก C# ที่ผม Add ไว้ทำไมมันไม่ค่อยอัพเลยฟระ) กิจกรรมมีมากมาย สนุกสนานฮาเฮ (เมื่อต้นปีก็เห็นเพิ่งร้องเพลง VB กันไป) เออ... อบอุ่น
จะเห็นว่า แม้โลกกว้างไม่สนใจ แต่ลูกเมียน้อยอย่าง VB ก็ยืนด้วยลำแข้งตัวเอง และสู้ชีวิตต่อไปได้นะ ตัวพ่อเองก็ส่งอะไรมาสนับสนุนอยู่เป็นพัก ๆ แม้ไม่มากเท่าลูกเมียหลวงอย่าง C# ก็ตาม
ใช้ VB ก็จงมีความสุขแบบ VB กันเถอะ ตราบใดที่มันยังไม่ถูกประกาศตัดเยื่อใยแบบ Visual FoxPro (MS ประกาศว่าจะไม่ออก VFP เวอร์ชั่น 10 อีกต่อไปแล้ว) เราก็จงเขียนมันอย่างมีความสุขเถอะนะ ชาว VB !!
แถมท้าย :
- ไม่มี Code ตัวอย่าง? - ไปหัด C# ซะ!! เพื่อให้แปลงโค้ดมาใช้ใน VB ได้!!! (กลัวจะไปแล้วไปเลยน่ะสิ)
- XNA Game Studio ใช้ไม่ได้? - ลอง SDL.NET ดูสิ!! ง่ายกว่าจม! (แต่ทำข้อที่แล้วให้ได้ก่อน)
- .NET Micro Framework ล่ะ? - จะทำเครื่องอะไรเล่นล่ะนั่น? เฮ้ย ระดับนี้แล้ว ใช้ C# เหอะ!!
ลิ้งค์ที่เกี่ยวข้อง :
ป.ล. จากบทความนี้ ลืมอะไรไปรึเปล่า... C++ ไปอยู่ไหนซะล่ะ? (รายนี้หมาป่าเดียวดายไปแล้ว)
เมื่อวานขณะกำลังหาบทความใน Wikipedia ผมก็ไปเจอ DONKEY.BAS เข้าโดยบังเอิญ ว่าแต่.. ไอ้เจ้า DONKEY.BAS มันคืออะไรล่ะ? มันก็คือไฟล์บรรจุโค้ดโปรแกรมภาษา BASIC ไงล่ะ (ถึงได้มีนามสกุล .BAS) แล้วทำไมไฟล์เล็ก ๆ ธรรมดา ๆ แบบนี้ถึงได้น่าสนใจนักน่ะหรือ ก็เพราะมันเขียนโดย บิล เกตส์ ไงล่ะ!!
จริง ๆ แล้ว บิล เกตส์ ไม่ได้เขียนคนเดียวครับ แต่ร่วมมือกับ Neil Konzen พนักงานคนหนึ่งของไมโครซอฟต์ และที่มาของมันก็เกิดจากการที่ต้องแสดงให้ IBM รู้ว่าภาษา Basic ในเครื่อง IBM PC ทำอะไรได้บ้าง
แล้วมันเป็นโค้ดโปรแกรมอะไร? มันเป็นเกมครับ!!
ใช่แล้ว เกมหน้าตาเชย ๆ นี่แหล่ะครับ วิธีเล่นก็แค่หลบลาให้ได้ โดยกด Space Bar เพื่อเปลี่ยนเลน หากหลบได้รถก็จะแล่นไปด้านบนมากขึ้นทำให้มีเวลาหลบน้อยลง พอถึงระดับหนึ่งรถจะเด้งถอยกลับไปที่ระดับเดียวกับตอนเริ่ม แล้วเราก็จะได้ 1 คะแนน แต่ถ้าชนลาเข้า... รถจะแตกเป็นเสี่ยง ๆ แล้วลาก็ได้ 1 คะแนน..
ตัวเกมออกจะธรรมดา (สุด ๆ) ไปนิด แต่ที่น่าสนใจคือโปรแกรมนี้เขียนด้วยโค้ดภาษา Basic เพียงร้อยกว่าบรรทัดเท่านั้น โดยมีส่วนของการตรวจสอบชนิดของชิปกราฟิก (ว่ามีสีมั้ย) และกราฟิกทั้งหมดในเกมก็วาดด้วยโค้ดทั้งหมด (ไม่มีไปเปิดไฟล์ข้างนอกที่ไหนมาทั้งนั้น) และ... มันถูกเขียนในช่วงเวลาที่กดดันสุด ๆ (ตอนเช้าต้องโดน IBM ขังไว้ในห้องเล็ก ๆ ที่มีเครื่อง IBM PC ต้นแบบ และร้อนตับแลบ ) อ้อ เกมนี้มีเสียงด้วยนะครับ
สมัยนี้ถ้าจะพูดถึงการเริ่มต้นเขียนเกม บางทีเริ่มแรกก็หากันแล้ว ใครจะมาทำกราฟิก ใครจะแต่งเรื่อง ใครจะแต่งเพลง (จ้างนิเกะสิ) จะเอาเสียงมาจากไหน (นี่นิเกะก็อาจช่วยได้) บางทีหาไม่ได้ สุดท้ายก็ล้มเลิกไปหลายรายทีเดียวเชียว แต่แน่ล่ะ ถ้าจะให้ทำเกมเล็ก ๆ แบบ DONKEY.BAS สมัยนี้ คงไม่มีใครเขาเล่นกันแล้ว... จะจริงหรือ?
ผมเห็นเกมเล็ก ๆ ฮา ๆ (เช่นพวกที่แกล้งทำฉากโหด ๆ กวน ๆ แกล้งคนเล่น ล้อเกมดัง) ออกมามากมายจากต่างประเทศ (ส่วนใหญ่เป็นญี่ปุ่นน่ะนะ) ภาพก็ไม่ได้สวยอะไร เงินก็ไม่ได้แน่นอน แต่ก็มีคนเล่นนะ เผลอ ๆ ดังไปทั่วโลกด้วย
ยังมีมุมมองในการทำเกมอีกเยอะครับ ผมเองก็ชักจะ... อยากกลับไปทำซะแล้วสิ (แต่ขี้เกียจ
)
เก็บตก DONKEY.BAS :
- ข้อมูลทั้งหมดได้มาจาก DONKEY.BAS ใน Wikipedia
- ลองดู Source Code เล่น ๆ แต่รันได้จริงได้ที่ **หน้านี้** (มีไฟล์ที่คอมไพล์แล้วให้โหลดด้วย)
- ตอนหลังมีการพัฒนา Donkey.NET ซึ่งเป็นโค้ดตัวอย่างของ VB.NET Beta 2 แต่... ลองรันแล้วค้างตอน Loading...
(เวอร์ชั่นนี้เป็นเกม 3D แล้วนะ)
ป.ล. เอ็นทรี่นี้แก้หลายครั้งมาก... บางอย่างผมอาจตีความผิดก็ได้ (ภาษาอังกฤษไม่เข้มแข็งพอ
) ผิดพลาดประการใด ขออภัยมา ณ ที่นี้ด้วยครับ (ใครชี้แนะอะไรได้ ก็ชี้เลยครับ)
พรุ่งนี้เมื่อ 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 ต้องดูงดงามสะอาดตา
- ชอบทำอะไรด้วยตนเอง
- ชอบอะไรที่มันย่อ ๆ
- โดนบังคับเรียน
จบล่ะ (ดูเหมือนจะมีสาระ แต่ดันไม่มีแฮะ
)