it-swarm-tr.com

Bir yöntem ile işlev arasındaki fark nedir?

Birisi OOP bağlamında yöntemleri vs. functions ile basit bir açıklama yapabilir mi?

1546
willc2

Bir function, ismiyle adlandırılan bir kod parçasıdır. Üzerinde çalışmak için veri iletilebilir (yani, parametreler) ve isteğe bağlı olarak veri (geri dönüş değeri) verebilir. Bir işleve iletilen tüm veriler açıkça iletilir.

Bir yöntem, bir nesneyle ilişkilendirilmiş bir isim tarafından çağrılan bir kod parçasıdır. Çoğu bakımdan iki temel fark dışında bir fonksiyonla aynıdır:

  1. Bir yöntem dolaylı olarak çağrıldığı nesneyi geçer.
  2. Bir yöntem sınıf içinde yer alan veriler üzerinde çalışabilir (bir nesnenin bir sınıfın örneği olduğunu unutmayın - sınıf tanımdır, nesne o verinin bir örneğidir).

(bu basitleştirilmiş bir açıklamadır, kapsamı vb. konuları dikkate almaz

1619

Bir yöntem bir nesnededir.
Bir fonksiyon nesneden bağımsızdır. 

Java için sadece yöntemler var.
C için sadece fonksiyonlar vardır.

C++ için sınıfta olup olmadığına bağlı.

899
Aaron

'method', 'function' için nesne yönelimli bir Worddür. Hepsi bu kadar var (yani, gerçek bir fark yok).

Ne yazık ki, buradaki cevapların birçoğunun karmaşık, anlamlı bir fark olduğu fikrini sürdürdüğünü veya geliştirdiğini düşünüyorum.

Gerçekten - hepsi bu kadar değil, aynı şey için sadece farklı kelimeler.

[geç ekleme]


Aslında, Brian Neal , bu soru 'a yapılan bir yorumda işaret ettiğinden, C++ standardı, üye fonksiyonlara atıfta bulunurken hiçbir zaman' yöntem 'terimini kullanmaz. Bazı insanlar bunu C++ 'ın gerçekten nesne yönelimli bir dil olmadığını göstererek alabilir; Bununla birlikte, oldukça zeki bir insan grubunun farklı bir terim kullanmanın özellikle güçlü bir nedeni olduğunu düşünmediğini belirten bir gösterge olarak almayı tercih ediyorum.

190
Michael Burr

Genel olarak: yöntemler bir sınıfa ait işlevlerdir, işlevler kodun başka bir kapsamı üzerinde olabilir, böylece tüm yöntemlerin işlev olduğunu, ancak işlevlerin hepsinin yöntem olmadığını belirtebilirsiniz:

Aşağıdaki python örneğini ele alalım:

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

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

knock_door()

Verilen örnek, "açık" adlı bir yöntemi veya eylemi olan "Kapı" adlı bir sınıfı gösterir, bir sınıf içinde bildirildiği için buna bir yöntem adı verilir. Bir fonksiyon tanımlayan hemen altında "def" kodlu başka bir kod bölümü vardır, bir fonksiyondur, çünkü bir sınıf içinde bildirilmez, bu fonksiyon gördüğümüz gibi sınıfımız içinde tanımladığımız yöntemi çağırır ve sonunda fonksiyon kendisi tarafından çağrılır.

Gördüğünüz gibi, herhangi bir yerde bir işlevi çağırabilirsiniz, ancak bir yöntemi çağırmak istiyorsanız, ya yöntemle bildirilen sınıfla aynı türden yeni bir nesneyi aktarmanız gerekir (Class.method (object)) veya çağırmanız gerekir. nesne içindeki yöntem (object.Method ()), en azından python içinde.

Yöntemleri yalnızca bir varlığın yapabileceği şeyler olarak düşünün, bu nedenle bir Dog sınıfınız varsa, sadece o sınıf içinde bir kabuk fonksiyonunun olması mantıklı olacaktır ve bu bir yöntem olacaktır, eğer bir Person sınıfınız varsa, bu mantıklı olabilir. Hem insan hem de köpek beslenebildiğinden ve herhangi bir sınıfa ait olmadığından, buna fonksiyon diyebiliriz, çünkü bunun için herhangi bir sınıfa ait olmayan bir "besleme" yazın.

88
Gustavo Rubio

A Function ve a Method arasındaki temel farkın çok genel bir tanımı:

İşlevler sınıfların dışında, Yöntemler ise sınıfların içinde ve bir kısmında tanımlanır.

39
Elenasys

Hatırlamanın basit yolu:

  • Function →Free (Ücretsiz araçlar bir nesneye veya sınıfa ait değil)
  • Method → ​​Mköz (Bir nesnenin veya sınıfın üyesi)
37
Duc Filan

Burada okumak istiyorsan, "OO yöntemlerine giriş"

Nesne Yönelimli paradigmanın ardındaki fikir, yazılımı “tehdit etmek”, yani “nesneler” den oluşur. Gerçek dünyadaki nesnelerin mülkleri vardır, örneğin bir Çalışanınız varsa, çalışanın bir adı, çalışan kimliği, bir konumu, bir departmana ait olduğu vb. 

Nesne aynı zamanda nitelikleriyle nasıl başa çıkılacağını ve bunlarda bazı işlemlerin nasıl yapıldığını da biliyor. Diyelim ki bir çalışanın şu an ne yaptığını bilmek istiyorsak, ona soracağız.

employe whatAreYouDoing.

Bu "whatAreYouDoing", nesneye gönderilen bir "mesaj" dır. Nesne, bu soruları nasıl cevaplayacağını bilir, soruyu çözmek için bir "yöntem" olduğu söylenir.

Bu nedenle, nesnelerin davranışını ortaya koyması gerekenlere yöntemler denir. Bu nedenle yöntemler, yapay nesne, bir şeyi "yapmak" zorundadır. 

Diğer olası yöntemler 

employee whatIsYourName
employee whatIsYourDepartmentsName

vb.

Diğer taraftan, bir programlama dilinin bazı verileri hesaplaması gerektiği gibi işlevler vardır; örneğin, 16 döndüren addValues ​​(8, 8) işlevine sahip olabilirsiniz.

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

İlk popüler programlama dilleri (örneğin, fortran, c, Pascal), OO paradigmasını kapsamadığından, yalnızca bu eserler "işlevleri" olarak adlandırırlar.

Örneğin, C'deki önceki işlev şöyle olacaktır:

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

Bir nesnenin bazı eylemleri gerçekleştirmek için bir "işlevi" olduğunu söylemek "doğal" değildir, çünkü bir çalışanın üzerinde çok az matematik varken, işlevler matematiksel şeyler ile daha fazla ilişkilidir, örneğin Java'da bu, eşdeğer addValues ​​işlevi olacaktır.

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

Tanıdık geliyor? Çünkü Java'nın kökleri C++ ve C++ 'da C.

Sonunda sadece bir kavramdır, uygulamada aynı görünebilirler, ancak OO belgelerinde bunlara yöntem denir.

İşte Java'da daha önce Çalışan nesnesine bir örnek.

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.

Öyleyse, fark, uygulandığı "alan" üzerindedir.

AppleScript, bir noktada OO sahip olduğu “doğal dil” yazarı fikrine sahiptir. Örneğin Smalltalk. Umarım bunu okuduktan sonra nesnelerdeki yöntemleri anlamanız daha kolay olabilir.

NOT: Kod sadece bir örnek vermek için derlenmemelidir. Gönderiyi değiştirmekten ve Python örneğini eklemekten çekinmeyin.

27
OscarRyz

OO dünyasında, ikisi aynı şeyi ifade etmek için yaygın olarak kullanılır. 

Saf bir Matematik ve CS perspektifinden, bir fonksiyon aynı argümanlar ile çağrıldığında her zaman aynı sonucu verir (f (x, y) = (x + y)). Öte yandan, bir yöntem tipik olarak bir sınıf örneği ile ilişkilidir. Yine de, çoğu modern OO dilleri artık "işlev" terimini çoğunlukla kullanmamaktadır. Çoğu statik yöntem, genellikle durumları olmadığı için (her zaman doğru değildir) oldukça benzer işlevler olabilir.

17
TheSoftwareJedi

Bir fonksiyonun, bazı argümanlar alabilen ve bir sonuç getirebilecek bir kod bloğu (genellikle kendi kapsamı ve bazen de kendi kapanışı ile) olduğunu varsayalım.

Bir yöntem, bir nesnenin sahip olduğu bir işlevdir (bazı nesne yönelimli sistemlerde, bir sınıfa ait olduğunu söylemek daha doğrudur). Bir nesneye/sınıfa "ait" olmak, yönteme nesne/sınıf yoluyla başvurduğunuz anlamına gelir; örneğin, Java'da "door" nesnesine ait "open ()" yöntemini çağırmak istiyorsanız, "door.open ()" yazmanız gerekir. 

Genellikle yöntemler, nesnenin/sınıf içindeki davranışlarını tanımlayan bazı ekstra nitelikler de kazanır, örneğin: yöntemin hangi nesnelerin (veya sınıfların) çağrılabileceğini belirleyen görünürlük (nesneye yönelik kapsülleme konseptiyle ilgili).

Nesneye yönelik birçok dilde, tüm "işlevler" bir nesneye (veya sınıfa) aittir ve bu nedenle bu dillerde yöntem olmayan işlevler yoktur.

15

İşlev veya yöntem, bazı işlemleri gerçekleştiren ve isteğe bağlı olarak bir değer döndüren adlandırılabilir bir kod parçasıdır. 

Cdilde terim işlevi kullanılır. Java & C # insanlar bir yöntem olduğunu söyler (ve bu durumda bir işlev sınıf/nesne içinde tanımlanır).

A C++ programmer bir işlev veya bazen yöntem olarak adlandırabilir (işlemsel stil c ++ kodunu yazıp yazmadıklarına veya C++ 'nın nesne yönelimli yolunu yapıp yapmadıklarına bağlı olarak, ayrıca C/C++ yalnızca bir programcı büyük olasılıkla terim çünkü 'yöntem', C/C++ literatüründe daha az kullanılır).

Bir işlevi sadece ismini şöyle çağırarak kullanırsınız,

result = mySum(num1, num2);


İlk önce nesnesine başvurarak bir yöntem çağırırsınız,

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

Bir fonksiyon matematiksel bir kavramdır. Örneğin:

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

f() işlevinin ikinci parametrenin kosinüsüne eklenen ilk parametrenin günahını döndüreceğini söylüyor. Bu sadece matematik. Bunun olduğu gibi sin () ve cos () de fonksiyonlardır. Bir işlevin başka bir özelliği vardır: tümü aynı parametrelere sahip bir işleve yapılan çağrılar aynı sonucu döndürmelidir.

Diğer yandan, bir yöntem, nesne yönelimli bir dilde bir nesneyle ilgili olan bir işlevdir. Tek bir örtülü parametresi var: etkilenen nesne (ve durumu).

Öyleyse, g (x) metoduna sahip bir Z nesneniz varsa, aşağıdakileri görebilirsiniz:

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

Bu durumda, x parametresi daha önceki fonksiyon örneğindeki gibi aynı şekilde iletilir. Bununla birlikte, cos () parametresi Z.Z nesnesinin içinde yaşayan bir değerdir ve onun içinde yaşayan veriler (Z.y) Z'nin g() yönteminin örtük parametreleridir.

12
Bradley Mazurek

Tarihsel olarak, bir "yöntem" in bir değer getirmeyen bir şey olduğu ve "işlev" olan bir şey olduğu ve her dilin kendine has bir terim sözlüğü özel bir anlama sahip olduğu ince bir fark olabilir. 

"C" , Word "function" , bir program yordamı anlamına gelir.

Java içinde, "function" teriminin özel bir anlamı yoktur. Oysa "yöntem" , bir sınıfın uygulamasını oluşturan rutinlerden birini ifade eder.

C # içinde şu şekilde tercüme edilir:

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

Ama gerçekten, 2 kavramda gerçekten bir fark olmadığını yineliyorum .. __ Java ile ilgili gayrı resmi tartışmalarda "fonksiyon" terimini kullanırsanız, insanlar "yöntem" demek istediğinizi varsayar ve devam eder. Java ile ilgili uygun belgeler veya sunumlarda kullanmayın, yoksa aptal görüneceksiniz.

12
Jaimin Patel

Yöntemler sınıfların işlevleridir. Normal jargonda insanlar her şeyden önce metodu değiştirir ve çalışırlar. Temel olarak onları aynı şey olarak düşünebilirsiniz (global fonksiyonlara yöntem denilenden emin değilsiniz).

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

11
Statement

Bir sınıftaki yöntemler, nesne adı verilen sınıfın örneğine göre hareket eder. 

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"
   }
}
8
Statement

Nesne Pascal veya C++ gibi OO dillerinde, bir "yöntem" bir nesneyle ilişkili bir işlevdir. Dolayısıyla, örneğin bir "Köpek" nesnesi "havlama" fonksiyonuna sahip olabilir ve bu bir "Yöntem" olarak kabul edilir. Buna karşılık, "StrLen" işlevi tek başına durur (bağımsız değişken olarak sağlanan bir dizgenin uzunluğunu sağlar). Bu nedenle sadece "işlev" dir. Javascript teknik olarak da Nesne Yönelimlidir ancak C++, C # veya Pascal gibi tamamen gelişmiş bir dille karşılaştırıldığında birçok sınırlama ile karşı karşıyadır. Bununla birlikte, ayrım hala geçerli olmalıdır.

Birkaç ek gerçek: C # tamamen nesne yönelimli olduğundan bağımsız "işlevler" oluşturamazsınız. C # 'da her fonksiyon bir nesneye bağlanır ve bu nedenle teknik olarak bir "yöntem" dir. Kicker, C # 'daki çok az kişinin onlara “yöntem” olarak atıfta bulunduğunu gösteriyor - sadece “işlevler” terimini kullanıyorlar çünkü yapılacak hiçbir gerçek ayrım yok.

Sonunda - bu yüzden herhangi bir Pascal gurusu üstüme atlamıyor - Pascal ayrıca "işlevler" (bir değer döndüren) ve "olmayan" işlemler arasında da farklılaşıyor. Elbette, bir değer vermeyi ya da vermemeyi seçebilseniz de, C # bu ayrımı açıkça yapmaz. 

8

İşlev, verileri işlemek için kullanılabilecek bir mantık kümesidir.

Yöntem, ait olduğu nesnenin verilerini işlemek için kullanılan bir işlevdir .Teknik olarak, sınıfınızla tamamen ilgili olmayan ancak sınıfta bildirilen bir işleviniz varsa, bu bir yöntem değildir; Buna kötü bir tasarım denir.

8
gian ebao

Python'dan bahsettiğinizden beri, aşağıdaki yöntem modern nesneye yönelik çoğu dilde yöntemlerle nesneler arasındaki ilişkinin yararlı bir örneği olabilir. Özetle, "yöntem" dedikleri şey, yalnızca fazladan bir argümandan geçen bir fonksiyondur (diğer cevapların işaret ettiği gibi), ancak Python bunu çoğu dilden daha açık hale getirir.

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

Şimdi greet_with_greeter işlevini ve greet yöntemini karşılaştırın: tek fark ilk parametrenin adıdır ("onu selamlayan" olarak adlandırdığım fonksiyonda, "ben" olarak adlandırdığım yöntemde). Bu yüzden greet yöntemini, greet_with_greeter işlevini kullandığım şekilde kullanabiliyorum (buna bir sınıf içinde tanımladığımdan beri "dot" sözdizimini kullanarak):

Greeter.greet(hello_greeter, "World")

Bu yüzden etkili bir şekilde bir işlevi bir işleve dönüştürdüm. Bir işlevi bir yönteme dönüştürebilir miyim? Python tanımlandıktan sonra sınıflarla uğraşmanıza izin verdiğinden, deneyelim:

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

Evet, greet_with_greeter işlevi şimdi de greet2 yöntemi olarak bilinir. Bu, bir yöntemle işlev arasındaki tek gerçek farkı gösterir: object.method(args) işlevini çağırarak bir nesneyi "on" olarak çağırdığınızda, dil sihirli bir şekilde method(object, args) işlevine dönüşür.

(OO'nun temizleyicileri bir yöntemin bir işlevden farklı bir şey olduğunu iddia edebilir ve gelişmiş Python veya Ruby - ya da Smalltalk! - konularına bakmaya başlayacaksınız. Ayrıca bazı diller bir nesnenin parçalarına özel erişim sağlar. Ama temel kavramsal fark hala gizli ekstra parametredir.)

8
Sam Stokes

benim için: Bir yöntemin ve bir fonksiyonun işlevi aynı fikirdeysem aynıdır:

  • bir işlev bir değer döndürebilir
  • parametreler bekleyebilir

Herhangi bir kod parçası gibi, içine koyduğunuz nesneler olabilir ve sonuç olarak ortaya çıkan bir nesneye sahip olabilirsiniz. Bunu yaparken nesnenin durumunu değiştirebilirler ancak bu benim için temel işlevlerini değiştirmez.

Nesnelerin veya diğer kodların işlevlerinin çağrılmasında farklılıklar olabilir. Ama bu sözel farklılaşma için bir şey değil mi ve insanlar onları değiştirecek bu yüzden mi? Dikkatli olacağım hesaplama örneğinden bahseder. çünkü hesaplamalarımı yapmak için işveren kiralarım:

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

Bu şekilde yaparak hesaplardan sorumlu olan bir işverene güvenebilirim. Daha fazla para istiyorsa onu serbest bırakıyorum ve çöp toplayıcının kullanılmayan çalışanları elden çıkarma işlevini yerine getirmesine izin veriyorum.

Bir yöntemin bir nesne işlevi ve bir işlev bağlantısız olduğunu savunarak bile hesaplama bana yardımcı olmaz. Fonksiyon tanımlayıcısının kendisi ve ideal olarak fonksiyonun dokümantasyonu bana neye ihtiyacı olduğunu ve neye dönebileceğini söyleyecektir. Gerisi, bazı nesnelerin durumunu değiştirmek gibi, benim için pek şeffaf değil. Hem işlevlerin hem de yöntemlerin, nasıl yaptıklarını ayrıntılı olarak bilmelerine gerek kalmadan iddia ettikleri şeyleri sunmalarını ve manipüle etmelerini bekliyorum .. __ Saf bir hesaplama işlevi bile konsolun durumunu değiştirebilir veya bir günlük dosyasına ekleyebilir.

7
Dirk Schumacher

Birinci dereceden bir yaklaşıma göre, bir yöntem (C++ stilinde OO'da) bir üye işlevi için başka bir Word, yani bir sınıfın parçası olan bir işlevdir.

C/C++ gibi dillerde, bir sınıfa üye olmayan işlevlere sahip olabilirsiniz; Bir sınıfla ilişkilendirilmemiş bir işlevi bir yöntem olarak çağırmazsınız.

4

Anladığım kadarıyla, bir yöntem, bir sınıfta gerçekleştirilebilecek herhangi bir işlemdir. Programlamada kullanılan genel bir terimdir. 

Birçok dilde metotlar fonksiyonlar ve alt rutinler ile temsil edilir. Bunun için çoğu dilin kullandığı temel ayrım, işlevlerin arayan kişiye geri bir değer getirebilmesi ve bir alt yordamın vermeyebilmesidir. Ancak birçok modern dil yalnızca işlevlere sahiptir, ancak bunlar isteğe bağlı olarak herhangi bir değer getiremez.

Örneğin, bir kediyi tanımlamak istediğinizi ve bunun esnemeyi istediğinizi varsayalım. Yawn yöntemiyle, muhtemelen herhangi bir geri dönüş değeri olmayan bir işlev olacak bir Cat sınıfı oluşturacaksınız.

4
marcj

Çok basit bir cevabın ne olması gerektiğini fazla karmaşıklaştırmayalım. Yöntemler ve fonksiyonlar aynı şeydir. Bir sınıfın dışındayken, bir işlevi çağırırsınız ve bir sınıfın içine yazıldığında bir işlevi çağırırsınız. 

3
SamyCode

IMHO çalışanları, nesneler içindeki işlevlere başvurmak istediklerinde, programcılar arasında daha kolay iletişim için yeni bir Word icat etmek istediler. 

Metotları söylüyorsanız, sınıf içindeki fonksiyonları kastediyorsunuz .. __ Eğer fonksiyon diyorsanız, sadece sınıf dışındaki fonksiyonlardan bahsediyorsunuz.

Gerçek şu ki, her iki kelimenin de fonksiyonları tanımlamak için kullanılmasıdır. Yanlış kullanmış olsanız bile hiçbir şey olmuyor. Her iki kelime de, kodunuzda neyi başarmak istediğinizi iyi açıklar.

İşlev, bir şeyin yapılmasında rol oynamak zorunda olan bir koddur (a işlevi) .. Yöntem, sorunu çözmek için a yöntemdir.

Aynı şeyi yapar. Aynı şey. Süper hassas olmak ve kongre ile devam etmek istiyorsanız, nesneleri nesnelerin içindeki işlevler olarak çağırabilirsiniz.

3
Morfidon

İşlev, esas olarak Prosedür odaklı programlamaya ait olan kavramdır; burada bir fonksiyon verileri işleyebilen ve size değer kazandıran bir varlıktır

Yöntem, Nesne Yönelimli programlama kavramıdır; burada yöntem, çoğunlukla sınıf üyeleri üzerinde işlem yapan bir sınıfın üyesidir.

3
Akshay Khale

İşlev - Bazı mantık içeren bağımsız bir kod parçasındaki işlev ve bağımsız olarak çağrılmalıdırve sınıf dışında tanımlanır.

Yöntem - Bir yöntem, bazı nesnelere referans olarak adlandırılan ve sınıf içinde tanımlanmış olan bağımsız bir kod parçasıdır.

2
A H M

Birçok kişinin daha önce cevapladığını biliyorum, ancak şunu takip ettim basit ama etkili bir tek satırlı cevap. Buradaki diğer cevaplardan çok daha iyi görünmese de, ancak dikkatlice okursanız, yöntem vs işlevi hakkında bilmeniz gereken her şeye sahiptir. 

Bir yöntem, OOP terimleriyle tanımlanmış bir alıcısı olan bir işlevdir, yöntem bir nesnenin örneğindeki bir işlevdir.

2
f-society

Ben bir uzman değilim, ama bildiğim budur:

  1. İşlev C dili terimdir, bir kod parçasını ifade eder ve işlev adı bu işlevi kullanmak için tanımlayıcı olacaktır.

  2. Yöntem OO terimdir, genellikle işlev parametresinde bu işaretçiye sahiptir. C gibi bir kod parçasını çağıramazsınız, onu çağırmak için nesneyi kullanmanız gerekir.

  3. Çağırma yöntemleri de farklıdır. İşte bu kod parçasının adresini bulmak için anlam çağırmak. C/C++, bağlantı süresi bulmak için işlev sembolünü kullanır.

  4. Amaç-C farklı. Adresi bulmak için veri yapısını kullanmak için bir C işlevinin anlamını çağır. Her şey çalışma zamanında bilinen anlamına gelir.

2
Marvin

İşte JavaScript örnekleri kullanarak metod vs. fonksiyonu için bazı açıklamalar:

test(20, 50);, işlev tanımını yapar ve bazı adımları çalıştırmak ya da bir yerde saklanabilen/kullanılan bir şeyi geri döndürmek için kullanılır.

Kodu tekrar kullanabilirsiniz: Kodu bir kez tanımlayın ve birçok kez kullanın.

Farklı sonuçlar elde etmek için aynı kodu farklı argümanlarla birçok kez kullanabilirsiniz.

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(); here test (), bazı nesneler için bir yöntem veya yerleşik nesneler için özel bir prototip olabilir, işte daha fazla açıklama:

JavaScript yöntemleri, nesnelerde gerçekleştirilebilecek eylemlerdir.

Bir JavaScript yöntemi, bir işlev tanımı içeren bir özelliktir.

Javascript'te dizeler için yerleşik özellik/yöntem:

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

Özel örnek:

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'

Örneğin String, Array, vb. İçin özellikler tanımlayabilirsiniz.

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

Bazı referanslar: Javascript Object Method , İşlevleri , Prototip hakkında daha fazla bilgi

1
Lahar Shah

Yöntem ve İşlevler Arasındaki Fark

Microsoft'tan bu doküman okunmasından 

Yürütülebilir kod içeren üyeler toplu olarak bir sınıfın işlev üyeleri olarak bilinir. Yukarıdaki bölüm, birincil tür işlev üyeleri olan yöntemleri açıklar. Bu bölüm, C # tarafından desteklenen diğer fonksiyon üyelerini tanımlar: yapıcılar, özellikler, dizin oluşturucular, olaylar, operatörler ve sonlandırıcılar.

Yani yöntemler fonksiyonların alt kümesidir. Her yöntem bir işlevdir, ancak her işlev bir yöntem değildir, örneğin, constructor bir yöntem olarak söylenemez ancak bir işlevdir.

1
Siraj

Sınıf, isteğe bağlı olarak bir kurucu ile bazı veri ve işlevlerin toplanmasıdır.

Belirli bir sınıfın bir örneğini (kopya, çoğaltma) oluştururken, yapıcı sınıfı başlatır ve bir nesneyi döndürür. 

Artık sınıf nesne haline geliyor (yapıcı olmadan) & İşlevler nesne bağlamında yöntem olarak bilinir.

Yani temelde 

Sınıf <== new ==> Nesne

İşlev <== new ==> Yöntem

Java'da genel olarak, yapıcı adının sınıf adıyla aynı olduğu, ancak gerçekte yapıcının örnek blok ve statik blok gibi olduğu ancak kullanıcının bir dönüş türü (yani, Sınıf türü) tanımlamasıyla olduğu söylenir

Sınıf statik bir bloğa sahip olsa da, örnek bloğu, constructor, function Nesnede genellikle sadece veri ve yöntem bulunur.

0

C++ 'da bazen, bir sınıfın üye işlevi kavramını yansıtmak için yöntem kullanılır. Ancak son zamanlarda “C++ Programlama Dili 4. Basım” kitabında, 586. sayfadaki "Türetilmiş Sınıflar" kitabında bir ifade buldum.

Sanal fonksiyona bazen metot denir.

Bu biraz kafa karıştırıcı, ancak bazen dedi, bu yüzden kabaca mantıklı, C++ yaratıcısı, işlevlerin nesnelere çağrılabildiği ve polimorfik davranabildiği için yöntemleri görme eğilimindedir.

0
Lance LI