Đoạn trích bài giảng với người cố vấn trong khóa học của Đại học Codegym. Đăng ký cho khóa học đầy đủ.


"Lại là anh, Amigo. Xin chào."

"Có vẻ như bạn không vui khi gặp tôi, Diego?"

"Tôi có ấn tượng rằng bạn nghĩ rằng bạn đã học mọi thứ cần biết về các phương thức trong Java."

"Ồ, tôi không..."

"Ta không nghĩ như vậy! Ngươi một nửa cũng không biết."

"Được, ta không chê...

"Được rồi, nói đủ rồi. Đã đến lúc bắt đầu. Và chúng ta sẽ bắt đầu với một thứ đơn giản. Ví dụ, thực tế là Java có một câu lệnh return . Nó cho phép bạn kết thúc ngay lập tức một phương thức mà nó được gọi. Đây là câu lệnh:

return;

"Thật đơn giản: từ đơn returntheo sau là dấu chấm phẩy. Ngay sau khi chương trình thực thi câu lệnh này, phương thức hiện tại sẽ thoát và phương thức gọi tiếp tục.

"Nếu returnđược gọi trong mainphương thức, thì mainphương thức đó sẽ kết thúc ngay lập tức và cùng với nó là toàn bộ chương trình.

Ví dụ:

class Solution
{
   public static void fill(int[] data, int from, int to, int value)
   {
     if (from < 0 || to > data.length)
       return;

     for (int i = from; i < to; i++)
     {
       data[i] = value;
     }
   }

   public static void main(String[] args)
   {
     int[] months = {1, 2, 3, 4, 5, 6, 7, 8 ,9, 10, 11, 12};
     fill(months, 2, 10, 8);
   }
}
Phương fill thức điền vào một phần của mảng đã truyền với value.

Phần của mảng được lấp đầy được xác định bởi các chỉ số from và to.

Nếu from nhỏ hơn 0hoặc nếu to  lớn hơn độ dài của mảng thì phương thức kết thúc ngay lập tức.

"Chương trình trên có một fillphương thức lấp đầy mảng được truyền cho nó bằng value. Nó không lấp đầy toàn bộ mảng, chỉ phần được chỉ định bởi các chỉ số fromto.

"Khi bắt đầu phương fillthức, các giá trị đã truyền được kiểm tra để đảm bảo rằng chúng hợp lệ. Nếu fromnhỏ hơn 0 hoặc nếu tolớn hơn độ dài của mảng, thì phương fillthức sẽ kết thúc ngay lập tức (thực thi một returncâu lệnh)."

"Hiểu rồi. Câu nói này chỉ có thế thôi sao?"

"Thực ra, returncâu lệnh hữu ích hơn bạn nghĩ. Nó hữu ích đến mức nó được tìm thấy trong hầu hết mọi phương thức trong Java. Và bây giờ tôi sẽ dẫn dắt bạn hiểu tại sao lại như vậy.

Phương pháp có kết quả,void

"Bạn có thể nhớ rằng có những câu lệnh, và có những biểu thức . Sự khác biệt giữa chúng là gì?"

"Nếu tôi không nhầm, một biểu thức, không giống như một câu khẳng định, có một ý nghĩa có thể được sử dụng ở đâu đó."

"Đúng. Và, trong Java, các phương thức cũng có thể có một giá trị . Và đây là một tin rất tốt: các phương thức không chỉ có thể làm điều gì đó dựa trên các tham số đầu vào, mà còn, ví dụ, để đánh giá một thứ gì đó và trả về kết quả của phép tính .

"Nhân tiện, bạn đã gặp phải những phương pháp như vậy:

double delta = Math.abs(d1 - d2);
Phương thức này abs()trả về một giá trị gấp đôi
Scanner console = new Scanner(System.in);
int x = console.nextInt();

Phương nextInt()thức trả về mộtint
String str = "Hello";
String s2 = str.toUpperCase();
Phương toUpperCase()thức trả về mộtString
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

Phương copyOf()thức trả về mộtint[]

"Mỗi phương thức chỉ có thể trả về một giá trị của một loại được xác định trước . Loại trả về được xác định khi phương thức được khai báo:

public static Type name(parameters)
{
  method body
}

Đâu namelà tên của phương thức, parameterslà danh sách các tham số của phương thức và typelà kiểu kết quả mà phương thức trả về.

Đối với các phương thức không trả về gì, có một loại trình giữ chỗ đặc biệt: void.

"Nói cách khác, nếu tôi viết phương thức của mình và không muốn trả lại bất kỳ thứ gì, thì tôi khai báo loại phương thức là void, và chỉ có vậy thôi sao?"

"Yep. Và, tôi cũng phải nói rằng Java có khá nhiều phương pháp như vậy.

Trả về một kết quả

"Tôi đã tìm ra cách khai báo một phương thức trả về kết quả của phép tính/công việc. Làm cách nào để tôi trả về kết quả từ chính phương thức đó?"

"Đó là một câu hỏi hợp lệ. returnMột lần nữa, câu lệnh này lại giúp chúng ta hiểu rõ vấn đề này. Việc truyền kết quả từ một phương thức có dạng như sau:

return value;

" returnCâu lệnh sẽ kết thúc phương thức ngay lập tức. Và valuelà thứ mà phương thức sẽ trả về phương thức gọi khi nó thoát. Loại của valuephải khớp với Typequy định trong khai báo phương thức. Dưới đây là một số ví dụ để củng cố những gì bạn đã học:

Ví dụ 1. Phương pháp tính tổng hai số nhỏ nhất:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
Phương thức trả về giá trị nhỏ nhất của hai số.

Nếu a < b
trả lại a
Nếu không
trả lạib

Ví dụ 2. Phương thức nhân đôi chuỗi được truyền cho nó nlần:

String multiple(String str, int times)
{
   String result = "";

   for (int i = 0; i < times; i++);
     result = result + " "+ str;
   return result;
}
Phương thức này nhận hai tham số — một chuỗi và số lần lặp lại chuỗi đó.
Một chuỗi trống được tạo cho kết quả trong tương lai.

Trong một vòng lặp có timesnhiều lần lặp lại, một khoảng trắng và chuỗi strđược thêm vào chuỗi result.
Chuỗi resultđược trả về là kết quả của phương thức.

Ví dụ 3: Phương pháp tính tổng hai số lớn nhất bằng toán tử bậc ba:

int max(int a, int b)
{
   return (a > b ? a : b);
}
Phương thức trả về giá trị lớn nhất của hai số.

trả lại (nếu a > b, thì a, ngược lại b)

"Tuyệt vời. Phương pháp là siêu năng lực mới của tôi!"

"Chỉ khi bạn thực hành đủ trong các nhiệm vụ thực hành. Hết lần này đến lần khác."