Methods

ธีรกานต์ เพชรแอน 650710556

Method คืออะไร?

Method คือ"กลไกการทำงาน" หรือ "ขั้นตอนในการ ทำอะไรบางอย่าง" ภายในโปรแกรมคอมพิวเตอร์ เพื่อให้เข้าใจง่ายขึ้น ให้เราลองจินตนาการถึงหุ่นยนต์ทำอาหารที่สามารถทำสเต็กให้เราทานได้ ทุกครั้งที่เราต้องการทานสเต็ก เราเพียงแต่บอกหุ่นยนต์ว่า "ทำสเต็กให้ฉัน" แล้วหุ่นยนต์ก็จะเริ่มลงมือทำ โดยที่เราไม่ต้องบอก หุ่นยนต์ว่าต้องทำอะไรบ้าง ขั้นตอนต่างๆ ที่หุ่นยนต์จะทำนั้นอยู่ภายใน "Method" ที่เราเรียกมันว่า "ทำสเต็ก"

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


ประโยชน์ของ Method ?

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


ใช้งาน Method ตอนไหน ?

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


ข้อแตกต่างระหว่าง Method และ Function ?

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

Method จะถูกกำหนดไว้ในคลาส (class) ซึ่งสามารถเรียกใช้ Method จากออบเจ็กต์ (object) ของคลาสนั้นๆ เท่านั้น เรามักจะใช้เพื่อกำหนดการทำงานของออบเจ็กต์ Method นั้นจะถูกใช้อยู่ในภาษาตระกูลที่เป็นโปรแกรมเชิงวัตถุ (Object-Oriented Programming) เช่น C# , JAVA , C++ ยกตัวอย่างโค้ดด้านล่าง

// ชื่อของ Method --> GetCircleArea()
public double GetCircleArea(double radius)
{
    const float pi = 3.14F;
    double area = pi * radius * radius;
    return area;
}

Function นั้นไม่จำเป็นต้องเป็นส่วนหนึ่งของคลาสหรือออบเจ็กต์ เราสามารถกำหนด Funtion ได้โดยตรงและสามารถเรียกใช้จากที่ไหนก็ได้ในโปรแกรม มักใช้เพื่อดำเนินการทั่วไป เช่น การคำนวณ เป็นต้น Function นั้นจะถูกใช้อยู่ในภาษาตระกูลเชิงกระบวนการ (Procedural Programming) เช่น C

// ชื่อของ Function --> add
int add(int a, int b) {
    return a + b;
}

แต่ก็มีภาษาบางภาษา เช่น Python เป็นภาษาที่สามารถทำงานได้ทั้งแบบ Object-Oriented Programming และ Procedural Programming ทำให้รองรับการใช้ Method และ Function ได้ ตัวอย่างโค้ดด้านล่าง

อธิบายโปรแกรม : เป็นโปรแกรมภาษา Pyhon ที่มี Function ชื่อ greet และมี Method ชื่อ say_hello ในคลาส Person อยู่ภายในโปรแกรมเดียวกัน

# Function ที่ใช้ keyword ว่า def และ ชื่อของ Function --> greet
def greet(name):
    return f"Hello, {name}!"

class Person:
    def __init__(self, name):
        self.name = name

    # ชื่อของ Method --> say_hello
    def say_hello(self):
        return f"Hi, I'm {self.name}"

วิธีการสร้าง Method

Syntax ใน C#:

<Access_Modifier> <return_type> <method_name>([<param_list>])

การสร้าง Method นั้นมีส่วนประกอบต่างๆ ตังนี้ :

Access Modifier

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

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Person และ คลาส Test ในคลาส Person มี Method ชื่อsayHello ที่กำหนดการเข้าถึงแบบ public ทำให้ในคลาส Test สามารถเรียกใช้ sayHello ได้ผ่าน ออบเจกต์ของคลาส Person

using System;
namespace ConsoleApplication1 {
    class Person {
         public void SayHello() {
           Console.WriteLine("Hello, world!");
          }
    }
    class Test {
      static void Main(string[] args) {
         Person person = new Person();
         person.SayHello();
     }
   }
}

แต่ถ้าเราต้องการให้ Method ถูกเรียกใช้งานได้เฉพาะจากภายในตัวออบเจกต์เอง (เรียกใช้งานได้จากภายในคลาสเดียวกันเท่านั้น) เราจะกำหนด keyword ว่า private

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Person และ คลาส Test ในคลาส Person มี Method ชื่อsayHello ที่กำหนดการเข้าถึงแบบ private และ Method ชื่อ greet ที่กำหนดการเข้าถึงแบบ public มีการเรียกใช้ sayHello ได้เพราะอยู่ในคลาสเดียวกัน แต่ในคลาส Test ไม่สามารถเรียกใช้ sayHello ได้ผ่านออบเจกต์ของคลาส Person เพราะมีการเข้าถึงแบบ private

using System;
namespace ConsoleApplication1 {
    class Person {
         private void SayHello() {
             Console.WriteLine("Hello, world!");
          }
         public void greet() {
            sayHello(); // เรียกใช้เมธอด private
          }
    }
    class Test {
      static void Main(string[] args) {
         Person person = new Person();
         person.SayHello();
         // ภายนอกคลาสจะไม่สามารถเรียกใช้ SayHello() ได้
     }
   }
}

หากเราต้องการให้ Method สามารถถูกเรียกใช้งานได้จาก ภายในคลาสเดียวกัน และ คลาสลูก ที่สืบทอดคุณสมบัติ (Inheritance) เราจะกำหนด keyword ว่า protected

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Person , คลาส Employee ที่สืบทอดมาจากคลาส Person และ คลาส Test ในคลาส Person มี Method ชื่อsayHello ที่กำหนดการเข้าถึงแบบ protected ในคลาส Employee มี Method ชื่อ ShowDetails ที่กำหนดการเข้าถึงแบบ publicและมีการเรียกใช้ sayHello จากคลาสแม่ได้ แต่ในคลาส Test ไม่สามารถเรียกใช้ sayHello ได้ผ่านออบเจกต์ของคลาส Person เพราะมีการเข้าถึงแบบ protected

using System;
namespace ConsoleApplication1 {
    class Person {
         protected void SayHello() {
             Console.WriteLine("Hello, world!");
          }
     }
    public class Employee : Person{
        public void ShowDetails() {
             SayHello();  // เรียกใช้จากคลาสลูกได้
        }
    }
    class Test {
      static void Main(string[] args) {
         Person person = new Person();
         person.SayHello();
         // ภายนอกคลาสจะไม่สามารถเรียกใช้ SayHello() ได้
     }
   }
}

Return Type

เป็นชนิดของข้อมูลของผลลัพธ์ที่จะส่งกลับไปให้ผู้เรียกใช้ Method โดยเราสามารถระบุชนิดของข้อมูลที่เราจะส่งกลับโดยระบุชื่อชนิดของข้อมูล (data type) เช่น int , double , bool , string เป็นต้น ค่าที่ส่งคืนจาก Method มีได้เพียงค่าเดียวเท่านั้นและเป็นไปตาม data type ที่เรากำหนด หรืออาจจะไม่ส่งค่าใด ๆ กลับเลยก็ได้ ในกรณีที่ไม่มีการส่งค่ากลับให้เรากำหนด keyword คำว่า void แทนที่ชนิดของข้อมูลที่จะส่งกลับ

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Pergram มี Method ชื่อ AddNumber ที่มี return type เป็นเลขจำนวนเต็ม เพราะมีชนิดข้อมูล integer และ Method ชื่อ PrintMessage ที่ไม่มี return type เพราะมี keyword ว่า void ใน Method Main มีการเรียกใช้ AddNumber ได้ผลลัพธ์เป็นจำนวนเต็มส่งค่าคืนกลับมาที่ Main และมีการเรียกใช้ PrintMessage ที่ไม่ส่งคืนใดๆออกมาให้ Main

using System;
class Program
{
    // Method ที่ส่งค่ากลับเป็นชนิด int
    public int AddNumbers(int a, int b)
    {
        return a + b; 
    }

    // Method ที่ไม่ส่งค่ากลับ ใช้ void
    public void PrintMessage(string message)
    {
        Console.WriteLine(message); 
    }

    static void Main(string[] args)
    {
        // เรียกใช้ Method AddNumbers และรับค่ากลับ
        int result = AddNumbers(10, 20);
        Console.WriteLine("ผลรวมคือ: " + result);

        // เรียกใช้ Method PrintMessage โดยไม่มีค่ากลับ
        PrintMessage("Hello, World!");
    }
}

Name of Method

เป็นชื่อของ Method ที่เราสามารถตั้งขึ้นมาที่ใช้เป็นชื่อเรียกของ Method นั้นๆ ตัวอย่างเช่น findSum, computeMax, setX , getX เป็นต้น แต่ไม่ใช่ว่าเราจะสามารถตั้งชื่อว่าอะไรก็ได้ ผู้สร้างภาษา C# จึงมีการ สร้างข้อกำหนดในการตั้งชื่อของ Method ไว้เพื่อให้เป็นแนวทางกับเรา ข้อกำหนดนั้นมีดังนี้ :

  • ชื่อของ Method จะต้องเป็นคำนามหรือคำกริยา

  • ควรตั้งชื่อที่สื่อถึงวัตถุประสงค์ของ Method นั้นๆ

  • ตัวอักษรตัวแรกของชื่อ Method อาจเป็นตัวอักษรตัวเล็กหรือตัวอักษรพิมพ์ใหญ่ก็ได้ โดยคนส่วนใหญ่มักใช้ตัวอักษรตัวแรกพิมพ์ใหญ่

โดยทั่วไปแล้วภายในคลาสเดียวกันนั้น เราจะตั้งชื่อของ Method ที่เป็นชื่อเฉพาะและแตกต่างกัน แต่ในบางครั้งเราอาจตั้งชื่อ Method ที่มีชื่อเดียวกันภายในคลาสเดียวกันได้ ในกรณีนี้คือ Method Overloading

Parameter-list

เป็นตัวแปรที่ประกาศขึ้นใน Method ไว้ใช้รับค่าต่าง ๆ ที่เราเรียกส่งมาให้ในขณะที่เราเรียกใช้ Method ซึ่งเราอาจส่งหรือไม่ส่งค่าไปยัง Method ก็ได้ ค่าต่างๆที่เราส่งไปเรียกว่า parameter parameter เป็นตัวแปรที่ประกาศไว้ภายในวงเล็บหลังชื่อของ Method - การที่จะประกาศ parameter จะต้องมี data type เช่น int, long หรือ float หรือ double หรือ char ซึ่งจะนำหน้าชื่อตัวแปร ซึ่งค่าที่ต่างๆที่เราส่งมาให้จะถูกเก็บไว้ในตัวแปร ถ้ามี parameter หลายตัว เราจะตั้งชื่อของตัวแปรนั้นไม่ให้ซ้ำกัน แล้วก็จะคั่นพารามิเตอร์แต่ละตัวด้วยสัญลักษณ์ลูกน้ำ (comma) แต่ถ้าในกรณีที่เราไม่ได้ส่งค่าใดๆมาเลยก็ยังจะต้องมีวงเล็บอยู่เสมอและเว้นภายในวงเล็บให้ว่างไว้ - parameter ที่เราประกาศภายใน Method จะเป็นตัวแปรแบบ Local สามารถใช้ได้ในเฉพาะภายใน Method เท่านั้น ยกตัวอย่าง การประกาศ parameter ภายใน Method ของภาษา C# , C++ , JAVA จะมี data type นำหน้าตัวแปรเสมอ เช่น int x, double y แต่ในภาษา Python จะมีแต่ตัวแปร ไม่ต้องมี data type เพราะตัวแปรภาษาสามารถรับรู้ชนิดข้อมูลได้เองเมื่อ runtime

Body of the Method

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


การเรียกใช้งาน Method

เมื่อเราเรียกใช้งาน Method แล้ว ตัว Method นั้นจะทำงานตามคำสั่งที่เราได้เขียนไว้ เมื่อมันทำงานตามคำสั่งเสร็จทุกคำสั่งแล้ว ก็จะกลับไปยังโค้ดเดิมที่เรียกใช้มัน แต่ก็อาจกลับไปโดยที่ไม่ต้องทำงานใน Method นั้นเสร็จก็ได้ เช่น ทำงานถึงคำสั่ง return หรือ ทำงานถึงคำสั่ง Throws an exception

การเรียกใช้งาน Method จะมีอยู่ 2 แบบ คือ

แบบที่ 1 การเรียกใช้งาน Method ภายในคลาส

การเรียกใช้งาน Method จากภายในคลาสเดียวกันสามารถเรียกชื่อ Method ได้โดยตรง ตัวอย่างเช่น

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Geeks มี Method ชื่อ Sum ใน Main Method จะสามารถเรียกใช้ Sum ได้โดยตรง โดยใช้ชื่อ

using System;
namespace ConsoleApplication1 {
class Geeks {
	public int Sum(int x, int y)
	{	
		int a = x;
		int b = y;
		int result = a + b;
		return result;
	}
	// Main Method
	static void Main(string[] args)
	{
		int a = 12;
		int b = 23;
		int c = Sum(a, b);
		Console.WriteLine("The Value of the sum is " + c);
	}
}
}

สำหรับผลลัพธ์ของโปรแกรมคือ :

The Value of the sum is 35

แบบที่ 2 การเรียกใช้งานเมธอดจากคลาสอื่น

ในขั้นตอนการพัฒนาโปรแกรมเราอาจจะต้องแยกโปรแกรมเราออกเป็นหลายๆคลาสหรือหลายๆไฟล์นั่นเอง เราสามารถเรียกใช้งานเมธอดจากคลาสอื่นได้โดยที่คลาสและเมธอดที่เราจะเรียกมาใช้งานจะต้องมี keyword ของ Acess Modifier เป็น public และเราจะต้องสร้างออบเจกต์ของคลาสที่เราจะเรียกใช้ Method ขึ้นมาและเก็บไว้ที่ตัวแปร จากนั้นจึงเรียกใช้งาน Method ผ่านตัวแปรนี้อีกทีหนึ่ง

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Geeks มี Method ชื่อ Sum และมีคลาส Test ใน Main Method จะสามารถเรียกใช้ Sum ได้โดยต้องสร้างออบเจกต์ของคลาส Geeks

using System;
namespace ConsoleApplication1 {
    class Geeks {
        static int Sum(int x, int y) {	
            int a = x;
            int b = y;
            int result = a + b;
            return result;
        }
    }
    class Test {
      static void Main(string[] args) {
         int a = 100;
         int b = 200;
         int ret;
         Geeks geeks = new Geeks();
         ret = geeks.Sum(a, b);
         Console.WriteLine("The Value of the sum is " + ret);
     }
   }
}

สำหรับผลลัพธ์ของโปรแกรมคือ :

The Value of the sum is 300

Method Parameters

ใน Method ที่เราสร้างขึ้นนั้น ในบางครั้งที่เราเขียนโปรแกรมอาจจะมี Method ที่มี parameter หรือ ไม่มี parameter ก็ได้ หรือ Method ที่เราสร้างขึ้นอาจจะมีหรือไม่มี return type ก็ได้ ซึ่งในภาษา C# เราสามารถจำแนกตามประเภทของ return type และ parameter ได้ 4 ประเภท ดังนี้

  1. ไม่มี parameter และ ไม่มี return type

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Geeks มี Method ชื่อ PrintSentence ที่ไม่มี return type และไม่มี parameter ใน Main Method เมื่อเรียกใช้ จะไม่มีการส่งค่าใดๆ ให้ PrintSentence และเมื่อเรียกใช้สำเร็จก็จะไม่มีการคืนค่าใดๆกลับไปให้ Main Method

using System;
namespace ConsoleApplication2 {
class Geeks {
	public void PrintSentence()
	{
		Console.WriteLine("No parameters and return type void");
	}
	static void Main(string[] args)
	{
		PrintSentence();
	}
    }
}

สำหรับผลลัพธ์ของโปรแกรมคือ :

No parameters and return type void
  1. ไม่มี parameter มี return type

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Geeks มี Method ชื่อ Sum ที่มี return type เป็น integer และไม่มี parameter ใน Main Method เมื่อเรียกใช้ จะไม่มีการส่งค่าใดๆ ให้ Sum และเมื่อเรียกใช้สำเร็จก็จะมีการคืนค่าเป็นจำนวนเต็มกลับไปยัง Main Method

using System;
namespace ConsoleApplication3 {
class Geeks {
	public int sum()
	{
		int a = 78, b = 70, add; 
		add = a + b;
		return add; 
	}

	
	static void Main(string[] args)
	{
		int getresult = sum();
		Console.WriteLine(getresult);
	}
}
}

สำหรับผลลัพธ์ของโปรแกรมคือ :

148
  1. มี parameter ไม่มี return type

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Geeks มี Method ชื่อ Perimeter ที่ไม่มี return type และมี parameter ใน Main Method เมื่อเรียกใช้ จะมีการส่งค่าให้ PrintSentence และเมื่อเรียกใช้สำเร็จก็จะไม่มีการคืนค่าใดๆกลับไปให้ Main Method

using System;
namespace ConsoleApplication3 {
class Geeks {
	public void perimeter(int p)
	{
		Console.WriteLine("Perimeter of the Square is " + 4 * p);
	}
	static void Main(string[] args)
	{
		int p = 5;
		perimeter(p);
	}
   }
}

สำหรับผลลัพธ์ของโปรแกรมคือ :

Perimeter of the Square is 20
  1. มี parameter มี return type

อธิบายโปรแกรม : เป็นโปรแกรมที่มีคลาส Geeks มี Method ชื่อ factorial ที่มี return type เป็นจำนวนเต็ม และมี parameter ใน Main Method เมื่อเรียกใช้ จะมีการส่งค่าให้ factorial และเมื่อเรียกใช้สำเร็จก็จะมีการคืนค่าเลขจำนนวนเต็มกลับไปให้ Main Method

using System;
namespace ConsoleApplication4 {
class Geeks {
	public int factorial(int n)
	{
		int f = 1;
		for (int i = 1; i<= n; i++) 
		{
			f = f * i;
		}
		return f;
	}
	static void Main(string[] args)
	{
		int p = 4;
		Console.WriteLine("Factorial is : " + factorial(p));
	}
    }
}

สำหรับผลลัพธ์ของโปรแกรมคือ :

Factorial is : 24

สไลด์การนำเสนอ


คลิปวิดีโอการนำเสนอ

--------------------------


แหล่งที่มาอ้างอิง

  • หัวข้อต่างๆ ของเรื่อง Method และโค้ดตัวอย่าง

  • เพิ่มเติมคำอธิบายในหัวข้อต่างๆ ให้เข้าใจมากขึ้น

  • ข้อแตกต่างระหว่าง Function กับ Methods

Last updated