เมธอด

22 August 2016

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

เมื่อสร้างเมธอดในภาษา Java มันสามารถที่จะเรียกใช้งานได้จากส่วนใดๆ ของโปรแกรม ขึ้นกับขอบเขตและระดับการเข้าถึงที่ได้กำหนดขึ้น โดยรูปแบบในการสร้างเมธอดในภาษา Java เป็นดังนี้

type name ( parameter1, parameter2, ... ) {
    statements
}

access_modifier type name ( parameter1, parameter2, ... ) {
    statements
}

type เป็นประเภทของเมธอดที่จะสร้างขึ้น โดยสามารถเป็นได้ทั้ง primitive datatype หรือ reference types ได้ และถ้าหากเมธอดไม่มีการส่งค่ากลับจะใช้คำสั่ง void

name เป็นชื่อของเมธอดหรือ identifier ซึ่งมีกฏในการตั้งชื่อเช่นเดียวกันกับตัวแปร

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

access_modifier เป็นการกำหนดระดับการเข้าถึงของเมธอด ซึ่งจะอยู่ในเรื่องของออบเจ็ค โดยมี 4 แลลคือ private protected public และ default (ไม่ต้องกำหนด)

การสร้างเมธอด

ต่อไปมาดูตัวอย่างการสร้างเมธอดในภาษา Java

public class CreateMethod {
    public static void main(String[] args) {
        sayWelcome();

        int x = 2;
        int y = 3;
        System.out.println("x + y = " + sum(x, y)); 
        System.out.println("10 + 20 = " + sum(10, 20));

    }

    private static void sayWelcome () {
        System.out.println("Welcome to Calculator Program");
    }

    private static int sum (int a, int b) {
        return a + b;
    }
}

ในตัวอย่าง เราสร้างเมธอดขึ้นมาสองเมธอด เมธอดแรกมีชื่อว่า sayWelcome() เราได้เรียกใช้งานเพื่อให้แสดงข้อความเมื่อเข้าโปรแกรม และเมธอด sum() เป็นเมธอดสำหรับค่าหาผลรวมของตัวเลขสองจำนวน

Info: คำสั่ง static คือคำสั่งที่ทำให้เมธอดหรือตัวแปรใดๆ เป็นตัวแปรที่สามารถใช้ร่วมกันภายในโปรแกรมได้ ในการเรียกใช้งาน static เมธอด เมธอดที่เรียกต้องเป็น static เช่นเดียวกัน ยกเว้นการเรียกใช้แบบ Class prefix ซึ่งคุณจะได้เรียนในบทของออบเจ็ค

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

Welcome to Calculator Program
x + y = 5
10 + 20 = 30

นี่เป็นผลการทำงานของโปรแกรม

เมธอด อากิวเมนต์และพารามิเตอร์

ในการส่งค่าและรับค่าภายในเมธอด นั้นอากิวเมนต์คือตัวแปรที่ส่งไปยังเมธอดในตอนเรียกใช้งาน เช่น sum(a, b) เราเรียกตัวแปร a และ b อากิวเมนต์ พารามิเตอร์เป็นตัวแปรภายในเมธอดในการประกาศ เพื่อที่จะรับค่าจากอากิวเมนต์ที่ส่งเข้ามา

import java.util.Scanner;

public class MethodParameters {
    public static void main(String[] args) {   
        Scanner reader = new Scanner(System.in);

        // call method
        open ();

        System.out.print("Enter music name to play: ");
        play(reader.nextLine()); // call method with 1 argument

        System.out.println("Where do you want to seek music to?");
        int min, sec;   
        System.out.print("Enter minute: ");
        min = reader.nextInt();
        System.out.print("Enter second: ");
        sec = reader.nextInt();

        seekTo(sec, min); // call method with 2 arguments

    }

    // no parameter method
    public static void open () {
        System.out.println("Music player started.");
    }

    // method with one parameter
    public static void play (String name) {
        System.out.println("Playing your music \" " + name + "\"");
    }

    // method with two parameters
    public static void seekTo (int sec, int min) {
        System.out.println("Seek music to " + min + ":" + sec);
    }
}

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

เรามี 3 เมธอด คือ เมธอด open() ใช้สำหรับแสดงข้อความว่าเปิดเครื่องเล่นเพลงแล้ว เมธอดนี้ไม่พารามิเตอร์ play() สำหรับใส่ชื่อเพลงที่ต้องการเล่น และโปรแกรมจะเล่นเพลง มีหนึ่งพารามิเตอร์ และสุดท้ายเป็นเมธอดseekTo() เพื่อเลื่อนเพลงไปยังเวลาต่างๆ เมธอดนี้มีสองพารามิเตอร์ ในการเรียกใช้นั้นก็ส่งอากิวเมนต์ไปตามพารามิเตอร์ของเมธอดที่คุณเรียก

Music player started.
Enter music name to play: Golden Wings
Playing your music " Golden Wings"
Where do you want to seek music to?
Enter minute: 2
Enter second: 50
Seek music to 2:50

นี่เป็นตัวอย่างเมื่อรันโปรแกรมและใส่ชื่อเพลงเป็น "Golden Wings" และเวลาเป็น 2 นาทีและ 50 วินาที คุณจะเห็นว่าเมธอดในตัวอย่างทั้งหมดเป็นเมธอดที่ไม่มีการส่งค่ากลับ เราจะใช้คำสั่ง void สำหรับประเภทของมัน

เมธอดที่มีการส่งค่ากลับ (Return keyword)

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

public class MethodReturn {
    public static void main(String[] args) {

        float pi = getPI();
        System.out.println("Value of PI is " + pi);

        System.out.println("\nDetemine if the number is or not");
        for (int i = 1; i <= 20; i++) {
            if (isPrime(i)) {
                System.out.println(i + " is prime");
            } else {
                System.out.println(i + " is not prime");
            }
        }

    }

    public static float getPI () {
        return 3.14f;
    }

    public static boolean isPrime(int number) {
        for (int i = 2; i < number; i++) {
            if (number % i == 0 && i != number) return false;
        }
        return true;
    }   
}

ตัวอย่างเป็นการใช้คำสั่ง return เรามีสองเมธอดคือ getPI() ใช้สำหรับรับค่า PI มา ดังนั้นประเภทของฟังก์ชันจะเป็น float เพราะเราต้องการส่งค่าของ floating-point กลับไป

ต่อมาเป็นเมธอด isPrime() เป็นเมธอดสำหรับตรวจสอบตัวเลขจำนวนเฉพาะ โดยค่าที่ส่งกลับเป็น boolean ซึ่งเป็น true ถ้าหากเป็นจำนวนเฉพาะและ false ถ้าไม่เป็น คุณเห็นว่าเราสามารถเรียกใช้เมธอดนี้ถึง 20 ครั้ง ซึ่งเราได้ใช้โค้ดเดิมโดยไม่ต้องเขียนขึ้นใหม่เสมอ

Value of PI is 3.14

Detemine if the number is or not
1 is prime
2 is prime
3 is prime
4 is not prime
5 is prime
6 is not prime
7 is prime
8 is not prime
9 is not prime
10 is not prime
11 is prime
12 is not prime
13 is prime
14 is not prime
15 is not prime
16 is not prime
17 is prime
18 is not prime
19 is prime
20 is not prime

และนี่เป็นผลลัพธ์ของโปรแกรม

Method and Arrays

ในการส่งข้อมูลแบบอาเรย์เข้าไปในเมธอด ทำได้เช่นเดียวกันกับตัวแปร คุณสามารถส่งอาเรย์ 1 มิติ หรือหลายมิติไปยังเมธอด

import java.util.Arrays;

public class MethodArrays {
    public static void main(String[] args) {
        int[] number = {3, 2, 9, 5, 8, 10, 1};

        System.out.println("Array: " + Arrays.toString(number));
        System.out.println("Sorted: " + Arrays.toString(sort(number)));
    }

    public static int[] sort (int[] arr) {
        int length = arr.length;
        for (int i = 0; i < length - 1; i++) {
            for (int j = 1; j < length - i; j++) {
                if (arr[j - 1] > arr[j]) {
                    int temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }
}

ข้างบนเป็นตัวอย่างการส่งอาเรย์เข้าไปยังเมธอด และ return อาเรย์กลับมาเช่นเดิม โดยเมธอด sort นั้นเป็นเมธอดในการเรียงตัวเลขในอาเรย์จากมากไปน้อยด้วยอัลกอริทึม Bubble sort

เรายังเรียกใช้เมธอด toString() static method ภายในคลาส Arrays เพื่อแปลงอาเรย์ให้เป็น String สำหรับการแสดงผลข้อมูลในอาเรย์

Array: [3, 2, 9, 5, 8, 10, 1]
Sorted: [1, 2, 3, 5, 8, 9, 10]

และนี่เป็นผลลัพธ์ของโปรแกรมเรียงตัวเลขจากน้อยไปมาก

Overloading Method

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

ในเมธอดที่มากับไลบรารี่ของภาษา Java นั้นมี Overloading Method มากมายให้เราใช้ และคุณได้ใช้ไปแล้ว เช่น เมธอด print() และ println() นั้นต่างก็เป็น Overload Method คุณสามารถส่งข้อมูลประเภทต่างๆ เพื่อไปแสดงผลได้ เช่น int, float หรือ String เป็นต้น

public class OverloadingMethod {
    public static void main(String[] args) {
        hello(3);
        hello("Marcus");
        hello("Alice", "Emma");
    }

    public static void hello (int n) {
        System.out.println("Hello " + n + ", you're a number");
    }

    public static void hello (String name) {
        System.out.println("Hi " + name);
    }

    public static void hello (String name, String name2) {
        System.out.println("Hello " + name + ", Hi " + name2);
    }
}

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

Hello 3, you're a number
Hi Marcus
Hello Alice, Hi Emma

นี่เป็นผลลัพธ์การทำงานของ Overloading Method ที่เราได้สร้างขึ้น

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

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