Cổng Khoa học Máy tính dành cho những người yêu thích máy tính. Nó bao gồm các bài báo về khoa học máy tính và lập trình được viết tốt, tư duy tốt và được giải thích tốt, các câu đố và thực hành / lập trình cạnh tranh / các câu hỏi phỏng vấn công ty.

Bạn đang xem : gọi hàm trong java

Cho đến nay Java vẫn hỗ trợ kiểu lập trình mệnh lệnh và kiểu lập trình hướng đối tượng. Điều quan trọng tiếp theo mà java đã được bổ sung là Java đã bắt đầu hỗ trợ phong cách lập trình chức năng với bản phát hành Java 8 của nó. Trong bài viết này, chúng ta sẽ thảo luận về lập trình hàm trong Java 8.
Lập trình hàm là gì?
Đây là một kiểu lập trình mang tính khai báo chứ không phải là mệnh lệnh. Mục tiêu cơ bản của phong cách lập trình này là làm cho mã ngắn gọn hơn, ít phức tạp hơn, dễ dự đoán hơn và dễ kiểm tra hơn so với phong cách lập trình cũ. Lập trình chức năng đề cập đến một số khái niệm chính như chức năng thuần túy , trạng thái bất biến , lập trình không cần gán, v.v.
Lập trình chức năng so với lập trình Chức năng thuần túy: < / strong>
Các ngôn ngữ lập trình chức năng thuần túy không cho phép bất kỳ khả năng thay đổi nào trong bản chất của nó, trong khi ngôn ngữ kiểu chức năng cung cấp các chức năng bậc cao hơn nhưng thường cho phép khả năng thay đổi có nguy cơ chúng ta không làm đúng, điều này gây ra gánh nặng vào chúng tôi hơn là bảo vệ chúng tôi. Vì vậy, nói chung, chúng ta có thể nói nếu một ngôn ngữ cung cấp chức năng bậc cao thì đó là ngôn ngữ kiểu chức năng, và nếu một ngôn ngữ đi đến mức hạn chế khả năng biến đổi ngoài chức năng bậc cao thì nó trở thành ngôn ngữ chức năng thuần túy. Java là một ngôn ngữ kiểu chức năng và ngôn ngữ như Haskell là một ngôn ngữ lập trình chức năng thuần túy.
Hãy hiểu một vài khái niệm trong lập trình chức năng :
< / p>

  • Hàm bậc cao hơn: Trong lập trình hàm, các hàm được coi là công dân hạng nhất. Có nghĩa là, cho đến nay trong phong cách mã hóa kế thừa, chúng ta có thể thực hiện những thứ bên dưới với các đối tượng.
    1. Chúng tôi có thể chuyển đối tượng vào một hàm.
    2. Chúng tôi có thể tạo đối tượng trong hàm.
    3. Chúng tôi có thể trả về đối tượng từ một hàm.
    4. Chúng ta có thể chuyển hàm cho một hàm.
    5. Chúng ta có thể tạo một function bên trong function.
    6. Chúng ta có thể trả về function từ một hàm.
  • Hàm thuần túy : Một hàm được gọi là hàm thuần túy nếu nó luôn trả về cùng một kết quả cho các giá trị đối số giống nhau và nó không có tác dụng phụ như sửa đổi một đối số (hoặc biến toàn cục) hoặc xuất ra nội dung nào đó.
  • Biểu thức Lambda: Biểu thức Lambda là một phương thức ẩn danh có khả năng thay đổi ở mức tối thiểu và nó chỉ có danh sách tham số và phần thân. Kiểu trả về luôn được suy ra dựa trên ngữ cảnh. Ngoài ra, hãy lưu ý, các biểu thức Lambda hoạt động song song với giao diện chức năng. Cú pháp của biểu thức lambda là:
 (tham số) - & gt; thân hình

  • Ở dạng đơn giản, lambda có thể được biểu diễn dưới dạng danh sách các tham số được phân tách bằng dấu phẩy, ký hiệu – & gt; và phần nội dung.
  • < / ul>

    Cách triển khai lập trình chức năng trong Java?

    java

    nhập java.util.Arrays;

    nhập java.util.List;

    public class GFG {

    public static void main (Chuỗi [] args)

    {

    Runnable r = new Runnable () {

    public void run ()

    {

    System.out.println (

    "Chạy trong chuỗi Runnable" );

    } < / code>

    };

    < p class = "line number17 index16 alt2">

    r.run ();

    System.out.println (

    " Đang chạy trong chuỗi chính " );

    }

    }

    < p class = "code-editor-container">

     
     

    Đầu ra:

     Chạy trong chuỗi Runnable
    Đang chạy trong chuỗi chính
    
    

    Nếu chúng tôi xem xét các phương thức run () , chúng tôi đã kết hợp nó với Runnable. Chúng tôi đã khởi tạo phương thức này theo cách này tối đa là Java 7. Chương trình tương tự có thể được viết lại trong Java 8 như:

    java

    < / p>

    nhập java.util.Arrays;

    nhập java.util.List;

    public class GFG {

    < code class = "keyword"> public static void main (Str ing [] args)

    {

    Runnable r

    = ()

    - & gt; System.out.println (

    "Chạy trong Runnable luồng " );

    r.run ();

    System.out.println (

    "Đang chạy trong chuỗi chính" );

    }

    }

     
     

    Đầu ra:

     Đang chạy trong chuỗi Runnable
    Đang chạy trong chuỗi chính
    
    

    Giờ đây, mã trên đã được chuyển đổi thành biểu thức Lambda thay vì phương thức ẩn danh. Ở đây chúng tôi đã đánh giá một hàm không có bất kỳ tên nào và hàm đó là một biểu thức lambda. Vì vậy, trong trường hợp này, chúng ta có thể thấy rằng một hàm đã được đánh giá và gán cho một giao diện có thể chạy được và ở đây hàm này đã được coi là công dân hạng nhất.
    Cấu trúc lại một số chức năng từ Java 7 sang Java 8:
    Chúng tôi đã làm việc nhiều lần với các vòng lặp và trình lặp cho đến Java 7 như sau:

    java

    nhập java.util.Arrays;

    nhập java.util.List;

    public class GFG {

    public static void main (Chuỗi [] arg s)

    {

    Danh sách & lt; Integer & gt; số

    = Arrays.asList ( 11 , 22 , 33 , 44 ,

    55 , 66 , 77 , 88 ,

    99 , 100 < / code> );

    cho (Số nguyên n: số) {

    System.out.print (n + " " ) ;

    }

    }

    }

     

    < pre id = "ide-url"> Đầu ra:

     11 22 33 44 55 66 77 88 99 100
    
    

    Trên đây là một ví dụ về forEach loop trong Java , một danh mục của trình lặp bên ngoài, bên dưới là ví dụ một lần nữa và một dạng khác của trình lặp bên ngoài.

    java

    < br />

    nhập java.util.Arrays;

    nhập java.util.List;

    public class GFG {

    public static void main (String [] args)

    < code class = "undefined space"> {

    Danh sách & lt; Integer & gt ; số

    = Arrays.asList ( 11 , 22 , 33 , 44 ,

    55 , 66 , 77 , 88 ,

    99 , 100 );

    cho ( int i = 0 ; i & lt; number.size (); i ++) {

    < code class = "undefined space"> System.out.print (number.get (i) + "" );

    }

    }

    }

     
     

    Đầu ra:

     11 22 33 44 55 66 77 88 99 100
    
    

    Chúng ta có thể biến đổi các ví dụ ở trên về một trình vòng lặp bên ngoài bằng một trình vòng lặp nội bộ được giới thiệu trong Java 8, như sau:

    java

    < br />

    nhập java.util.Arrays;

    nhập java.util.List;

    public class GFG {

    public static void main (String [] args)

    {

    Danh sách & lt; Integer & gt; số

    = Arrays.asList ( 11 , 22 , 33 , 44 ,

    55 , 66 , 77 , 88 ,

    99 , 100 < / code> );

    number.forEach (number

    - & gt; System.out.print (

    number + "" ));

    }

    }

     
     

    Đầu ra:

     11 22 33 44 55 66 77 88 99 100
    
    

    Ở đây, giao diện chức năng đóng một vai trò quan trọng. Bất cứ nơi nào mong đợi một giao diện phương thức trừu tượng duy nhất, chúng ta có thể truyền biểu thức lambda rất dễ dàng. Đoạn mã trên có thể được đơn giản hóa và cải tiến hơn như sau:

     number.forEach (System.out :: println);
    
    

    Lập trình khai báo Vs mệnh lệnh:
    Kiểu chức năng của lập trình là lập trình khai báo. Trong phong cách viết mã mệnh lệnh, chúng tôi xác định những gì cần thực hiện một nhiệm vụ và cách thực hiện nó. Trong khi đó, trong kiểu mã hóa khai báo, chúng tôi chỉ xác định những việc cần làm. Hãy hiểu điều này bằng một ví dụ. Đưa ra một danh sách các số, hãy tìm tổng nhân đôi của các số chẵn từ danh sách bằng cách sử dụng kiểu mã hóa mệnh lệnh và khai báo.

    java

    nhập java.util.Arrays;

    nhập java.util.List;

    public class GFG {

    < / code> public static void main (String [] args)

    < code class = "trơn"> {

    Danh sách & lt; Số nguyên & gt; số

    = Arrays.asList ( 11 , 22 , 33 , 44 ,

    55 , 66 , 77 , 88 ,

    99 , 100 < / code> );

    int result = 0 ;

    cho (Số nguyên n: số) {

    if (n% 2 == 0 ) {

    result + = n * 2 ;

    }

    }

    < / code> System.out.println (kết quả);

    }

    }

     
     

    Đầu ra:

     640
    
    

    Vấn đề đầu tiên với đoạn mã trên là chúng tôi đang sửa đổi biến result lặp đi lặp lại. Vì vậy, khả năng thay đổi là một trong những vấn đề lớn nhất trong phong cách lập trình. Vấn đề thứ hai đối với phong cách mệnh lệnh là chúng tôi dành nỗ lực không chỉ để chỉ ra những việc phải làm mà còn cả cách thực hiện quy trình. Bây giờ, hãy viết lại đoạn mã trên theo kiểu khai báo.

    java

    < / p>

    nhập java.util.Arrays;

    nhập java.util. Danh sách;

    public class GFG {

    public static void main (String [] args)

    {

    Danh sách & lt; Integer & gt; số

    = Arrays.asList ( 11 , 22 , 33 , 44 ,

    55 , 66 , 77 , 88 ,

    99 , 100 < / code> );

    System.out.println (

    number.stream ()

    . filter (số - & gt; số% 2 == 0 )

    . mapToInt (e - & gt; e * 2 )

    < code class = "undefined space"> . sum ());

    }

    } < / p>

     
     

    Đầu ra:

     640
    
    

    Từ đoạn mã trên, chúng tôi không thay đổi bất kỳ biến nào. Thay vào đó, chúng tôi đang chuyển đổi dữ liệu từ chức năng này sang chức năng khác. Đây là một điểm khác biệt giữa Mệnh lệnh và Khai báo. Không chỉ điều này mà còn trong đoạn mã kiểu khai báo ở trên, mọi hàm đều là một hàm thuần túy và các hàm thuần túy không có tác dụng phụ.
    Trong ví dụ trên, chúng ta đang nhân đôi số với hệ số 2, nghĩa là được gọi là Đóng cửa . Hãy nhớ rằng, lambdas là không trạng thái và việc đóng có trạng thái bất biến. Nó có nghĩa là trong mọi trường hợp, việc đóng không thể thay đổi được. Hãy hiểu nó bằng một ví dụ. Ở đây chúng ta sẽ khai báo một hệ số biến và sẽ sử dụng bên trong một hàm như bên dưới.

    java

    < / p>

    nhập java.util.Arrays;

    nhập java .util.List;

    public class GFG {

    public static void main (String [] args)

    {

    Danh sách & lt; Số nguyên & gt; số

    = Arrays.asList ( 11 , 22 , 33 , 44 ,

    55 , 66 , 77 , 88 ,

    99 , 100 < / code> );

    int factor = 2 ;

    System.out .println (

    number.stream ()

    . filter (number - & gt; số% 2 == 0 )

    . mapToInt (e - & gt; e * factor)

    . sum () );

    }

    }

     
     

    Đầu ra:

     640
    
    

    Đoạn mã trên hoạt động tốt, nhưng bây giờ hãy thử thay đổi mã sau khi sử dụng và xem điều gì sẽ xảy ra:

    java

    nhập java.util.Arrays;

    nhập java.util.List;

    public class GFG {

    public static void main (String [] args)

    {

    Danh sách & lt; Số nguyên & gt; số

    = Arrays.asList ( 11 , 22 , 33 , 44 ,

    55 , 66 , 77 , 88 ,

    99 , 100 < / code> );

    int factor = 2 ;

    System.out .println (

    umbers.stream ()

    . filter (number - & gt; number% 2 == 0 )

    . mapToInt (e - & gt; e * factor)

    . sum ());

    < code class = "undefined space"> factor = 3 ;

    }

    }

     
     

    Đoạn mã trên cung cấp một lỗi thời gian biên dịch cho biết Yếu tố biến cục bộ được xác định trong phạm vi bao quanh phải là yếu tố cuối cùng hoặc cuối cùng thực sự.

    Điều này có nghĩa là ở đây, theo mặc định, biến được coi là biến cuối cùng. Tóm lại, chúng ta không bao giờ nên thử thay đổi bất kỳ biến nào được sử dụng bên trong các hàm thuần túy. Làm như vậy sẽ vi phạm các quy tắc hàm thuần túy trong đó nói rằng hàm thuần túy không được thay đổi bất cứ điều gì cũng như không phụ thuộc vào bất kỳ điều gì thay đổi. Thay đổi bất kỳ phần đóng nào (ở đây là yếu tố) được coi là một phần đóng không tốt vì các phần đóng luôn không thay đổi về bản chất.

    Ghi chú cá nhân của tôi


Xem thêm những thông tin liên quan đến chủ đề gọi hàm trong java

Lập trình Java: Cách truyền tham số trong Java | Heap Stack ValueType ReferenceType

alt

  • Tác giả: The Brown Box
  • Ngày đăng: 2021-06-29
  • Đánh giá: 4 ⭐ ( 9123 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 🔥 Ưu đãi 75% khóa học: https://courses.hoangvancong.com/
    🔥 Group khoá học dành riêng cho học viên: https://www.facebook.com/groups/dsalgothebrownbox
    🔥 Lớp học OFFLINE tại Techmaster: https://techmaster.vn/khoa-hoc/j79/java-cau-truc-du-lieu-giai-thuat

    Playlist hay:
    ► Data Structures & Algorithms: https://www.youtube.com/playlist?list=PLqLksqdSk4b2ely12ZuwQcujGOYAUlPKz
    ► Daily LeetCode Challenge: https://www.youtube.com/playlist?list=PLqLksqdSk4b37pGIyfy_266wP0-S68HDh
    ► Have Fun with Python: https://www.youtube.com/playlist?list=PLqLksqdSk4b1EXGs7zxIIUjAT0Qi-mRMQ

    Contact:
    ► My Website: http://www.hoangvancong.com/
    ► Follow My Facebook Page: https://www.facebook.com/thebrownboxx/

    Tags: LapTrinhJava TruyenThamSo DayLapTrinh
    TheBrownBox LapTrinh Java DataStructure Algorithm LeetCode

    String, StringPool, CauTrucDuLieu, GiaiThuat, TheBrownBox, LapTrinh, Java, DataStructure, Algorithm, Stack, Queue, Ngăn xếp, hàng đợi, LeetCode

Các hàm gọi lại trong Java

  • Tác giả: qastack.vn
  • Đánh giá: 3 ⭐ ( 5955 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Nếu bạn có nghĩa là một cái gì đó như đại biểu ẩn danh .NET, tôi…

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

  • Tác giả: shareprogramming.net
  • Đánh giá: 5 ⭐ ( 4868 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 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ể.

Lập trình hướng đối tượng (OOPs) trong Java

  • Tác giả: topdev.vn
  • Đánh giá: 4 ⭐ ( 8887 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lập trình hướng đối tượng (Object Oriented Programing – OOP) là phương pháp thiết kế một chương trình bởi sử dụng các lớp và các đối tượng.

Tìm hiểu về Hàm tạo (Constructor) trong Java

  • Tác giả: laptrinhvienjava.com
  • Đánh giá: 4 ⭐ ( 7875 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong Java, Constructor (hay còn gọi là hàm tạo) là một khối mã tương tự như phương thức. Nó được gọi khi một thể hiện của class được tạo

Function trong JavaScript với cách tạo và gọi hàm

  • Tác giả: laptrinhcanban.com
  • Đánh giá: 3 ⭐ ( 1040 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Có 4 phương pháp tạo hàm trong JavaScript là sử dụng từ khóa function, sử dụng biểu thức, sử dụng hàm tạo (constructor) và sử dụng hàm Arrow. Trong bài học này, chúng ta sẽ cùng học về cách tạo hàm Ja

Cách để Gọi một phương thức trong Java

  • Tác giả: www.wikihow.vn
  • Đánh giá: 5 ⭐ ( 8716 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Khi bắt đầu lập trình với Java, có rất nhiều khái niệm mà bạn cần nắm. Những khái niệm đó bao gồm lớp (class), phương thức (method), ngoại lệ (exception), hàm tạo (constructor), biến (variable), vân vân. Để không bị quá tải, tốt nhất bạn...

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Lớp máy quét Java - mã java cho máy quét

By ads_php