2011-01-30 37 views
47

Sự khác nhau giữa phương pháp và chức năng là gì? Có phải là một phương thức trả về một giá trị và một hàm không?Sự khác nhau giữa phương pháp và chức năng là gì?

+1

Thực sự không có sự khác biệt về mặt kỹ thuật trong php. Nhưng trong tâm trí của tôi, một hàm là một điều toán học hơn; nó không thay đổi trạng thái, chỉ trả về một giá trị (như f (x) = 2x).Một phương thức sửa đổi trạng thái (như đầu ra "hello world") và có thể trả về một giá trị. Đây là cơ bản một dupe của: http://stackoverflow.com/questions/43777/method-vs-message-vs-function-vs Hy vọng rằng câu trả lời câu hỏi của bạn mặc dù. – Tyler

+0

Chức năng có ý nghĩa trong hầu hết các ngôn ngữ lập trình không liên quan đến ý nghĩa của nó trong toán học. –

Trả lời

127

Phương thức là thực sự là một hàm được sử dụng trong ngữ cảnh của một lớp/đối tượng.

Khi bạn tạo một hàm bên ngoài của một lớp/đối tượng, bạn có thể gọi nó là một chức năng nhưng khi bạn tạo một hàm bên trong một lớp học, bạn có thể gọi nó là một phương pháp .

class foo { 
    public function bar() { // a method 
    ........ 
    } 
} 

function bar() { // a function not part of an object 
} 

Vì vậy, một đối tượng có thể có phương pháp (chức năng) và thuộc tính (biến).

+1

câu trả lời rất hay, rất rõ ràng. Cảm ơn. – Ben

+4

Phương thức phải được gọi là '$ this-> bar()' nếu trong lớp đó, nếu không bạn phải khởi tạo lớp và sau đó gọi nó bằng cách sử dụng cá thể lớp (đối tượng), như vậy: '$ foo-> bar() '. Đối với các hàm, nó đơn giản là 'bar()'. – knownasilya

+0

Bạn học điều gì đó mới mỗi ngày. –

0

Trong một dòng, phương thức là hàm nhưng hàm không nhất thiết là phương thức. Sự khác biệt là một phương thức được sử dụng để mô tả các hàm được định nghĩa trong các lớp được sử dụng với các cá thể của các lớp đó.

package {class Example { 
    public function iAmAMethod():void { 
    addEventListener("listenerFunctionIsNotAMethod", function(event:Event):void { 
     trace("inline function, yay!"); 
    }); 
    } 

}

5

Sự khác biệt giữa các thuật ngữ "phương pháp" và "chức năng" là một "phương pháp" là một hàm thành viên của một lớp, trong khi một chức năng độc lập thì không, và một chức năng độc lập thường tồn tại trong bối cảnh toàn cục.

2

Cả hai đều được sử dụng thay thế cho nhau, nhưng hàm là thuật ngữ được sử dụng trong ngôn ngữ và phương pháp cấu trúc là thuật ngữ được sử dụng trong Langauages ​​hướng đối tượng. Ngoài ra các phương thức tồn tại trong các đối tượng trong khi các hàm cũng có thể tồn tại mà không có các đối tượng.

6

Các từ không phản đối lẫn nhau mà là mô tả hai khía cạnh có thể có của một chương trình con. Nỗ lực xác định các từ sau:

Chương trình con: Một tập hợp các hướng dẫn có thể được sử dụng nhiều lần trong cùng một chương trình.

Chức năng: Một chương trình con trả về một giá trị. Xuất phát từ các hàm trong toán học (wikipedia).

Phương thức: Một chương trình con thuộc về đối tượng hoặc lớp học. Có thể là một hàm.

Tôi có xu hướng sử dụng từ "hàm" cho mọi chương trình con không có tác dụng phụ nhưng trả lại một giá trị rõ ràng và từ "phương thức" cho mọi chương trình con có tác dụng phụ.

+0

Đây là các định nghĩa của chương trình con và hàm được sử dụng trong Fortran, một trong những ngôn ngữ cấp cao đầu tiên. Đó là một thời gian rất dài trước đây. Tôi không thể nghĩ ra một ngôn ngữ đương đại sử dụng "chương trình con" làm từ khóa. Ngôn ngữ C sử dụng "chức năng" cho cả hai, và đó là cách hầu hết các ngôn ngữ khác sử dụng từ đó. (Bạn không sao cho phương pháp.) –

+0

Nhưng câu hỏi không nói gì về từ khóa. Đó là một câu hỏi về thuật ngữ mô tả mã bằng ngôn ngữ nói. Tôi có thể đề nghị bài viết wikipedia http://en.wikipedia.org/wiki/Subroutine – Jonatan

+0

@MarcRochkind Không (Visual) Basic xác định các chức năng bằng cách sử dụng từ khóa 'Sub'? – Byson

2

Chức năng là một thuật ngữ chung được sử dụng trong phương pháp lập trình thủ tục khi mà Phương thức là thuật ngữ được sử dụng trong phương pháp lập trình hướng đối tượng để xác định thuộc tính lớp.

1

Chúng tôi xác định phương thức bên trong lớp, chúng tôi xác định hàm ngoài lớp, hàm không thuộc lớp

Các vấn đề liên quan