Các chức năng và phương thức tương tự nhau ở nhiều khía cạnh; . Vì lý do này, chúng tôi xem xét chúng tách biệt về mặt khái niệm khi chúng tôi làm việc trong bối cảnh lập trình hướng đối tượng
Sự khác biệt đầu tiên liên quan đến mối quan hệ giữa chức năng hoặc phương thức, một mặt và dữ liệu hoặc tham số mà chúng hoạt động trên đó
Các chức năng yêu cầu chúng tôi chuyển tất cả dữ liệu của chúng một cách rõ ràng. Ngoại trừ các biến toàn cục, nếu có, một hàm chỉ có thể hoạt động với dữ liệu mà chúng tôi cung cấp cho nó
Các phương thức giả định sự tồn tại của một đối tượng, được truyền ngầm khi chúng ta gọi chúng. Vì lý do này, một phương thức có thể truy cập tất cả dữ liệu được liên kết với lớp mà đối tượng đó thuộc về.
Một sự khác biệt khác liên quan đến quyền truy cập vào dữ liệu riêng tư. Nếu một lớp có bất kỳ phương thức nào, các phương thức của nó có thể hoạt động với chúng. Ngược lại, bất kỳ chức năng nào sẽ không thể làm như vậy
3. Một số ngôn ngữ có thể thiếu một
Cuối cùng, các chức năng và phương thức khác nhau vì một số ngôn ngữ thiếu cái này hay cái khác
Ví dụ, trong Java, có các biểu thức lambda và giao diện chức năng, nhưng chúng là một bổ sung tương đối gần đây
Ngược lại, trong C, có các hàm nhưng không có phương thức. Ngôn ngữ không có lớp và do đó nó cũng không thể có phương thức
Thay vào đó, trong Scala, có cả phương thức và hàm
4. Sự kết luận
Trong bài viết này, chúng ta đã học được sự khác biệt giữa một phương thức và một hàm
tác giả dưới cùng
Nếu bạn có một vài năm kinh nghiệm trong Khoa học máy tính hoặc nghiên cứu và bạn muốn chia sẻ kinh nghiệm đó với cộng đồng, hãy xem Nguyên tắc đóng góp của chúng tôi
Không có chức năng nào trong Java. Tất cả những gì bạn có là phương pháp. Để bắt chước các hàm, Java thường sử dụng các phương thức tĩnh [như trong java.lang.Math
]
Tuy nhiên, có một số ngôn ngữ hướng đối tượng cung cấp các hàm độc lập. trong số đó có Python, Ruby, JavaScript, C ++, Object Pascal và thậm chí [yuck] PHP. Có một lý do chính đáng đằng sau đó
Một phương thức về cơ bản là một hàm có thêm một tham số [ẩn trong Java]. Bạn gọi nó là this
. Điều this
đó cho phép bạn truy cập đối tượng có phương thức đang được gọi, vì vậy bạn có thể nghĩ rằng toàn bộ đối tượng luôn là một tham số ẩn cho một phương thức, bổ sung cho các tham số mà bạn thường xác định
Một phương thức có ý nghĩa nếu nó sử dụng đối tượng của nó. gọi các phương thức khác và/hoặc truy cập các thành viên dữ liệu. Ví dụ: một danh sách có thể có phương thức getLength[]
biết cách tính độ dài của danh sách, e. g. bằng cách quét từng thành viên. Nó rõ ràng sử dụng đối tượng this
ngầm định, tức là danh sách. Đây là lý do tại sao nó không cần tham số rõ ràng
Khác, một chức năng là đủ. Chẳng hạn, để tính cosin của một góc, bạn chỉ cần góc và không cần trạng thái nào khác, vì vậy, cos[float angle]
có thể là một hàm và chỉ phụ thuộc vào tham số angle
rõ ràng
Một điều quan trọng khác là ghi đè phương thức. [Đối với tôi, đây là một thực tế đáng ngờ, nhưng Java sử dụng nó rất rộng rãi. ] Bạn khai báo một lớp nhất định [gọi nó là Z
] là một lớp con của một lớp khác [gọi nó là A
] và thay đổi cách triển khai một số phương thức của nó [giả sử chúng ta ghi đè phương thức foo[]
]
Lớp con hoạt động giống như lớp cơ sở [được cho là cung cấp cùng một giao diện] nhưng thực hiện theo các cách khác nhau. Theo nguyên tắc thay thế Liskov, bạn có thể khai báo một biến kiểu A
, gán cho nó một thể hiện kiểu Z
và gọi phương thức foo[]
; . Nghĩa là, phương thức gọi sẽ được tra cứu trong thời gian chạy, dựa trên loại thực tế của đối tượng. Điều này được gọi là "gửi phương thức động" hoặc "phương thức ảo"
Ghi đè phương thức nào cung cấp tự động không dễ dàng để mô phỏng trực tiếp với các chức năng. [Với các chức năng, những điều tương tự thường được thực hiện với "gọi lại" hoặc "hàm bậc cao hơn"]
Trong một số ngôn ngữ nhất định, chẳng hạn như Java và C#, bạn có thể định nghĩa "các phương thức tĩnh" không nhận tham số this
. Chúng hoạt động chính xác như các hàm "độc lập" và sử dụng lớp làm không gian tên. Việc đặt tên như vậy đôi khi có thể có ý nghĩa, khi một phương thức tĩnh của một lớp được sử dụng để tra cứu hoặc tạo các thể hiện mới của lớp đó
Hàm số. Hàm là một đoạn mã có thể tái sử dụng. Nó có thể có dữ liệu đầu vào mà nó có thể hoạt động [i. e. đối số] và nó cũng có thể trả về dữ liệu bằng cách có kiểu trả về. Đó là khái niệm về ngôn ngữ lập trình thủ tục và chức năng
Phương pháp. Hoạt động của phương thức này tương tự như một hàm i. e. nó cũng có thể có các tham số/đối số đầu vào và cũng có thể trả về dữ liệu bằng cách có kiểu trả về nhưng có hai điểm khác biệt quan trọng khi so sánh với một hàm
- Một phương thức được liên kết hoặc liên quan đến thể hiện của đối tượng mà nó được gọi bằng cách sử dụng
- Một phương thức bị giới hạn hoạt động trên dữ liệu bên trong lớp chứa phương thức đó
- Đó là một khái niệm về ngôn ngữ lập trình hướng đối tượng
Nói một cách đơn giản nếu một hàm là một phần của thể hiện của một lớp tôi. e. [Đối tượng] thì gọi là phương thức còn không thì gọi là hàm