Ai đó có thể cung cấp một lời giải thích đơn giản về các phương thức so với các hàm trong ngữ cảnh OOP không?
if(class(object)) { ... } else {stop()}
sẽ tương đương về mặt khái niệm với phương thức?
Ai đó có thể cung cấp một lời giải thích đơn giản về các phương thức so với các hàm trong ngữ cảnh OOP không?
if(class(object)) { ... } else {stop()}
sẽ tương đương về mặt khái niệm với phương thức?
Câu trả lời:
Một chức năng là một đoạn mã mà được gọi bằng tên. Nó có thể được truyền dữ liệu để hoạt động (tức là các tham số) và có thể tùy chọn trả về dữ liệu (giá trị trả về). Tất cả dữ liệu được truyền đến một chức năng được truyền rõ ràng.
Một phương pháp là một đoạn mã mà được gọi bằng một tên được liên kết với một đối tượng. Trong hầu hết các khía cạnh, nó giống hệt với một chức năng ngoại trừ hai điểm khác biệt chính:
(đây là một giải thích đơn giản hóa, bỏ qua các vấn đề về phạm vi, v.v.)
Một phương thức là trên một đối tượng.
Một chức năng độc lập với một đối tượng.
Đối với Java và C #, chỉ có các phương thức.
Đối với C, chỉ có chức năng.
Đối với C ++ và Python, điều đó phụ thuộc vào việc bạn có ở trong lớp hay không.
'Phương thức' là từ hướng đối tượng cho 'hàm' . Đó là khá nhiều tất cả để có nó (tức là, không có sự khác biệt thực sự).
Thật không may, tôi nghĩ rằng rất nhiều câu trả lời ở đây đang tồn tại hoặc thúc đẩy ý tưởng rằng có một số khác biệt phức tạp, có ý nghĩa.
Thực sự - không có gì nhiều với nó, chỉ là những từ khác nhau cho cùng một thứ.
[bổ sung muộn]
Trên thực tế, như Brian Neal đã chỉ ra trong một bình luận cho câu hỏi này , tiêu chuẩn C ++ không bao giờ sử dụng thuật ngữ 'phương pháp' khi đề cập đến các chức năng thành viên. Một số người có thể coi đó là một dấu hiệu cho thấy C ++ không thực sự là ngôn ngữ hướng đối tượng; tuy nhiên, tôi thích coi đó là một dấu hiệu cho thấy một nhóm người khá thông minh đã không nghĩ rằng có một lý do đặc biệt mạnh mẽ để sử dụng một thuật ngữ khác.
self
đối số là rõ ràng. Và nhiều ngôn ngữ có các phương thức tĩnh, không được thông qua một thể hiện.
this
hoặc self
, nhưng những cấu trúc đó thường được gọi là các hàm, thay vì các phương thức.
Nói chung: các phương thức là các hàm thuộc về một lớp, các hàm có thể nằm trên bất kỳ phạm vi nào khác của mã để bạn có thể nói rằng tất cả các phương thức là các hàm, nhưng không phải tất cả các hàm đều là các phương thức:
Lấy ví dụ về con trăn sau:
class Door:
def open(self):
print 'hello stranger'
def knock_door:
a_door = Door()
Door.open(a_door)
knock_door()
Ví dụ đưa ra cho bạn thấy một lớp được gọi là "Cửa" có một phương thức hoặc hành động gọi là "mở", nó được gọi là một phương thức vì nó được khai báo bên trong một lớp. Có một phần mã khác với "def" ngay bên dưới định nghĩa hàm, đó là hàm vì nó không được khai báo bên trong một lớp, hàm này gọi phương thức chúng ta đã định nghĩa bên trong lớp của chúng ta như bạn có thể thấy và cuối cùng là hàm được gọi bởi chính nó.
Như bạn có thể thấy, bạn có thể gọi một hàm ở bất cứ đâu nhưng nếu bạn muốn gọi một phương thức hoặc bạn phải truyền một đối tượng mới cùng loại với lớp mà phương thức được khai báo (Class.method (object)) hoặc bạn phải gọi phương thức bên trong đối tượng (object.Method ()), ít nhất là trong python.
Hãy nghĩ về các phương thức như những điều mà chỉ một thực thể có thể làm, vì vậy nếu bạn có một lớp Dog thì sẽ chỉ có chức năng vỏ cây trong lớp đó và đó sẽ là một phương thức, nếu bạn cũng có một lớp Person thì nó có thể có ý nghĩa viết một hàm "feed" cho cái đó không thuộc về bất kỳ lớp nào vì cả người và chó đều có thể được cho ăn và bạn có thể gọi đó là hàm vì nó không thuộc về bất kỳ lớp nào.
Cách đơn giản để nhớ:
Nếu bạn cảm thấy như đọc ở đây là "Giới thiệu của tôi về các phương pháp OO"
Ý tưởng đằng sau mô hình Hướng đối tượng là "đe dọa" phần mềm bao gồm .. các "đối tượng". Các đối tượng trong thế giới thực có các thuộc tính, ví dụ nếu bạn có Nhân viên, nhân viên có tên, id nhân viên, vị trí, anh ta thuộc về một bộ phận, v.v.
Đối tượng cũng biết cách xử lý các thuộc tính của nó và thực hiện một số thao tác trên chúng. Hãy nói nếu chúng tôi muốn biết những gì một nhân viên đang làm ngay bây giờ, chúng tôi sẽ hỏi anh ta.
employe whatAreYouDoing.
Rằng "whatAreYouDending" là một "thông điệp" được gửi đến đối tượng. Đối tượng biết cách trả lời các câu hỏi đó, người ta nói rằng nó có một "phương pháp" để giải quyết câu hỏi.
Vì vậy, cách các đối tượng phải phơi bày hành vi của nó được gọi là phương thức. Do đó, các phương thức là đối tượng giả tạo phải "làm" một cái gì đó.
Các phương pháp khác có thể là
employee whatIsYourName
employee whatIsYourDepartmentsName
Vân vân.
Mặt khác, các hàm là cách mà ngôn ngữ lập trình phải tính toán một số dữ liệu, ví dụ bạn có thể có hàm addValues (8, 8) trả về 16
// pseudo-code
function addValues( int x, int y ) return x + y
// call it
result = addValues( 8,8 )
print result // output is 16...
Vì các ngôn ngữ lập trình phổ biến đầu tiên (như fortran, c, pascal) không bao gồm mô hình OO, nên chúng chỉ gọi các "hàm" này.
ví dụ, hàm trước trong C sẽ là:
int addValues( int x, int y )
{
return x + y;
}
Không phải là "tự nhiên" khi nói một đối tượng có "hàm" để thực hiện một số hành động, bởi vì các hàm có liên quan nhiều hơn đến các công cụ toán học trong khi Nhân viên có ít toán học về nó, nhưng bạn có thể có các phương thức thực hiện chính xác như các hàm, ví dụ trong Java, đây sẽ là hàm addValues tương đương.
public static int addValues( int x, int y ) {
return x + y;
}
Trông quen quen? Điều đó vì Java có nguồn gốc từ C ++ và C ++ trên C.
Cuối cùng chỉ là một khái niệm, trong thực hiện chúng có thể trông giống nhau, nhưng trong tài liệu OO, chúng được gọi là phương thức.
Đây là một ví dụ về đối tượng Nhân viên trước đây trong Java.
public class Employee {
Department department;
String name;
public String whatsYourName(){
return this.name;
}
public String whatsYourDeparmentsName(){
return this.department.name();
}
public String whatAreYouDoing(){
return "nothing";
}
// Ignore the following, only set here for completness
public Employee( String name ) {
this.name = name;
}
}
// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John
// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();
// Print the info to the console.
System.out.printf("Employee %s is doing: %s", name, doingWhat );
Output:
Employee John is doing nothing.
Sự khác biệt là, trên "miền" nơi nó được áp dụng.
AppleScript có ý tưởng về matphor "ngôn ngữ tự nhiên", đến một lúc nào đó OO đã có. Ví dụ Smalltalk. Tôi hy vọng có thể hợp lý dễ dàng hơn cho bạn để hiểu các phương thức trong các đối tượng sau khi đọc điều này.
LƯU Ý: Mã không được biên dịch, chỉ để làm ví dụ. Hãy sửa đổi bài đăng và thêm ví dụ Python.
Trong thế giới OO, cả hai thường được sử dụng để có cùng một ý nghĩa.
Từ phối cảnh Toán học và CS thuần túy, một hàm sẽ luôn trả về cùng một kết quả khi được gọi với cùng các đối số (f (x, y) = (x + y)). Mặt khác, một phương thức thường được liên kết với một thể hiện của một lớp. Một lần nữa, hầu hết các ngôn ngữ OO hiện đại không còn sử dụng thuật ngữ "hàm" cho hầu hết các phần. Nhiều phương thức tĩnh có thể khá giống các hàm, vì chúng thường không có trạng thái (không phải lúc nào cũng đúng).
Giả sử một hàm là một khối mã (thường có phạm vi riêng và đôi khi có bao đóng riêng) có thể nhận được một số đối số và cũng có thể trả về kết quả.
Phương thức là một hàm được sở hữu bởi một đối tượng (trong một số hệ thống hướng đối tượng, sẽ đúng hơn khi nói nó thuộc sở hữu của một lớp). Được "sở hữu" bởi một đối tượng / lớp có nghĩa là bạn tham chiếu phương thức thông qua đối tượng / lớp; ví dụ, trong Java nếu bạn muốn gọi một phương thức "open ()" thuộc sở hữu của một đối tượng "cửa", bạn cần phải viết "door.open ()".
Thông thường các phương thức cũng có được một số thuộc tính bổ sung mô tả hành vi của chúng trong đối tượng / lớp, ví dụ: mức độ hiển thị (liên quan đến khái niệm đóng gói hướng đối tượng) xác định từ đó các đối tượng (hoặc lớp) mà phương thức có thể được gọi.
Trong nhiều ngôn ngữ hướng đối tượng, tất cả "hàm" thuộc về một số đối tượng (hoặc lớp) và vì vậy trong các ngôn ngữ này không có hàm nào không phải là phương thức.
Phương thức là chức năng của các lớp. Trong thuật ngữ bình thường, mọi người trao đổi phương thức và chức năng tất cả. Về cơ bản, bạn có thể nghĩ về chúng như một điều tương tự (không chắc các hàm toàn cầu có được gọi là phương thức không).
Một hàm là một khái niệm toán học. Ví dụ:
f(x,y) = sin(x) + cos(y)
nói rằng hàm f () sẽ trả về sin của tham số đầu tiên được thêm vào cosin của tham số thứ hai. Nó chỉ là toán học. Khi nó xảy ra sin () và cos () cũng là các hàm. Một hàm có một thuộc tính khác: tất cả các lệnh gọi đến một hàm có cùng tham số, sẽ trả về cùng một kết quả.
Mặt khác, một phương thức là một hàm có liên quan đến một đối tượng trong ngôn ngữ hướng đối tượng. Nó có một tham số ngầm định: đối tượng được hành động (và trạng thái của nó).
Vì vậy, nếu bạn có một đối tượng Z với phương thức g (x), bạn có thể thấy như sau:
Z.g(x) = sin(x) + cos(Z.y)
Trong trường hợp này, tham số x được truyền vào, giống như trong ví dụ hàm trước đó. Tuy nhiên, tham số cos () là một giá trị sống bên trong đối tượng Z. Z và dữ liệu sống bên trong nó (Zy) là các tham số ngầm định cho phương thức g () của Z.
Hàm hoặc một phương thức là một đoạn mã có thể gọi được, được thực hiện một số thao tác và tùy ý trả về một giá trị.
Trong ngôn ngữ C , hàm hạn được sử dụng. Người dùng Java & C # sẽ nói nó là một phương thức (và một hàm trong trường hợp này được định nghĩa trong một lớp / đối tượng).
Một lập trình viên C ++ có thể gọi nó là một hàm hoặc đôi khi là một phương thức (tùy thuộc vào việc họ đang viết mã c ++ theo kiểu thủ tục hay đang thực hiện theo cách hướng đối tượng của C ++, cũng là một lập trình viên C / C ++ có thể gọi nó là một hàm vì thuật ngữ 'phương thức' là ít được sử dụng trong tài liệu C / C ++).
Bạn sử dụng một chức năng bằng cách chỉ gọi tên của nó như,
result = mySum(num1, num2);
Bạn sẽ gọi một phương thức bằng cách tham chiếu đối tượng của nó trước tiên như,
result = MyCalc.mySum(num1,num2);
Trong lịch sử, có thể có một sự khác biệt tinh tế với một "phương thức" là một thứ không trả về giá trị và một "hàm" nào đó. Ngôn ngữ này có từ vựng riêng có nghĩa đặc biệt.
Trong "C" , từ "hàm" có nghĩa là một thói quen của chương trình .
Trong Java , thuật ngữ "hàm" không có bất kỳ ý nghĩa đặc biệt nào. Trong khi đó "phương thức" có nghĩa là một trong những thói quen hình thành nên việc thực hiện một lớp.
Trong C # sẽ dịch là:
public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function
Nhưng thực sự, tôi nhắc lại rằng thực sự không có sự khác biệt trong 2 khái niệm. Nếu bạn sử dụng thuật ngữ "hàm" trong các cuộc thảo luận không chính thức về Java, mọi người sẽ cho rằng bạn có nghĩa là "phương thức" và tiếp tục. Đừng sử dụng nó trong các tài liệu hoặc bài thuyết trình thích hợp về Java, nếu không bạn sẽ trông thật ngớ ngẩn.
method
... hoặc tôi sẽ gọi nó procedure
và function
.
Chức năng là một tập hợp logic có thể được sử dụng để thao tác dữ liệu.
Trong khi, Phương thức là hàm được sử dụng để thao tác dữ liệu của đối tượng nơi nó thuộc về. Vì vậy, về mặt kỹ thuật, nếu bạn có một hàm không hoàn toàn liên quan đến lớp của bạn nhưng được khai báo trong lớp, thì đó không phải là một phương thức; Nó được gọi là một thiết kế xấu.
Các phương thức trên một lớp hoạt động theo thể hiện của lớp, được gọi là đối tượng.
class Example
{
public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".
public void UpdateData() // .. and manipulates it (This is a method by the way)
{
data = data + 1;
}
public void PrintData() // This is also a method
{
Console.WriteLine(data);
}
}
class Program
{
public static void Main()
{
Example exampleObject1 = new Example();
Example exampleObject2 = new Example();
exampleObject1.UpdateData();
exampleObject1.UpdateData();
exampleObject2.UpdateData();
exampleObject1.PrintData(); // Prints "2"
exampleObject2.PrintData(); // Prints "1"
}
}
Trong các ngôn ngữ OO như Object Pascal hoặc C ++, "phương thức" là một hàm được liên kết với một đối tượng. Vì vậy, ví dụ, một đối tượng "Dog" có thể có chức năng "sủa" và điều này sẽ được coi là "Phương thức". Ngược lại, hàm "StrLen" đứng độc lập (nó cung cấp độ dài của chuỗi được cung cấp dưới dạng đối số). Do đó, nó chỉ là một "chức năng." Javascript cũng hướng đối tượng về mặt kỹ thuật nhưng phải đối mặt với nhiều hạn chế so với ngôn ngữ toàn diện như C ++, C # hoặc Pascal. Tuy nhiên, sự phân biệt vẫn nên giữ.
Một vài sự thật bổ sung: C # hoàn toàn hướng đối tượng để bạn không thể tạo các "hàm" độc lập. Trong C #, mọi hàm được liên kết với một đối tượng và do đó, về mặt kỹ thuật, là một "phương thức". Các kicker là rất ít người trong C # gọi chúng là "phương thức" - họ chỉ sử dụng thuật ngữ "hàm" bởi vì không có sự phân biệt thực sự nào được thực hiện.
Cuối cùng - chỉ để bất kỳ bậc thầy về Pascal nào không nhảy vào tôi ở đây - Pascal cũng phân biệt giữa "hàm" (trả về giá trị) và "thủ tục" không. C # không thực hiện phân biệt này một cách rõ ràng mặc dù dĩ nhiên, bạn có thể chọn trả về giá trị hay không.
Vì bạn đã đề cập đến Python, sau đây có thể là một minh họa hữu ích về mối quan hệ giữa các phương thức và đối tượng trong hầu hết các ngôn ngữ hướng đối tượng hiện đại. Tóm lại, cái mà họ gọi là "phương thức" chỉ là một hàm được thông qua một đối số phụ (như các câu trả lời khác đã chỉ ra), nhưng Python làm cho nó rõ ràng hơn hầu hết các ngôn ngữ.
# perfectly normal function
def hello(greetee):
print "Hello", greetee
# generalise a bit (still a function though)
def greet(greeting, greetee):
print greeting, greetee
# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
print greeter.greeting, greetee
# very simple class we can pass to greet_with_greeter
class Greeter(object):
def __init__(self, greeting):
self.greeting = greeting
# while we're at it, here's a method that uses self.greeting...
def greet(self, greetee):
print self.greeting, greetee
# save an object of class Greeter for later
hello_greeter = Greeter("Hello")
# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")
Bây giờ so sánh hàm greet_with_greeter
và phương thức greet
: sự khác biệt duy nhất là tên của tham số đầu tiên (trong hàm tôi gọi nó là "lời chào", trong phương thức tôi gọi nó là "tự"). Vì vậy, tôi có thể sử dụng greet
phương thức theo cách chính xác giống như tôi sử dụng greet_with_greeter
hàm (sử dụng cú pháp "dấu chấm" để lấy nó, vì tôi đã định nghĩa nó trong một lớp):
Greeter.greet(hello_greeter, "World")
Vì vậy, tôi đã biến một phương thức thành một hàm một cách hiệu quả. Tôi có thể biến một hàm thành một phương thức không? Chà, vì Python cho phép bạn gây rối với các lớp sau khi chúng được xác định, hãy thử:
Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")
Vâng, chức năng greet_with_greeter
bây giờ còn được gọi là phương thức greet2
. Điều này cho thấy sự khác biệt thực sự duy nhất giữa một phương thức và một hàm: khi bạn gọi một phương thức "bật" một đối tượng bằng cách gọi object.method(args)
, ngôn ngữ sẽ biến nó thành một cách kỳ diệu method(object, args)
.
(Những người theo chủ nghĩa thuần túy OO có thể cho rằng một phương thức khác với hàm và nếu bạn vào Python hoặc Ruby nâng cao - hoặc Smalltalk! - bạn sẽ bắt đầu thấy quan điểm của họ. Ngoài ra, một số ngôn ngữ cung cấp cho phương thức quyền truy cập đặc biệt vào các bit của đối tượng. Nhưng sự khác biệt về khái niệm chính vẫn là tham số phụ ẩn.)
đối với tôi: chức năng của một phương thức và một chức năng là như nhau nếu tôi đồng ý rằng:
Giống như bất kỳ đoạn mã nào bạn có thể có các đối tượng bạn đặt vào và bạn có thể có một đối tượng đi kèm. Trong khi làm điều đó họ có thể thay đổi trạng thái của một đối tượng nhưng điều đó sẽ không thay đổi chức năng cơ bản của họ đối với tôi.
Có thể có một định nghĩa khác nhau trong chức năng gọi của các đối tượng hoặc các mã khác. Nhưng đó không phải là thứ gì đó cho sự khác biệt bằng lời nói và đó là lý do tại sao mọi người trao đổi chúng? Các ví dụ đề cập đến tính toán tôi sẽ cẩn thận với. bởi vì tôi thuê người làm để tính toán:
new Employer().calculateSum( 8, 8 );
Bằng cách đó, tôi có thể dựa vào một chủ nhân chịu trách nhiệm tính toán. Nếu anh ta muốn có nhiều tiền hơn, tôi giải phóng anh ta và để cho người thu gom rác có chức năng xử lý những nhân viên không sử dụng làm phần còn lại và nhận một nhân viên mới.
Ngay cả lập luận rằng một phương thức là một hàm đối tượng và một hàm là tính toán không được kết nối sẽ không giúp tôi. Bản thân bộ mô tả hàm và lý tưởng là tài liệu của hàm sẽ cho tôi biết những gì nó cần và những gì nó có thể trả về. Phần còn lại, như thao túng trạng thái của một số đối tượng không thực sự minh bạch đối với tôi. Tôi thực sự mong đợi cả chức năng và phương thức cung cấp và thao tác những gì họ yêu cầu mà không cần phải biết chi tiết cách họ thực hiện. Ngay cả một hàm tính toán thuần túy cũng có thể thay đổi trạng thái của giao diện điều khiển hoặc nối vào logfile.
Theo hiểu biết của tôi, một phương thức là bất kỳ hoạt động nào có thể được thực hiện trên một lớp. Nó là một thuật ngữ chung được sử dụng trong lập trình.
Trong nhiều ngôn ngữ, các phương thức được biểu diễn bởi các hàm và chương trình con. Sự khác biệt chính mà hầu hết các ngôn ngữ sử dụng cho các ngôn ngữ này là các hàm có thể trả lại giá trị cho người gọi và chương trình con có thể không. Tuy nhiên, nhiều ngôn ngữ hiện đại chỉ có chức năng, nhưng chúng không thể trả về bất kỳ giá trị nào.
Ví dụ: giả sử bạn muốn mô tả một con mèo và bạn muốn điều đó có thể ngáp. Bạn sẽ tạo một lớp Cat, với phương thức Ngáp, rất có thể là một hàm không có giá trị trả về.
Theo một xấp xỉ thứ tự đầu tiên, một phương thức (theo kiểu CO OO) là một từ khác cho một hàm thành viên, đó là một hàm là một phần của một lớp.
Trong các ngôn ngữ như C / C ++, bạn có thể có các hàm không phải là thành viên của một lớp; bạn không gọi một hàm không liên quan đến một lớp là một phương thức.
Hàm là khái niệm chủ yếu thuộc về lập trình hướng thủ tục trong đó hàm là một thực thể có thể xử lý dữ liệu và trả về giá trị cho bạn
Phương thức là khái niệm về lập trình hướng đối tượng trong đó phương thức là thành viên của lớp mà phần lớn thực hiện xử lý trên các thành viên của lớp.
Người IMHO chỉ muốn phát minh ra từ mới để giao tiếp dễ dàng hơn giữa các lập trình viên khi họ muốn đề cập đến các chức năng bên trong các đối tượng.
Nếu bạn đang nói các phương thức, bạn có nghĩa là các hàm bên trong lớp. Nếu bạn đang nói các hàm, bạn có nghĩa là các hàm đơn giản bên ngoài lớp.
Sự thật là cả hai từ được sử dụng để mô tả chức năng. Ngay cả khi bạn sử dụng sai, không có gì sai xảy ra. Cả hai từ mô tả tốt những gì bạn muốn đạt được trong mã của bạn.
Chức năng là một mã phải đóng một vai trò ( một chức năng ) để làm một cái gì đó. Phương pháp là một phương pháp để giải quyết vấn đề.
Nó làm điều tương tự. Đó là điều tương tự. Nếu bạn muốn siêu chính xác và tuân theo quy ước, bạn có thể gọi các phương thức là các hàm bên trong các đối tượng.
Tôi không phải là một chuyên gia, nhưng đây là những gì tôi biết:
Hàm là thuật ngữ ngôn ngữ C, nó dùng để chỉ một đoạn mã và tên hàm sẽ là định danh để sử dụng hàm này.
Phương thức là thuật ngữ OO, thông thường nó có một con trỏ này trong tham số hàm. Bạn không thể gọi đoạn mã này như C, bạn cần sử dụng đối tượng để gọi nó.
Các phương thức gọi cũng khác nhau. Ở đây gọi ý nghĩa để tìm địa chỉ của đoạn mã này. C / C ++, thời gian liên kết sẽ sử dụng ký hiệu hàm để định vị.
Objecive-C thì khác. Gọi hàm C để sử dụng cấu trúc dữ liệu để tìm địa chỉ. Nó có nghĩa là tất cả mọi thứ được biết đến trong thời gian chạy.
Tôi biết nhiều người khác đã trả lời, nhưng tôi thấy sau đây là một câu trả lời đơn giản nhưng hiệu quả. Mặc dù nó không tốt hơn nhiều so với câu trả lời của người khác ở đây, nhưng nếu bạn đọc kỹ, nó có mọi thứ bạn cần biết về phương thức vs hàm.
Phương thức là một hàm có một máy thu được xác định, theo thuật ngữ OOP, phương thức là một hàm trên một thể hiện của một đối tượng.
Từ việc đọc tài liệu này trên Microsoft
Các thành viên có chứa mã thực thi được gọi chung là các thành viên chức năng của một lớp. Phần trước mô tả các phương thức, là loại thành viên chính của hàm. Phần này mô tả các loại thành viên chức năng khác được hỗ trợ bởi C #: constructor, thuộc tính, bộ chỉ mục, sự kiện, toán tử và bộ hoàn thiện.
Vì vậy, các phương thức là tập hợp con của các hàm. Mọi phương thức là một hàm nhưng không phải mọi hàm đều là một phương thức, ví dụ, constructor
không thể nói là một phương thức mà nó là một hàm.
Hàm - Một hàm trong một đoạn mã độc lập bao gồm một số logic và phải được gọi độc lập và được định nghĩa bên ngoài lớp.
Phương thức - Phương thức là một đoạn mã độc lập được gọi trong tham chiếu đến một số đối tượng và được định nghĩa bên trong lớp.
Dưới đây là một số giải thích cho phương thức so với chức năng sử dụng các ví dụ JavaScript:
test(20, 50);
là chức năng xác định và sử dụng để chạy một số bước hoặc trả lại một cái gì đó có thể được lưu trữ / sử dụng ở đâu đó.
Bạn có thể sử dụng lại mã: Xác định mã một lần và sử dụng nhiều lần.
Bạn có thể sử dụng cùng một mã nhiều lần với các đối số khác nhau, để tạo ra các kết quả khác nhau.
var x = myFunction(4, 3); // Function is called, return value will end up in x
function myFunction(a, b) {
return a * b; // Function returns the product of a and b
}
var test = something.test();
ở đây test () có thể là một phương thức của một số đối tượng hoặc tùy chỉnh được xác định một nguyên mẫu cho các đối tượng sẵn có, đây là giải thích thêm:
Các phương thức JavaScript là các hành động có thể được thực hiện trên các đối tượng.
Phương thức JavaScript là thuộc tính chứa định nghĩa hàm.
Thuộc tính / phương thức tích hợp cho chuỗi trong javascript:
var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!
Ví dụ tùy chỉnh:
function person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'
Bạn cũng có thể định nghĩa các thuộc tính cho String, Array, v.v.
String.prototype.distance = function (char) {
var index = this.indexOf(char);
if (index === -1) {
console.log(char + " does not appear in " + this);
} else {
console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
}
};
var something = "ThisIsSomeString"
// now use distance like this, run and check console log
something.distance("m");
Một số tài liệu tham khảo: Phương pháp đối tượng Javascript , Hàm , Thông tin thêm về nguyên mẫu
TL; DR
Hàm là một đoạn mã để chạy.
Phương thức là một Hàm bên trong một đối tượng.
Ví dụ về hàm:
function sum(){
console.log("sum")l
}
Ví dụ về một Phương thức:
const obj = {
a:1,
b:2,
sum(){
}
}
Vì vậy, đó là lý do tại sao chúng ta nói rằng từ khóa "này" bên trong Hàm không hữu ích trừ khi chúng ta sử dụng nó với cuộc gọi, áp dụng hoặc liên kết .. bởi vì gọi, áp dụng, liên kết sẽ gọi hàm đó như một phương thức bên trong đối tượng ==> về cơ bản nó chuyển đổi chức năng thành phương thức
Chúng thường có thể hoán đổi cho nhau, nhưng một phương thức thường đề cập đến một chương trình con bên trong một lớp và một hàm thường đề cập đến một chương trình con bên ngoài lớp. ví dụ, trong Ruby:
# function
def putSqr(a)
puts a ** 2
end
class Math2
# method
def putSqr(a)
puts a ** 2
end
end
Trong Java, nơi mọi thứ (ngoại trừ các câu lệnh đóng gói và nhập khẩu) phải nằm trong lớp, mọi người hầu như luôn gọi chúng là "phương thức".