Apa perbedaan antara metode dan fungsi?

1743

Dapatkah seseorang memberikan penjelasan sederhana tentang metode vs. fungsi dalam konteks OOP?

willc2
sumber
24
Lihat juga subrutin vs fungsi , fungsi vs prosedur , coroutine .
gerrit
12
Ketika nilai properti adalah fungsi, kami menyebutnya metode
coder
2
Apa kebalikan dari suatu metode? Itu pertanyaan saya. "Fungsi" adalah konsep induk. Metode adalah jenis fungsi. Apa nama untuk jenis fungsi yang bukan metode, tapi itu bisa disebut langsung dengan nama?
Alexander Mills
Akan menarik untuk melihat penjelasan lain yang menguraikan perbedaan antara metode dan fungsi di r . Sangat menarik karena metode biasanya berisi fungsi . Jika metode adalah fungsi yang bergantung pada objek, maka fungsi yang memeriksa kelas objek if(class(object)) { ... } else {stop()}akan secara konsep setara dengan metode?
Konrad
Terminologi yang tepat dapat benar-benar bergantung pada bahasa, sehingga dapat berarti hal yang sedikit berbeda dalam konteks yang berbeda. Meski begitu, karena programmer yang bekerja dengan satu bahasa lebih dari yang lain lebih terbiasa dengan terminologi tertentu. Programmer juga dipengaruhi oleh penggunaan istilah rekan kerja mereka (apakah benar atau salah). Istilah-istilah ini sering digunakan secara bergantian. Lihat beberapa komentar di bawah ini, misalnya.
jvriesem

Jawaban:

1832

Suatu fungsi adalah bagian dari kode yang disebut dengan nama. Itu dapat melewati data untuk beroperasi pada (yaitu parameter) dan secara opsional dapat mengembalikan data (nilai kembali). Semua data yang diteruskan ke suatu fungsi diteruskan secara eksplisit.

Sebuah metode adalah bagian dari kode yang disebut dengan nama yang dikaitkan dengan objek. Dalam banyak hal itu identik dengan fungsi kecuali untuk dua perbedaan utama:

  1. Metode secara implisit melewati objek yang dipanggil.
  2. Suatu metode dapat beroperasi pada data yang terkandung di dalam kelas (mengingat bahwa objek adalah turunan dari kelas - kelas adalah definisi, objek adalah turunan dari data itu).

(ini adalah penjelasan yang disederhanakan, mengabaikan masalah ruang lingkup dll.)

Andrew Edgecombe
sumber
249
Untuk 1), Anda juga harus menambahkan bahwa metode dalam C ++ disebut fungsi anggota . Dengan demikian, perbedaan antara fungsi dan metode dalam konteks ini analog dengan perbedaan antara fungsi dan fungsi anggota dalam C ++. Selain itu, bahasa seperti Java hanya memiliki metode. Dalam hal ini, fungsi akan analog dengan metode statis dan metode akan memiliki arti yang sama. Untuk 2), Anda harus menambahkan bahwa metode ini mampu beroperasi pada pribadi misalnya () Data anggota dinyatakan sebagai bagian dari kelas. Kode apa pun dapat mengakses data instance publik.
Raffi Khatchadourian
46
suatu fungsi adalah konstruk matematika. Saya akan mengatakan semua metode adalah fungsi tetapi tidak semua fungsi adalah metode
Tyler Gillies
29
Berasal dari latar belakang pemrograman fungsional, saya merasa ada perbedaan besar antara fungsi dan metode. Terutama metode memiliki efek samping, dan bahwa fungsi harus murni sehingga memberikan sifat transparansi referensial yang agak bagus
HHC
26
@ TylerGillies dan HHC, saya setuju mungkin lebih baik jika "fungsi" dan "metode" berarti apa yang Anda inginkan, tetapi definisi Anda tidak mencerminkan beberapa penggunaan istilah-istilah tersebut yang sangat umum.
Paul Draper
9
Dengan definisi ini, bukankah metode statis tidak benar-benar dianggap sebagai metode karena tidak ada hubungannya dengan contoh tertentu?
Carcigenicate
963

Suatu metode ada pada suatu objek.
Fungsi tidak tergantung pada suatu objek.

Untuk Java dan C #, hanya ada metode.
Untuk C, hanya ada fungsi.

Untuk C ++ dan Python akan tergantung pada apakah Anda berada di kelas atau tidak.

Harun
sumber
39
Saatnya menambahkan C #.
Rosdi Kasim
7
@RosdiKasim Untuk C #, hanya ada metode. (Karena bahkan metode statis perlu dikaitkan dengan suatu objek)
Lynn Crumbling
38
Bagaimana dengan metode statis di kelas? Itu akan independen dari suatu objek (dalam java). Bukankah itu suatu fungsi?
Squeazer
12
@Squeazer Ada pertanyaan tentang itu baru-baru ini stackoverflow.com/questions/30402169/... Spesifikasi Bahasa Jawa hanya membedakan mereka sebagai "metode kelas" (statis) dan "metode contoh". Jadi mereka masih semua metode.
xji
15
Java memiliki ekspresi lambda, yang merupakan fungsi yang bukan metode
Max Heiber
228

'metode' adalah kata berorientasi objek untuk 'fungsi' . Cukup banyak yang ada di sana (mis., Tidak ada perbedaan nyata).

Sayangnya, saya pikir banyak jawaban di sini adalah mengabadikan atau memajukan gagasan bahwa ada beberapa perbedaan yang kompleks dan bermakna.

Sungguh - tidak ada yang terlalu banyak, hanya kata-kata yang berbeda untuk hal yang sama.

[tambahan terlambat]


Bahkan, seperti yang ditunjukkan Brian Neal dalam komentar untuk pertanyaan ini , standar C ++ tidak pernah menggunakan istilah 'metode' ketika merujuk ke fungsi anggota. Beberapa orang mungkin menganggap itu sebagai indikasi bahwa C ++ sebenarnya bukan bahasa berorientasi objek; Namun, saya lebih suka menganggapnya sebagai indikasi bahwa sekelompok orang yang cukup pintar tidak berpikir ada alasan kuat untuk menggunakan istilah yang berbeda.

Michael Burr
sumber
14
Metode adalah tipe fungsi khusus dengan argumen implisit yang diberikan (turunan dari kelas yang didefinisikan oleh metode tersebut). Ini penting karena fungsi, dalam istilah yang ketat, tidak boleh menggunakan atau memodifikasi apa pun yang tidak ada dalam daftar argumennya.
ty1824
4
@ ty1824 tidak selalu halnya metode dilewatkan argumen implisit. Dalam Python, selfargumennya eksplisit. Dan banyak bahasa memiliki metode statis, yang tidak lulus instance.
Max Heiber
1
@mheiber itu adalah beberapa poin yang valid. Sehubungan dengan diri, Anda benar, itu didefinisikan secara eksplisit . Kuncinya adalah bahwa panggilan itu implisit, berdasarkan referensi objek asli. Ada bahasa yang mendukung overriding a thisatau self, tetapi konstruksi tersebut kemudian biasanya disebut sebagai fungsi, bukan metode.
ty1824
1
@mheiber Sejauh menyangkut metode statis - java menerapkannya sebagai solusi sehingga fungsi dapat diimplementasikan tanpa memerlukan konteks. Saya akan melangkah lebih jauh dengan mengusulkan bahwa 'metode statis' adalah istilah yang menyesatkan dan harus diganti ... dalam dunia teoretis yang ideal :)
ty1824
1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript, dan Scala semuanya memiliki metode statis, jadi saya tidak berpikir itu hanya hal Java. Saya juga tidak suka: mereka sama dengan menggunakan objek (bundel negara) seolah-olah mereka ruang nama.
Max Heiber
99

Secara umum: metode adalah fungsi yang dimiliki kelas, fungsi dapat berada pada ruang lingkup kode yang lain sehingga Anda dapat menyatakan bahwa semua metode adalah fungsi, tetapi tidak semua fungsi adalah metode:

Ambil contoh python berikut:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

Contoh yang diberikan menunjukkan kepada Anda kelas yang disebut "Pintu" yang memiliki metode atau tindakan yang disebut "terbuka", itu disebut metode karena dideklarasikan di dalam kelas. Ada bagian lain dari kode dengan "def" tepat di bawahnya yang mendefinisikan fungsi, itu adalah fungsi karena tidak dideklarasikan di dalam kelas, fungsi ini memanggil metode yang kita definisikan di dalam kelas kita seperti yang dapat Anda lihat dan akhirnya fungsi tersebut sedang disebut dengan sendirinya.

Seperti yang Anda lihat, Anda dapat memanggil fungsi di mana saja tetapi jika Anda ingin memanggil metode, Anda harus melewati objek baru dengan tipe yang sama dengan kelas, metode tersebut dideklarasikan (Class.method (objek)) atau Anda harus memanggil metode di dalam objek (object.Method ()), setidaknya dalam python.

Pikirkan metode sebagai hal yang hanya dapat dilakukan oleh satu entitas, jadi jika Anda memiliki kelas Dog, masuk akal untuk memiliki fungsi kulit hanya di dalam kelas itu dan itu akan menjadi metode, jika Anda juga memiliki kelas Person, masuk akal untuk tulis fungsi "feed" untuk itu bukan milik kelas mana pun karena manusia dan anjing dapat diberi makan dan Anda dapat menyebutnya fungsi karena tidak termasuk kelas mana pun pada khususnya.

Gustavo Rubio
sumber
2
Jawaban ini --- kebanyakan kalimat pertamanya --- sejauh ini merupakan jawaban terbaik yang paling ringkas dan keseluruhan untuk pertanyaan itu.
yourcomputergenius
61

Cara mudah untuk mengingat:

  • F unction → F ree (Gratis berarti bukan milik suatu objek atau kelas)
  • M ethod → M bara (A anggota dari suatu obyek atau kelas)
Duc Filan
sumber
karena biasanya ada yang bisa dipertukarkan, mengapa Anda membutuhkan mnemonik?
Sapphire_Brick
44

Definisi yang sangat umum tentang perbedaan utama antara Fungsi dan Metode :

Fungsi didefinisikan di luar kelas, sedangkan Metode didefinisikan di dalam dan bagian dari kelas.

Jorgesys
sumber
30

Jika Anda merasa ingin membaca di sini adalah "Pengantar saya untuk metode OO"

Gagasan di balik paradigma Berorientasi Objek adalah untuk "mengancam" perangkat lunak ini terdiri dari .. baik "objek". Objek di dunia nyata memiliki properti, misalnya jika Anda memiliki Karyawan, karyawan memiliki nama, id karyawan, posisi, ia milik departemen dll. Dll.

Objek juga tahu bagaimana menangani atributnya dan melakukan beberapa operasi pada mereka. Katakanlah jika kita ingin tahu apa yang sedang dilakukan karyawan saat ini, kita akan bertanya kepadanya.

employe whatAreYouDoing.

"WhatAreYouDoing" itu adalah "pesan" yang dikirim ke objek. Objek tahu bagaimana menjawab pertanyaan itu, dikatakan memiliki "metode" untuk menyelesaikan pertanyaan.

Jadi, cara benda harus mengekspos perilakunya disebut metode. Metode demikian adalah objek artefak harus "melakukan" sesuatu.

Metode lain yang mungkin adalah

employee whatIsYourName
employee whatIsYourDepartmentsName

dll.

Fungsi di sisi lain adalah cara bahasa pemrograman harus menghitung beberapa data, misalnya Anda mungkin memiliki fungsi addValues ​​(8, 8) yang mengembalikan 16

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

Karena bahasa pemrograman populer pertama (seperti fortran, c, pascal) tidak mencakup paradigma OO, mereka hanya memanggil "fungsi" artefak ini.

misalnya fungsi sebelumnya dalam C adalah:

int addValues( int x, int y ) 
{
   return x + y;
}

Bukanlah "alami" untuk mengatakan suatu objek memiliki "fungsi" untuk melakukan beberapa tindakan, karena fungsi lebih terkait dengan hal-hal matematika sementara seorang Karyawan memiliki sedikit matematika di dalamnya, tetapi Anda dapat memiliki metode yang melakukan persis sama dengan fungsi, misalnya di Jawa ini akan menjadi fungsi addValues ​​yang setara.

public static int addValues( int x, int y ) {
    return x + y;
}

Terlihat tidak asing? Itu karena Java berakar pada C ++ dan C ++ pada C.

Pada akhirnya hanya sebuah konsep, dalam implementasinya mereka mungkin terlihat sama, tetapi dalam dokumentasi OO ini disebut metode.

Ini adalah contoh objek Karyawan yang sebelumnya ada di Jawa.

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.

Perbedaannya kemudian, adalah pada "domain" di mana ia diterapkan.

AppleScript memiliki ide "bahasa alami" matphor, yang pada beberapa titik OO miliki. Misalnya Smalltalk. Saya harap mungkin lebih mudah bagi Anda untuk memahami metode dalam objek setelah membaca ini.

CATATAN: Kode ini tidak dapat dikompilasi, hanya sebagai contoh. Jangan ragu untuk memodifikasi posting dan menambahkan contoh Python.

OscarRyz
sumber
3
Bravo! Eksposisi brilian tentang bagaimana metode adalah perintah ke objek. Ini adalah kunci untuk memahami OO dan kurangnya retorika yang Anda tampilkan dalam jawaban ini adalah mengapa OO sangat dilecehkan dalam industri saat ini. Pos luar biasa.
moffdub
18

Dalam dunia OO, keduanya biasanya digunakan untuk mengartikan hal yang sama.

Dari perspektif Matematika dan CS murni, suatu fungsi akan selalu mengembalikan hasil yang sama ketika dipanggil dengan argumen yang sama (f (x, y) = (x + y)). Metode di sisi lain, biasanya terkait dengan turunan kelas. Sekali lagi, sebagian besar bahasa OO modern tidak lagi menggunakan istilah "fungsi" untuk sebagian besar. Banyak metode statis bisa sangat mirip fungsi, karena biasanya tidak memiliki keadaan (tidak selalu benar).

Perangkat LunakJedi
sumber
17

Katakanlah fungsi adalah blok kode (biasanya dengan cakupannya sendiri, dan terkadang dengan penutupannya sendiri) yang mungkin menerima beberapa argumen dan mungkin juga mengembalikan hasilnya.

Metode adalah fungsi yang dimiliki oleh objek (dalam beberapa sistem berorientasi objek, lebih tepat untuk mengatakan itu dimiliki oleh kelas). Menjadi "dimiliki" oleh objek / kelas berarti Anda merujuk ke metode melalui objek / kelas; misalnya, di Jawa jika Anda ingin memanggil metode "open ()" yang dimiliki oleh objek "door", Anda perlu menulis "door.open ()".

Biasanya metode juga memperoleh beberapa atribut tambahan yang menggambarkan perilaku mereka di dalam objek / kelas, misalnya: visibilitas (terkait dengan konsep berorientasi objek enkapsulasi) yang mendefinisikan dari objek mana (atau kelas) metode dapat dipanggil.

Dalam banyak bahasa berorientasi objek, semua "fungsi" milik beberapa objek (atau kelas) dan dalam bahasa ini tidak ada fungsi yang bukan metode.

Mike Tunnicliffe
sumber
1
Saya tegaskan bahwa metode dapat dimiliki oleh suatu objek atau kelas karena Javascript (yang Anda sebutkan dalam pertanyaan Anda) adalah salah satu bahasa yang menghasilkan tren umum bahasa berorientasi objek dengan memiliki metode yang dimiliki oleh objek dan bukan kelas (meskipun struktur yang mirip dengan kelas ada).
Mike Tunnicliffe
15

Metode adalah fungsi dari kelas. Dalam jargon normal, orang-orang saling bertukar metode dan fungsi. Pada dasarnya Anda dapat menganggap mereka sebagai hal yang sama (tidak yakin apakah fungsi global disebut metode).

http://en.wikipedia.org/wiki/Method_(computer_science)

Pernyataan
sumber
13

Fungsi adalah konsep matematika. Sebagai contoh:

f(x,y) = sin(x) + cos(y)

mengatakan bahwa fungsi f () akan mengembalikan dosa dari parameter pertama yang ditambahkan ke cosinus dari parameter kedua. Itu hanya matematika. Ketika itu terjadi dosa () dan cos () juga berfungsi. Fungsi memiliki properti lain: semua panggilan ke fungsi dengan parameter yang sama, harus mengembalikan hasil yang sama.

Metode, di sisi lain, adalah fungsi yang terkait dengan objek dalam bahasa berorientasi objek. Ini memiliki satu parameter implisit: objek yang ditindaklanjuti (dan statusnya).

Jadi, jika Anda memiliki objek Z dengan metode g (x), Anda mungkin melihat yang berikut:

Z.g(x) = sin(x) + cos(Z.y)

Dalam hal ini, parameter x dilewatkan, sama seperti pada contoh fungsi sebelumnya. Namun, parameter to cos () adalah nilai yang hidup di dalam objek Z. Z dan data yang tinggal di dalamnya (Zy) adalah parameter implisit ke metode Z's g ().

Bradley Mazurek
sumber
13

Fungsi atau metode adalah bagian kode yang dapat dipanggil yang melakukan beberapa operasi dan secara opsional mengembalikan nilai.

Dalam bahasa C istilah fungsi digunakan. Java & C # akan mengatakannya sebagai metode (dan fungsi dalam kasus ini didefinisikan dalam kelas / objek).

A C ++ programmer mungkin menyebutnya fungsi atau kadang-kadang metode (tergantung pada apakah mereka menulis gaya prosedural kode C ++ atau sedang melakukan cara berorientasi objek dari C ++, juga seorang programmer C / C ++ hanya akan menyebutnya fungsi karena istilah 'metode' adalah lebih jarang digunakan dalam literatur C / C ++).

Anda menggunakan fungsi hanya dengan memanggil namanya,

result = mySum(num1, num2);


Anda akan memanggil metode dengan merujuk objeknya terlebih dahulu seperti,

result = MyCalc.mySum(num1,num2);
Abdullah Leghari
sumber
13

Secara historis, mungkin ada perbedaan halus dengan "metode" menjadi sesuatu yang tidak mengembalikan nilai, dan "fungsi" yang tidak. Setiap bahasa memiliki leksikon istilah sendiri dengan makna khusus.

Dalam "C" , kata "fungsi" berarti program rutin .

Di Jawa , istilah "fungsi" tidak memiliki arti khusus. Sedangkan "metode" berarti salah satu rutinitas yang membentuk implementasi suatu kelas.

Dalam C # yang akan diterjemahkan sebagai:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

Tapi sungguh, saya mengulangi bahwa sebenarnya tidak ada perbedaan dalam 2 konsep. Jika Anda menggunakan istilah "fungsi" dalam diskusi informal tentang Jawa, orang akan menganggap Anda bermaksud "metode" dan melanjutkan. Jangan menggunakannya dalam dokumen atau presentasi yang tepat tentang Java, atau Anda akan terlihat konyol.

Jaimin Patel
sumber
Sebenarnya, dalam contoh Anda keduanya method... atau saya akan menyebutnya proceduredan function.
Yousha Aleayoub
9

Fungsi adalah seperangkat logika yang dapat digunakan untuk memanipulasi data.

Sedangkan, Metode adalah fungsi yang digunakan untuk memanipulasi data dari objek di mana ia berada. Jadi secara teknis, jika Anda memiliki fungsi yang tidak sepenuhnya terkait dengan kelas Anda tetapi dideklarasikan di kelas, itu bukan metode; Ini disebut desain yang buruk.


sumber
8

Metode pada kelas bertindak atas instance kelas, yang disebut objek.

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"
   }
}
Pernyataan
sumber
8

Dalam bahasa OO seperti Object Pascal atau C ++, "metode" adalah fungsi yang terkait dengan objek. Jadi, misalnya, objek "Anjing" mungkin memiliki fungsi "kulit" dan ini akan dianggap sebagai "Metode". Sebaliknya, fungsi "StrLen" berdiri sendiri (ini menyediakan panjang string yang disediakan sebagai argumen). Dengan demikian, ini hanyalah "fungsi". Javascript secara teknis juga Berorientasi Objek tetapi menghadapi banyak keterbatasan dibandingkan dengan bahasa lengkap seperti C ++, C # atau Pascal. Meskipun demikian, perbedaannya harus tetap berlaku.

Beberapa fakta tambahan: C # sepenuhnya berorientasi objek sehingga Anda tidak dapat membuat "fungsi" mandiri. Dalam C # setiap fungsi terikat ke objek dan dengan demikian, secara teknis, "metode." Kicker adalah bahwa beberapa orang di C # menyebutnya sebagai "metode" - mereka hanya menggunakan istilah "fungsi" karena tidak ada perbedaan nyata yang harus dibuat.

Akhirnya - supaya guru Pascal tidak melompat ke sini - Pascal juga membedakan antara "fungsi" (yang mengembalikan nilai) dan "prosedur" yang tidak. C # tidak membuat perbedaan ini secara eksplisit walaupun Anda tentu saja dapat memilih untuk mengembalikan nilai atau tidak.

Mark Brittingham
sumber
8

Karena Anda menyebutkan Python, berikut ini mungkin ilustrasi yang berguna tentang hubungan antara metode dan objek di sebagian besar bahasa berorientasi objek modern. Singkatnya apa yang mereka sebut "metode" hanyalah sebuah fungsi yang dapat melewati argumen tambahan (seperti jawaban lain telah menunjukkan), tetapi Python membuatnya lebih eksplisit daripada kebanyakan bahasa.

# 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")

Sekarang bandingkan fungsi greet_with_greeterdan metode greet: satu-satunya perbedaan adalah nama parameter pertama (dalam fungsi saya menyebutnya "penyapa", dalam metode yang saya sebut "mandiri"). Jadi saya bisa menggunakan greetmetode ini dengan cara yang persis sama seperti saya menggunakan greet_with_greeterfungsi (menggunakan sintaks "dot" untuk mendapatkannya, karena saya mendefinisikannya di dalam kelas):

Greeter.greet(hello_greeter, "World")

Jadi saya telah secara efektif mengubah metode menjadi fungsi. Bisakah saya mengubah fungsi menjadi metode? Nah, karena Python memungkinkan Anda mengacaukan kelas setelah ditentukan, mari kita coba:

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

Ya, fungsinya greet_with_greetersekarang juga dikenal sebagai metode greet2. Ini menunjukkan satu-satunya perbedaan nyata antara metode dan fungsi: ketika Anda memanggil metode "pada" objek dengan memanggil object.method(args), bahasa secara ajaib mengubahnya menjadi method(object, args).

(OO purists mungkin berpendapat metode adalah sesuatu yang berbeda dari suatu fungsi, dan jika Anda masuk ke Python atau Ruby canggih - atau Smalltalk! - Anda akan mulai melihat maksud mereka. Juga beberapa bahasa memberikan metode akses khusus ke bit suatu objek. Tetapi perbedaan konseptual utama masih merupakan parameter tambahan tersembunyi.)

Sam Stokes
sumber
7

bagi saya: fungsi metode dan fungsi adalah sama jika saya setuju bahwa:

  • suatu fungsi dapat mengembalikan nilai
  • mungkin mengharapkan parameter

Sama seperti potongan kode yang Anda mungkin memiliki objek yang Anda masukkan dan Anda mungkin memiliki objek yang datang sebagai hasilnya. Selama melakukan itu mereka mungkin mengubah keadaan suatu objek tetapi itu tidak akan mengubah fungsi dasar mereka untuk saya.

Mungkin ada perbedaan definisi dalam fungsi panggilan objek atau kode lainnya. Tapi bukankah itu sesuatu untuk perbedaan verbal dan itu sebabnya orang menukar mereka? Menyebutkan contoh perhitungan yang akan saya lakukan dengan hati-hati. karena saya mempekerjakan karyawan untuk melakukan perhitungan saya:

new Employer().calculateSum( 8, 8 );

Dengan melakukannya dengan cara itu saya dapat mengandalkan majikan yang bertanggung jawab atas perhitungan. Jika dia menginginkan lebih banyak uang, saya membebaskannya dan membiarkan fungsi pemulung membuang karyawan yang tidak digunakan melakukan sisanya dan mendapatkan karyawan baru.

Bahkan berpendapat bahwa metode adalah fungsi objek dan fungsi komputasi yang tidak terhubung tidak akan membantu saya. Deskriptor fungsi itu sendiri dan idealnya dokumentasi fungsi akan memberi tahu saya apa yang dibutuhkan dan apa yang dapat dikembalikan. Selebihnya, seperti memanipulasi keadaan beberapa objek tidak terlalu transparan bagi saya. Saya benar-benar mengharapkan fungsi dan metode untuk menyampaikan dan memanipulasi apa yang mereka klaim tanpa perlu tahu secara rinci bagaimana mereka melakukannya. Bahkan fungsi komputasi murni dapat mengubah status konsol atau menambahkan ke file log.

Dirk Schumacher
sumber
5

Jangan terlalu menyulitkan apa yang seharusnya menjadi jawaban yang sangat sederhana. Metode dan fungsi adalah hal yang sama. Anda memanggil suatu fungsi fungsi ketika itu di luar kelas, dan Anda memanggil fungsi suatu metode ketika itu ditulis di dalam kelas.

SamyCode
sumber
4

Dari pemahaman saya, metode adalah operasi apa pun yang dapat dilakukan di kelas. Ini adalah istilah umum yang digunakan dalam pemrograman.

Dalam banyak bahasa metode diwakili oleh fungsi dan subrutin. Perbedaan utama yang digunakan sebagian besar bahasa untuk ini adalah bahwa fungsi dapat mengembalikan nilai kembali ke pemanggil dan subrutin mungkin tidak. Namun banyak bahasa modern hanya memiliki fungsi, tetapi ini secara opsional tidak dapat mengembalikan nilai apa pun.

Misalnya, katakanlah Anda ingin menggambarkan kucing dan Anda ingin itu menguap. Anda akan membuat kelas Cat, dengan metode Menguap, yang kemungkinan besar akan berfungsi tanpa nilai balik.

marcj
sumber
4

Untuk pendekatan urutan pertama, metode (dalam gaya C ++ OO) adalah kata lain untuk fungsi anggota, yaitu fungsi yang merupakan bagian dari kelas.

Dalam bahasa seperti C / C ++ Anda dapat memiliki fungsi yang bukan anggota kelas; Anda tidak memanggil fungsi yang tidak terkait dengan metode kelas.

Kapten Segfault
sumber
4

Fungsi adalah konsep yang terutama dimiliki oleh pemrograman berorientasi Prosedur di mana fungsi adalah suatu entitas yang dapat memproses data dan mengembalikan nilai Anda

Metode adalah konsep pemrograman Berorientasi Objek di mana metode adalah anggota kelas yang sebagian besar melakukan pemrosesan pada anggota kelas.

Akshay Khale
sumber
3

Orang IMHO hanya ingin menciptakan kata baru untuk komunikasi yang lebih mudah antara programmer ketika mereka ingin merujuk ke fungsi di dalam objek.

Jika Anda mengatakan metode, berarti fungsi di dalam kelas. Jika Anda mengatakan fungsi yang Anda maksud hanyalah fungsi di luar kelas.

Yang benar adalah kedua kata tersebut digunakan untuk menggambarkan fungsi. Bahkan jika Anda menggunakannya dengan salah, tidak ada yang salah terjadi. Kedua kata tersebut menggambarkan dengan baik apa yang ingin Anda capai dalam kode Anda.

Fungsi adalah kode yang harus memainkan peran ( fungsi ) dalam melakukan sesuatu. Metode adalah metode untuk menyelesaikan masalah.

Itu melakukan hal yang sama. Itu adalah hal yang sama. Jika Anda ingin menjadi super tepat dan mengikuti konvensi Anda dapat memanggil metode sebagai fungsi di dalam objek.

Morfidon
sumber
2

Saya bukan ahli, tapi ini yang saya tahu:

  1. Fungsi adalah istilah bahasa C, ini merujuk pada sepotong kode dan nama fungsi akan menjadi pengidentifikasi untuk menggunakan fungsi ini.

  2. Metode adalah istilah OO, biasanya memiliki penunjuk ini di parameter fungsi. Anda tidak dapat menjalankan kode seperti C ini, Anda harus menggunakan objek untuk menjalankannya.

  3. Metode yang dipanggil juga berbeda. Di sini memohon makna untuk menemukan alamat potongan kode ini. C / C ++, waktu penautan akan menggunakan simbol fungsi untuk mencari.

  4. Objecive-C berbeda. Meminta makna fungsi C untuk menggunakan struktur data untuk menemukan alamat. Ini berarti semuanya diketahui saat dijalankan.

Marvin
sumber
2

Saya tahu banyak orang lain sudah menjawab, tetapi saya menemukan bahwa ini adalah jawaban satu baris yang sederhana namun efektif. Meskipun tidak terlihat jauh lebih baik daripada jawaban orang lain di sini, tetapi jika Anda membacanya dengan cermat, ia memiliki semua yang perlu Anda ketahui tentang fungsi metode vs.

Metode adalah fungsi yang memiliki penerima yang didefinisikan, dalam istilah OOP, metode adalah fungsi pada instance objek.

f-masyarakat
sumber
2

Perbedaan Antara Metode dan Fungsi

Dari membaca dokumen ini di Microsoft

Anggota yang berisi kode yang dapat dieksekusi secara kolektif dikenal sebagai anggota fungsi dari suatu kelas. Bagian sebelumnya menjelaskan metode, yang merupakan jenis utama anggota fungsi. Bagian ini menjelaskan jenis fungsi anggota lainnya yang didukung oleh C #: konstruktor, properti, pengindeks, peristiwa, operator, dan finalizer.

Jadi metode adalah himpunan bagian dari fungsi. Setiap metode adalah fungsi tetapi tidak setiap fungsi adalah metode, misalnya, constructortidak bisa dikatakan sebagai metode tetapi merupakan fungsi.

Siraj Alam
sumber
Properti, pengindeks, dan acara bukan fungsi. Getter, setter (untuk properti dan pengindeks), adders dan penghilang (untuk acara) adalah fungsi. Anggota fungsi adalah anggota yang terkait dengan satu fungsi atau lebih, tetapi tidak harus dengan menjadi suatu fungsi.
Jon Hanna
2

Fungsi - Suatu fungsi dalam sepotong kode independen yang mencakup beberapa logika dan harus dipanggil secara independen dan didefinisikan di luar kelas.

Metode - Metode adalah bagian independen dari kode yang disebut dalam referensi ke beberapa objek dan didefinisikan di dalam kelas.

Aditya
sumber
Apa yang Anda sebut sepotong kode di kelas statis, yang juga statis, apakah ini metode atau fungsi? Fungsi / metode statis suatu kelas tidak memerlukan objek dari kelas yang dideklarasikan.
Wolfgang Roth
1

Berikut ini beberapa penjelasan untuk metode vs. fungsi menggunakan contoh JavaScript:

test(20, 50); adalah fungsi define dan digunakan untuk menjalankan beberapa langkah atau mengembalikan sesuatu yang dapat disimpan / digunakan di suatu tempat.

Anda dapat menggunakan kembali kode: Tetapkan kode satu kali dan gunakan berkali-kali.

Anda dapat menggunakan kode yang sama berkali-kali dengan argumen yang berbeda, untuk menghasilkan hasil yang berbeda.

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(); di sini test () dapat menjadi metode dari beberapa objek atau custom prototipe untuk objek inbuilt, berikut penjelasan lebih lanjut:

Metode JavaScript adalah tindakan yang dapat dilakukan pada objek.

Metode JavaScript adalah properti yang mengandung definisi fungsi.

Properti / metode bawaan untuk string dalam javascript:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

Contoh khusus:

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'

Anda dapat mendefinisikan properti untuk String, Array, dll juga misalnya

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");

Beberapa referensi: Metode Objek Javascript , Fungsi , Info lebih lanjut tentang prototipe

Lahar Shah
sumber
Tolong jangan posting jawaban yang identik untuk beberapa pertanyaan. Posting satu jawaban yang bagus, lalu pilih / panji untuk menutup pertanyaan lain sebagai duplikat. Jika pertanyaan itu bukan duplikat, sesuaikan jawaban Anda untuk pertanyaan itu.
Paul Roub
Terima kasih atas umpan baliknya, saya tidak menyesuaikan jawaban lain, saya menghapus jawaban itu. :-)
Lahar Shah
1

TL; DR

Fungsi adalah sepotong kode untuk dijalankan.
Metode adalah Fungsi di dalam Objek.

Contoh fungsi:


function sum(){
  console.log("sum")l
}

Contoh Metode:

const obj = {
a:1,
b:2,
sum(){
  }
}

Jadi itu sebabnya kami mengatakan bahwa kata kunci "ini" di dalam suatu Fungsi tidak terlalu berguna kecuali jika kami menggunakannya dengan panggilan, terapkan atau ikat .. karena panggilan, terapkan, ikat akan memanggil fungsi itu sebagai metode di dalam objek ==> pada dasarnya mengubah fungsi menjadi metode

yogendra saxena
sumber
1

Mereka sering dipertukarkan, tetapi suatu metode biasanya merujuk ke subrutin di dalam kelas, dan fungsi biasanya mengacu pada subrutin di luar kelas. misalnya, di Ruby:

# function
def putSqr(a)
   puts a ** 2
end


class Math2
   # method
   def putSqr(a)
      puts a ** 2
   end
end

Di Jawa, di mana segala sesuatu (kecuali pernyataan paket dan impor) harus ada di dalam kelas, orang hampir selalu menyebutnya sebagai "metode".

Sapphire_Brick
sumber