Function Procedures

28 September 2016

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

การใช้ฟังก์ชันและโพซีเยอร์นั้นมีประโยชน์มากสำหรับการเขียนโปรแกรม มันเป็นการนำโค้ดเดิมกลับมาใช้ใหม่ การปกปิดข้อมูล และช่วยให้เราสามารถแบ่งโค้ดออกเป็นส่วนย่อยๆ รวมทั้งช่วยให้การจัดการและแก้ไขโค้ดได้ง่าย

การสร้าง Procedures

โพซีเยอร์ คือฟังก์ชันที่ไม่มีการส่งค่ากลับมายังส่วนที่เรียกใช้ ในการประกาศโพซีเยอร์ในภาษา Visual Basic เราใช้คำสั่ง Sub และสิ้นสุดบล็อคของโพซีเยอร์ด้วยคำสั่ง End Sub ภายในบล็อคของคำสั่งประกอบด้วยคำสั่งของโปรแกรมที่เราต้องการให้ทำงาน

Module ProceduresExample

    Sub Main()

        ShowMessage()

    End Sub

    Sub ShowMessage()
        Console.WriteLine("Hello World!")
    End Sub

End Module

ในตัวอย่าง เราได้สร้างโพซีเยอร์ ShowMessage() โค้ดภายในบล็อคของโพซีเยอร์นั้นเป็นส่วนการทำงานของมัน ซึ่งจะแสดงข้อความออทางหน้าจอ

ShowMessage()

ภายในฟังก์ชัน Main() เราได้เรียกใช้โพซีเยอร์ด้วยคำสั่ง ShowMessage() คุณจะสังเกตว่าทั้งสองนั้นเป็นโพซีเยอร์เช่นเดียวกัน

Hello World!

และนี่เป็นผลลัพธ์ของโปรแกรมในการเรียกใช้โพซีเยอร์

Info: ส่วนมากเรามักจะเรียกทั้งฟังก์ชันและโพซีเยอร์ว่าฟังก์ชัน เพื่อความรวดเร็วและเข้าใจง่ายในการเขียนโปรแกรม

การสร้าง Function

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

Module FunctionExample

    Sub Main()

        Dim name As String

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

        Console.WriteLine("Hello {0}", name)

    End Sub

    Function GetName() As String
        Dim s As String = Console.ReadLine()
        Return s
    End Function

End Module

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

Function GetName() As String
    Dim s As String = Console.ReadLine()
    Return s
End Function

นี่เป็นส่วนในการประกาศฟังก์ชันที่มีชื่อว่า GetName() โดยการประกาศฟังก์ชันนั้นจะใช้คำสั่ง Function และสิ้นสุดบล็อคของฟังก์ชันด้วย End Function สำหรับฟังก์ชันนั้นจะมีการส่งค่ากลับ เราต้องกำหนดว่าจะส่งค่ากลับเป็นข้อมูลแบบไหน คำสั่ง As String หลังจากชื่อของฟังก์ชัน บอกว่าฟังก์ชันนี้จะส่งค่ากลับเป็น String และเราใช้คำสั่ง Return สำหรับส่งค่ากลับไป

name = GetName()

ในฟังก์ชัน Main() เราเรียกใช้ฟังก์ชันเหมือนกับโพซีเยอร์ แต่สำหรับฟังก์ชันจะต้องนำตัวแปรมารับค่าที่ส่งกลับมาจากฟังก์ชัน ซึ่งต้องเป็นตัวแปรประเภทเดียวกันกับที่เรากำหนดไว้ในการส่งค่ากลับของฟังก์ชัน

Enter your name: Daniel
Hello Daniel

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

พารามิเตอร์และอากิวเมนต์ของฟังก์ชัน

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

Module FunctionParameterExample

    Sub Main()

        Hello("Sam")

        Dim x, y As Integer
        x = 5
        y = 3
        Console.WriteLine("5 + 3 = {0}", Sum(x, y))
        Console.WriteLine("10 + 23 = {0}", Sum(10, 23))

    End Sub

    Sub Hello(ByVal name As String)
        Console.WriteLine("Hello " & name)
    End Sub

    Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer
        Dim c As Integer = a + b
        Return c
    End Function

End Module

ในตัวอย่าง เราได้สร้างโพซีเยอร์ Hello() สำหรับแสดงข้อความทักทาย และฟังก์ชัน Sum() ในการหาผลรวมของตัวเลขและส่งค่ากลับ

Sub Hello(ByVal name As String)
    Console.WriteLine("Hello " & name)
End Sub

นี่เป็นการสร้างโพซีเยอร์ Hello() โดยมีพารามิเตอร์หนึ่งตัว เราใช้คำสั่ง ByVal ตามด้วยชื่อและประเภทข้อมูลสำหรับใช้ในโพซีเยอร์ ถ้าหากมีพารามิเตอร์มากกว่า 1 ตัว คุณสามารถคั่นด้วยเครื่องหมาย comma ได้

Hello("Sam")

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

Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer
    Dim c As Integer = a + b
    Return c
End Function

ตัวไปเราสร้างฟังก์ชัน Sum() ที่มีพารามิเตอร์สองตัวเป็น Integer โดยฟังก์ชันจะนำเลขทั้งสองบวกกันและส่งค่ากลับ เราได้เรียกใช้ฟังก์ชันในคำสั่ง Sum(x, y) และ Sum(10, 23) ซึ่งส่งอากิวเมนต์ Integer สองตัวเข้าไปยังฟังก์ชัน

Hello Sam
5 + 3 = 8
10 + 23 = 33

นี่เป็นผลลัพธ์ของโปรแกรม การใช้งานฟังก์ชันพารามิเตอร์

การใช้งานฟังก์ชันกับอาเรย์

คุณสามารถส่งอาเรย์เข้าไปในฟังก์ชันได้เช่นเดียวกันกับตัวแปร และการส่งค่าอาเรย์กลับด้วยคำสั่ง Return ต่อไปมาดูตัวอย่างการใช้งานอาเรย์กับฟังก์ชัน

Module FunctionWithArray

    Sub Main()

        Dim numbers = New Integer() {1, 2, 3, 5, 8, 9, 10, 13, 15, 17}
        Dim r() As Boolean = IsPrimeArray(numbers)

        Console.WriteLine("Are these numbers prime?")
        For i As Integer = 0 To numbers.Length - 1
            Console.WriteLine("{0} = {1}", numbers(i), r(i))
        Next

    End Sub

    Function IsPrimeArray(ByVal numbers() As Integer) As Boolean()
        Dim result(numbers.Length) As Boolean

        For i As Integer = 0 To numbers.Length - 1
            result(i) = IsPrime(numbers(i))
        Next
        Return result
    End Function

    Function IsPrime(ByVal number As Integer) As Boolean
        If number = 1 Then
            Return False
        End If

        For i As Integer = 2 To number - 1
            If number Mod i = 0 And i <> number Then
                Return False
            End If
        Next
        Return True
    End Function

End Module

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

Function IsPrimeArray(ByVal numbers() As Integer) As Boolean()
    ...

ในการประกาศฟังก์ชันสำหรับการรับค่าพารามิเตอร์แบบอารย์นั้น เราจะใส่เครื่องหมาย () หลังจากชื่อตัวแปร เช่นเดียวกันกับในตอนที่เราประกาศอาเรย์ คำสั่ง ByVal numbers() As Integer คือการประกาศพารามิเตอร์สำหรับรัยค่าอาเรย์ของ Integer ที่จะส่งเข้ามา

เช่นเดียวกันสำหรับการส่งค่ากลับ เราประกาศรูปแบบของฟังก์ชันเป็น As Boolean() นั่นหมายความว่าฟังก์ชันนี้จะส่งค่ากลับเป็นอาเรย์ของ Boolean ที่ผลลัพธ์ของตัวเลขแต่ละตัวว่าเป็นจำนวนเฉพาะหรือไม่

Dim r() As Boolean = IsPrimeArray(numbers)

นี่เป็นคำสั่งในการเรียกใช้ฟังก์ชัน โดยการส่งอาเรย์ numbers เข้าไป และในขณะเดียวกันตัวแปรอาเรย์ r กับรับค่าที่ส่งกลับมาจากฟังก์ชัน

Function IsPrime(ByVal number As Integer) As Boolean
    ...

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

Are these numbers prime?
1 = False
2 = True
3 = True
5 = True
8 = False
9 = False
10 = False
13 = True
15 = False
17 = True

นี่เป็นผลลัพธ์ของโปรแกรมในการใช้งานอาเรย์กับฟังก์ชัน

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับการสร้างและใช้งานฟังก์ชันและโพซีเยอร์ และรู้ในความแตกต่างของทั้งสองแบบนี้ และการใช้งานอาเรย์กับฟังก์ชัน

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