Programming

ไม่ได้เขียนเรื่อง 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++ ไปอยู่ไหนซะล่ะ? (รายนี้หมาป่าเดียวดายไปแล้ว)

DONKEY.BAS ..ไฟล์ในตำนาน

posted on 29 Feb 2008 08:38 by ninkungz  in Programming

เมื่อวานขณะกำลังหาบทความใน Wikipedia ผมก็ไปเจอ DONKEY.BAS เข้าโดยบังเอิญ ว่าแต่.. ไอ้เจ้า DONKEY.BAS มันคืออะไรล่ะ? มันก็คือไฟล์บรรจุโค้ดโปรแกรมภาษา BASIC ไงล่ะ (ถึงได้มีนามสกุล .BAS) แล้วทำไมไฟล์เล็ก ๆ ธรรมดา ๆ แบบนี้ถึงได้น่าสนใจนักน่ะหรือ ก็เพราะมันเขียนโดย บิล เกตส์ ไงล่ะ!!

จริง ๆ แล้ว บิล เกตส์ ไม่ได้เขียนคนเดียวครับ แต่ร่วมมือกับ Neil Konzen พนักงานคนหนึ่งของไมโครซอฟต์ และที่มาของมันก็เกิดจากการที่ต้องแสดงให้ IBM รู้ว่าภาษา Basic ในเครื่อง IBM PC ทำอะไรได้บ้าง

แล้วมันเป็นโค้ดโปรแกรมอะไร? มันเป็นเกมครับ!!

มีถนน มีรถ มีลา
ดูภาพแบบเคลื่อนไหวได้ที่ Coding Horror

ใช่แล้ว เกมหน้าตาเชย ๆ นี่แหล่ะครับ วิธีเล่นก็แค่หลบลาให้ได้ โดยกด 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 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 ต้องดูงดงามสะอาดตา
  • ชอบทำอะไรด้วยตนเอง
  • ชอบอะไรที่มันย่อ ๆ
  • โดนบังคับเรียน

จบล่ะ (ดูเหมือนจะมีสาระ แต่ดันไม่มีแฮะ
)

NinkungZ View my profile


Favourites


View My Stats