Chủ đề này thực sự phức tạp hơn một chút như được mô tả trong các câu trả lời cho đến nay. Bài đăng trên blog này của Rob Norris giải thích nó chi tiết hơn và đưa ra các ví dụ về việc khi nào việc sử dụng return sẽ thực sự phá vỡ mã của bạn (hoặc ít nhất là có những tác động không rõ ràng).
Tại thời điểm này, hãy để tôi chỉ trích dẫn bản chất của bài đăng. Tuyên bố quan trọng nhất là ngay trong phần đầu. In cái này làm áp phích và dán lên tường của bạn :-)
Các return
từ khóa không phải là “bắt buộc” hay “suy ra”; nó thay đổi ý nghĩa của chương trình của bạn và bạn không bao giờ nên sử dụng nó.
Nó đưa ra một ví dụ, nơi nó thực sự phá vỡ một cái gì đó, khi bạn nội dòng một hàm
def sum(ns: Int*): Int = ns.foldLeft(0)((n, m) => n + m)
scala> sum(33, 42, 99)
res2: Int = 174
def sumR(ns: Int*): Int = ns.foldLeft(0)((n, m) => return n + m)
scala> sumR(33, 42, 99)
res3: Int = 33
bởi vì
Một return
biểu thức, khi được đánh giá, sẽ loại bỏ tính toán hiện tại và quay trở lại trình gọi của phương thức return
xuất hiện trong đó .
Đây chỉ là một trong những ví dụ được đưa ra trong bài đăng được liên kết và nó là dễ hiểu nhất. Còn nhiều hơn nữa và tôi rất khuyến khích bạn, hãy đến đó, đọc và hiểu.
Khi bạn đến từ các ngôn ngữ bắt buộc như Java, điều này thoạt nghe có vẻ kỳ quặc, nhưng khi bạn đã quen với phong cách này thì nó sẽ có ý nghĩa. Hãy để tôi kết thúc bằng một trích dẫn khác:
Nếu bạn rơi vào tình huống mà bạn nghĩ rằng bạn muốn trở về sớm, bạn cần phải suy nghĩ lại cách bạn đã xác định tính toán của mình.