การเขียนโปรแกรม Java Functions (Methods)

12/19/2556 0 Comments

Java Functions (Methods)



ในภาษา Java ต้องสร้าง Functions ไว้ใน class และภาษา java เราเรียกว่า Methods มาดูตัวอย่างกัน

public class Main {
    public static void test() {
        // โค้ดโปรแกรม
    }
}

test คือชื่อของ method นี้ ซึ่งอยู่ในคลาส Main

Arguments

method ของภาษา Java จะส่งค่าเป็น passed by value หมายถึง การ copies ค่าเมื่อ method ทำงาน ตัวอย่าง

public void bar(int num1, int num2) {
    ...
}

ยกตัวอย่างเมื่อมีการเรียกใช้ method bar

int a = 3;
int b = 5;
bar(a, b);

เมื่อ method ทำงาน bar(a, b) จะส่งค่า a=3, b=5 ไปใน method ซึ่งจะเปรียบเสมือน

int num1 = a;
int num2 = b;
หรือ 

public void bar(int num1 = a, int num2 = b) {
    ...
}

หมายถึง ค่า a จะคัดลอกไปสู่ num1 และค่า b คัดลอกไปสู่ num2 เรียงตามลำดับโดยไม่กระทบค่า a , b
จากนั้นก็จะทำส่วนที่เหลือของ method

แล้วถ้า arguments เป็น object บ้าง การทำงานก็คล้ายๆ กัน ต่างกันนิดเดียวเท่านั้น ตัวอย่าง

public void bar2(Student s1, Student s2) {
    ...
}

มี method อยู่ 2 ตัวคือ joe , jack และเรียกใช้ method bar2 พร้อมส่งค่าไป

Student joe = new Student("joe");
Student jack = new Student("jack");
bar2(joe, jack);

แล้วการส่งค่าก็จะเปรียบเสมือนการ copy ค่า (pass by value)
Student s1 = joe;
Student s2 = jack;

แต่ถ้าเป็น object จะต่างกันนิดหนึ่งตรงที่ object  s1  กับ  joe  มีตำแหน่งอ้างอิงเดียวกันทำให้ s1 == joe เป็น true หมายความว่าเมื่อเปลียนค่า s1  joe ก็จะถูกกระทบคือเปลี่ยนตาม แต่ถ้าสร้าง s1 ในตำแหน่งอื่น ก็จะไม่กระทบกับ joe


s1.setName("Chuck"); // เปลี่ยน s1 ให้เป็น Chuck ทำให้ตอนนี้ joe เปลี่ยนเป็น Chuck ตามไปด้วย
s1 = new Student("Norris"); // s1 ถูกสร้างขึ้นใหม่ชื่อ Norris อ้างอิงตำแหน่งใหม่ทำให้ต่างจาก joe
// s1 == joe   ทำให้ไม่ true อีกต่อไป

Non static methods

non static methods ในภาษา Java ถูกใช้มากกว่า static method ซึ่ง non static methods จะทำงานภายใต้ object เท่านั้น ไม่ทำงานใน class
non static methods สามารถเรียกใช้และเปลี่ยนค่าใน object

public class Student {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

การเรียกใช้ method จะเรียกผ่าน object ชนิด student

Student s = new Student();
s.setName("Danielle");
String name = s.getName();

Student.setName("Bob"); // ทำไม่ได้
Student.getName(); // ทำไม่ได้

สรุป

ทุก methods ในภาษา Java ต้องทำงานใน Class
Static method เป็นสมาชิกของ class ในขณะที่ non static method เป็นสามาชิกของ objects
การส่งค่าของทุก method จะส่่งแบบ passed  by value ขณะที่ object จะส่งแบบ passed by reference

แบบฝึกหัด

เขียน method ชื่อ printFullName ของนักเรียนซึ่งแสดงชื่อนามสกุลนักเรียน


class Student {
    private String firstName;
    private String lastName;
    public Student(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    // พิมพ์ code ของคุณตรงนี้
}

public class Main {
    public static void main(String[] args) {
        Student[] students = new Student[] {
            new Student("Morgan", "Freeman"),
            new Student("Brad", "Pitt"),
            new Student("Kevin", "Spacey"),
        };
        for (Student s : students) {
            s.printFullName();
        }
    }
}


class Student {
    private String firstName;
    private String lastName;
    public Student(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    public void printFullName(){
      System.out.println(firstName+" " +lastName);     
    }
}

public class Main {
    public static void main(String[] args) {
        Student[] students = new Student[] {
            new Student("Morgan", "Freeman"),
            new Student("Brad", "Pitt"),
            new Student("Kevin", "Spacey"),
        };
        for (Student s : students) {
            s.printFullName();
        }
    }
}