อินพุต เอาต์พุต พื้นฐาน

16 September 2016

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการแสดงผลและการรับข้อมูลในภาษา Visual Basic

ในการเขียนโปรแกรม สิ่งที่สำคัญที่สุดคือการที่โปรแกรมสามารถติดต่อกับผู้ใช้ได้ ซึ่งโดยปกติจะมี 2 แบบ คือ การแสดงผล เป็นการแสดงผลลัพธ์ของโปรแกรมให้กับผู้ใช้ เช่น แสดงผลข้อความออกทางหน้าจอ และการรับค่า เป็นการนำข้อมูลจากผู้ใช้มาประมวลผลในโปรแกรม เช่น การรับค่าจากคีย์บอร์ด

การแสดงผลด้วยฟังก์ชัน Console.WriteLine()

การแสดงผลในภาษา Visual Basic เป็นการแสดงผลออกทาง Console เรามักจะเรียกว่าแสดงผลออกทางหน้าจอคอมพิวเตอร์ ฟังก์ชัน Console.WriteLine() ใช้สำหรับแสดงข้อความ ตัวเลข และค่าอื่น ฟังก์ชันนี้จะขึ้นบรรทัดใหม่ด้วยทุกครั้ง

Module Module1

    Sub Main()

        Console.WriteLine("Hello Visual Basic!")

        Dim name As String = "Mateo"
        Console.WriteLine("My name is {0}", name)

        Console.WriteLine("I was born in {0}, I play {1}", 1988, "Hockey")

    End Sub

End Module

ในตัวอย่างเราได้ใช้ฟังก์ชัน WriteLine() ในการแสดงผลข้อความออกทางหน้าจอ

Console.WriteLine("Hello Visual Basic!")

ในคำสั่งบรรทัดนี้ เป็นการแสดงผลข้อความด้วยโดยการใส่ข้อความเป็นอากิวเมนต์ในฟังก์ชัน ผลลัพธ์ทีไ่ด้จะเป็นการแสดงข้อความ "Hello Visual Basic!" ออกทางหน้าจอ

Console.WriteLine("My name is {0}", name)
...
Console.WriteLine("I was born in {0}, I play {1}", 1988, "Hockey")

ต่อมาเป็นการใช้ฟังก์ชัน WriteLine() ในรูปแบบของ string format โดยอากิวเมนต์ตัวแรกนั้นเป็นการจัดรูปแบบของข้อความที่ต้องการแสดงผล สำหรับเครื่องหมาย {0} และ {1} เป็นการแทนอากิวเมนต์ทั้งแต่ตัวที่สองเป็นต้นไปโดยนับเริ่มจาก 0 รูปแบบนี้เป็นรูปแบบที่ใช้ในกรณีที่ต้องการแสดงค่าจากตัวแปรและค่าคงที่ และในบทเรียนของเราจะใช้รูปแบบนี้เป็นหลัก

Hello Visual Basic!
My name is Mateo
I was born in 1988, I play Hockey

นี่เป็นผลลัพธ์ของโปรแกรม ซึ่งในการเรียกใช้ฟังก์ชันแต่ละครั้ง จะมีการแสดงบรรทัดใหม่ด้วยอัตโนมัติ

การแสดงผลด้วยฟังก์ชัน Console.Write()

ฟังก์ชัน Console.Write() เป็นฟังก์ชันที่ใช้แสดงผลเช่นเดียวกันกับฟังก์ชัน Console.WriteLine() แต่สิ่งที่แตกต่างกันคือฟังก์ชันนี้จะไม่ขึ้นบรรทัดใหม่ มาดูตัวอย่างการใช้งาน

Module Module1

    Sub Main()

        Console.Write("Line 1")
        Console.Write("Line 2")
        Console.Write("Line 3" & vbNewLine)
        Console.Write("Line 4")

    End Sub

End Module

ในตัวอย่าง เป็นการแสดงผลด้วยการใช้ฟังก์ชัน Console.Write() เพื่อแสดงข้อความ 4 ข้อความ ในบททัดที่สาม เราได้ใช้ค่าคงที่ vbNewLine ในภาษา Visual Basic สำหรับการแสดงขึ้นบรรทัดใหม่

Line 1Line 2Line 3
Line 4

และนี่เป็นผลลัพธ์ของโปรแกรม ข้อความสามบรรทัดแรกจะอยู่ในบรรทัดเดียวกัน Console.Write() เพราะว่าฟังก์ชันจะไม่ขึ้นบรรทัดใหม่ และเราใช้ vbNewLine สำหรับการขึ้นบรรทัดใหม่ในภาษา Visual Basic

การแสดงผลด้วยในรูปแบบของ String

ในการแสดงผลในภาษา Visual Basic คุณสามารถแสดงผลด้วยการต่อ string โดยไม่ต้องใช้การจัดรูปแบบ string ได้ การแสดงผลดังกล่าวเป็นการนำข้อความมาต่อกันด้วยตัวดำเนินการ string concatenation &

Dim number As Integer = 10
Console.WriteLine("Number is " & number)
Console.WriteLine("Number is {0}", number)

ในตัวอย่างด้านบน เป็นการแสดงผลโดยการต่อ string กับการแสดงผลโดยการจัดรูปแบบ string ซึ่งจะได้ผลลัพธ์เช่นเดียวกัน อย่างไรก็ตามในบทเรียนนี้ เราอาจจะใช้ควบคู่กันไปสำหรับทั้งสองแบบ

การรับค่าจากคีย์บอร์ด

การติอต่อกับผู้ใช้อีกแบบหนึ่งที่สำคัญคือการรับข้อมูลจากผู้ใช้ เราจะพูดถึงการรับข้อมูลโดยวิธีพื้นฐานคือ ทางคีย์บอร์ด การรับข้อมูลจากคัย์บอร์ดในภาษา Visual Basic มีฟังก์ชันต่างๆ ดังนี้

  • Console.Read() ใช้สำหรับอ่านตัวอักษรถัดไปจาก input steam
  • Console.ReadLine() ใช้สำหรับอ่านค่าเป็นบรรทัดจาก input steam
  • Console.ReadKey() ใช้สำหรับอ่านค่าจำนวนหนึ่งเมื่อคีย์บอร์ดถูกกดลง

การรับค่าด้วยฟังก์ชัน Console.ReadLine()

ฟังก์ชัน Console.ReadLine() ใช้สำหรับในการอ่าน input stream จากคีย์บอร์ดทีละบรรทัด โดยการอ่านข้อมูลจะสิ้นสุดด้วยการกดปุ่ม Enter ฟังก์ชันอ่านค่ามาเป็น String ในการที่จะอ่านค่าเป็นข้อมูลประเภทอื่นต้องใช้ฟังก์ชันในการแปลงข้อมูล มาดูตัวอย่าง

Module ConsoleReadLineEaxmple

    Sub Main()
        Dim name As String
        Dim age As Integer

        Console.Write("Enter your name: ")
        name = Console.ReadLine()

        Console.Write("Enter your age: ")
        age = CType(Console.ReadLine(), Integer)

        Console.WriteLine("Hello {0}, you was born in {1}.", name, Date.Today.Year- age)

    End Sub

End Module

ในตัวอย่าง เป็นโปรแกรมในการรับค่าจากคีย์บอร์ดด้วยฟังก์ชัน Console.ReadLine() โดยโปรแกรมจะรับค่าชื่อ และอายุของผู้ใช้ ในตอนแรกเป็นการประกาศตัวแปรสำหรับใช้ในการเก็บข้อมูล

Dim name As String
Dim age As Integer

เราได้ประกาศตัวแปร 2 ตัว คือ name สำหรับเก็บค่าของชื่อที่เป็น string และตัวแปร age สำหรับเก็บอายุแบบ Integer โดยตัวแปรเหล่านี้สำหรับเก็บค่าที่รับมาจากคีย์บอร์ด

name = Console.ReadLine()
...
age = CType(Console.ReadLine(), Integer)

ต่อมาเป็นการใช้ฟังก์ชัน Console.ReadLine() อ่านค่าจากคีย์บอร์ดไปเก็บไว้ในตัวแปร เนื่องจากฟังก์ชันอ่านค่ามาเป็น string เราใช้ฟังก์ชัน CType() ในการแปลงข้อมูล ในตัวอย่างแปลงข้อมูลเป็น Integer

Enter your name: Mateo
Enter your age: 28
Hello Mateo, you was born in 1988.

และนี่เป็นผลลัพธ์ของโปรแกรม โดยตัวหนาเป็นข้อมูลที่กรอกจากคีย์บอร์ด

การรับค่าในภาษา Visual Basic นั้นยังมีฟังก์ชันสำหรับรับค่าจำนวนหนึ่งค่า คือ ฟังก์ชัน Console.Read() และฟังก์ชัน Console.ReadKey()

การใช้ฟังก์ชัน Console.Read()

ฟังก์ชัน Console.Read() ใช้สำหรับรับค่าตัวอักษรต่อไปจากคีย์บอร์ด ซึ่งจะได้ค่าเป็น Integer ปกติแล้ว ตัวอักษรทุกตัวจะมีค่าคงที่ของมันในเลขฐาน 10 หรือ integer นั่นเอง

Module ConsoleReadExample

    Sub Main()

        Dim ch As Integer
        ch = Console.Read()
        Console.WriteLine("Integer value of " & Chr(34) & "{0}" & Chr(34) & " is {1}", ChrW(ch), ch)

    End Sub

End Module

ในตัวอย่าง เป็นโปรแกรมสำหรับอ่านค่าโดยใช้ฟังก์ชัน Console.Read()

ch = Console.Read()

คำสั่งนี้อ่านค่าเพียงแค่ 1 ตัวจากคีย์บอร์ด ไม่สำคัญว่าคุณจะกรอกข้อมูลลงมาเท่าไหร่ เพราะมันจะอ่านเพียงแค่ตัวเลข เราใส่ข้อมูลและกดปุ่ม Enter ฟังก์ชันจะอ่านข้อมูลมาใส่ใสตัวแปร ch เป็น integer

a
Integer value of "a" is 97

นี่เป็นตัวอย่างกในการรันโปรแกรม ในตอนแรกเป็นการใช้ฟังก์ชัน Console.Read() เราได้ใส่ค่า a และกดปุ่ม Enter และแสดงผลค่า Integer ของมัน และต่อมากดหมายเลข 8

การใช้ฟังก์ชัน Console.ReadKey()

ฟังก์ชัน Console.ReadKey() จะอ่านค่าหนึ่งตัวจากคีย์บอร์ดและส่งค่ากลับมาในทันที โดยค่าที่ฟังก์ชันส่งกลับมาจะเป็นออบเจ็คของคลาส ConsoleKeyInfo และเราสามารถเข้าถึงค่าของ key ได้ มาดูตัวอย่างการใช้งานฟังก์ชันทั้งสอง

ต่อไปมาดูตัวอย่างเพิ่มเติมเกี่ยวกับฟังก์ชัน Console.ReadKey() เราจะยกตัวอย่างกในการนำไปใช้พัฒนาเกม console โดยการตรวจจับการกดปุ่มจากคีย์บอร์ด และในขณะเดียวกันส่วนอื่นๆ ของโปรแกรมก็ยังทำงาน

Imports System.Threading

Module ConsoleReadKeyExample

    Sub Main()

        While True

            If Console.KeyAvailable Then

                Console.Write("Pressed ")
                Dim a As ConsoleKeyInfo = Console.ReadKey()
                Console.WriteLine("{0}, key name = {1}, keycode = {2}",
                                     a.KeyChar, a.Key, CDec(a.Key))

                If a.Key = 32 Then
                    Console.WriteLine("You jumped!")
                End If

                If a.Key = 13 Then
                    Console.WriteLine("You fired!")
                End If

                If a.Key = 27 Then
                    Console.WriteLine("Game Over")
                    Exit While
                End If

            End If

            Console.WriteLine("Game loop")
            Thread.Sleep(1000)
        End While

    End Sub

End Module

ในโค้ดของโปรแกรมเป็นการใช้ While loop เพื่อสร้างลูปของเกม โดยโปรแกรมจะทำงานโดยไม่มีที่สิ้นสุด โปรแกรมของเราจะทำงานโดยการหน่วงเวลาทุกๆ 1 วินาที ด้วยคำสั่ง Thread.Sleep(1000)

If Console.KeyAvailable Then
...

คำสั่งนี้ใช้สำหรับตรวจสอบการกดปุ่มจากคีย์บอร์ด เราเรียกว่า interrupt โปรแกรมจะทำงานในบล็อคคำสั่ง If เมื่อมีการกดปุ่มเท่านั้น ไม่เช่นนั้น มันยังคงสามารถทำงานภายใน While Loop ได้

Dim a As ConsoleKeyInfo = Console.ReadKey()
Console.WriteLine("{0}, key name = {1}, keycode = {2}",
                     a.KeyChar, a.Key, a.Key)

ตอ่มาเราอ่านข้อมูลมาเก็บไว้ในตัวแปร a ซึ่งเป็นออบเจ็ค เราเข้าถึงชื่อของ key ที่กดด้วย property a.KeyChar และรหัสด้วย a.Key

If a.Key = 32 Then
...
If a.Key = 13 Then
...
If a.Key = 27 Then
...

เรานำค่า keycode ของตัวอักษรที่เรากด มาเปรียบเทียบโดย 13 หมายถึงการกดปุ่ม Spacebar 13 หมายถึงการกดปุ่ม Enter และ 27 หมายถึงการกดปุ่ม Escape ภายใต้การทำงานของ interrupt นี้ โปรแกรมของเรายังสามารถแสดงข้อความ "Game loop" ออกทางหน้าจอ ซึ่งเป็นอิสระจากการกดปุ่มภายใน If Console.KeyAvailable

Game loop
Game loop
Game loop
Pressed   , key name = Spacebar, keycode = 32
You jumped!
Game loop
Game loop
Game loop
, key name = Enter, keycode = 13
You fired!
Game loop
Game loop
Pressed   , key name = Spacebar, keycode = 32
You jumped!
Game loop
Game loop
Pressed ←←, key name = Escape, keycode = 27
Game Over

และนี่เป็นตัวอย่างผลลัพธ์ของโปรแกรมในการกดปุ่ม Spacebar, Enter, Spacebar และ Escape ตามลำดับ ในขณะที่เราสามารถกดปุ่ม โปรแกรมก็สามารทำงานได้ โดยการกดปุ่มนั้นจะไม่รอให้สิ้นสุดจาก input buffer ซึ่งมันเป็นสิ่งที่ใช้ในการพัฒนาเกม console นั่นเอง

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับการรับค่าและการแสดงผลในภาษา Visual Basic โดยการใช้ฟังก์ประเภทต่างๆ เพื่อทำงานในรูปแบบที่แตกต่างกัน บางอย่างในบทนี้คุณอาจจะยังไม่เคยเห็น อย่างไรก็ตามคุณจะได้เรียนในบทถัดไป

บทความนี้เป็นประโยชน์หรือไม่?Yes·No