Hàm trong java với ví dụ cụ thể

Một method trong java là một tập các câu lệnh được nhóm lại với nhau để thực hiện một hành động cụ thể. Ví dụ khi chúng ta gọi hàm System.out.println() thì hệ thống sẽ hiện thị message của chúng ta truyền vào.

Hàm trong java

Cú pháp

modifier returnType nameOfMethod (Parameter List) {
   // method body
}

Giải thích:

  • Modifiers (tạm dịch là phạm vi sửa đổi và truy cập)
  • returnType: kiểu dữ liệu trả về
  • nameOfMethod: tên của hàm(method)
  • Parameter là các tham số đầu vào của hàm(có thể có nhiều tham số với nhiều kiểu dữ liệu khác nhau)
  • // body: là các mã code bên trong hàm

Ví dụ: Viết hàm tính tổng 2 chữ số a và b

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

Thao tác với hàm (method)

Khi chúng ta đã viết xong một hàm rồi làm sao để chúng ta có thể sử dụng chúng đây ta! Trước tiên chúng ta sẽ có 2 loại hàm, mỗi loại sẽ có cách gọi khác nhau:

  • Hàm có trả về kết quả
  • Hàm không trả về kết quả

Hàm có trả về kết quả

Đối với hàm có kết quả trả về, chúng ta cần dùng từ khoá return để trả về kết qủa mà nó đã tính toán được.

Khai báo biến có kiểu dữ kiệu tương ứng với kết quả trả về của hàm để nhận giá trị trả về.

Như ví dụ tìm sum() của chúng ta, nhiệm vụ của nó là tính tổng của 2 số nguyên a, b nhập vào. 

public class Main {

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

    public static void main(String[] args) {

        int sum = sum(2,5);
        System.out.println(sum);
        
    }
}

Chúng ta sẽ dùng biến có kiểu dữ liệu tương ứng để nhận kết quả trả về từ hàm. Hàm sum() trả về int chúng ta dùng biến int sum để nhận kết quả.

Hàm không trả về kết quả

Đối với loại hàm này chúng ta chỉ cần gọi để sử dụng. 

public static void printHello() {
        System.out.println("Hello");
}

Hàm printHello() là một hàm không có kiểu trả về nên được thay thế thành void. Từ khoá void cho chúng ta biết là method đó sẽ không có kết quả trả về.

Tóm tắt cú pháp

Hàm có kết quả trả về

modifier returnType nameOfMethod (Parameter List) {
   // method body
}

Hàm không có kết quả trả về

<modifier> void methodName(Danh sách các tham số) {
   // body
}

public static (modifier)

Nảy giờ nói nhiều về nó mà không có giải thích, thực ta đây là một khái niệm khá dài dòng được sử dụng trong java hướng đối tượng. Trong loạt bài java căn bản, mình xin giải thích public static.

  • public: bất kỳ một method hay một phương thức nào có từ khoá public đứng trước thì nó sẽ được truy cập bất cứ ở đâu. Nghĩa là nếu như bạn đang ở một class khác, một package khác,… thì bạn đều có thể gọi đến nó.
  • static: cho phép rằng biến hay phương thức chỉ được khởi tạo lúc tải class. Chúng ta chỉ cần gọi method chứ không khởi tạo class chứa nó. Trong loạt bài java core chúng ta chỉ cần code trong class Main. Nếu các bạn bỏ static trong khai báo hàm đi thì các bạn sẽ phải khởi tạo class Main rồi mới gọi hàm được nhé.

Truyền tham số khi gọi hàm(method)

Khi bạn gọi đến một hàm đã được định và nó có danh sách các thông số nhất định. Thì khi gọi các bạn sẽ phải truyền đúng thứ tự và kiểu dữ liệu cho từng tham số. Nếu sai xót trong quá trình này có thể dẫn đến biên dịch lỗi hoặc là kết quả không đúng như mong muốn. 

Passing Parameters by Value(Truyền tham số theo giá trị)

public class Main {

    public static void swap(int a, int b) {
        int c = a;
        a = b;
        b = c;
        System.out.println("Ket qua swap: " + "a = " + a + " b= " + b);
    }

    public static void main(String[] args) {

        int a = 5, b = 3;
        swap(a, b);
        System.out.println("a sau khi swap: " + a);
        System.out.println("b sau khi swap: " + b);

    }
}

Output:

Ket qua swap: a = 3 b= 5
a sau khi swap: 5
b sau khi swap: 3

Nhìn vào kết quả trên, rõ ràng hàm swap đã được a thành b, b thành a, sao trong hàm main giá trị lại như cũ nhỉ? Đó chính là truyền thông số theo giá trị đó các bạn, các tham số truyền vào hàm sẽ chỉ nhận giá trị mà không tham chiếu đến 2 biến a, b của chúng ta. Thế nên đừng có viết hàm swap() như trên nữa nghen, hồi mình chuyển tử C/C++ sang java cũng đã cố gắng viết hàm swap mà không thành.

Method overloading

Một chút thông tin thêm là trong một class nếu có 2 method cùng tên và cùng tham số đầu vào thì trình biên dịch sẽ báo lỗi nhé.

Nếu 2 method có cùng tên nhưng khác tham số đầu vào thì đó gọi là method overloading.

Ví dụ chúng ta có 2 hàm tìm số nhỏ nhất trong 2 và 3 số

public class Main {

    public static int min(int a, int b) {
        if (a <= b){
            return a;
        } else {
            return b;
        }
    }

    public static int min(int a, int b, int c) {
        if (a <= b && a <= c){
            return a;
        } else if (b <= a && b <= c){
            return b;
        } else {
            return c;
        }
    }


    public static void main(String[] args) {

        int a = 5, b = 3;
        System.out.println(min(a, b, -1));
        System.out.println(min(a, b));

    }
}

output:

-1

3

‹Previous Next›

5 2 votes
Article Rating
Subscribe
Notify of
guest
1 Comment
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
1
0
Would love your thoughts, please comment.x
()
x