Birisi OOP bağlamında yöntemlere karşı işlevlere ilişkin basit bir açıklama sağlayabilir mi?
if(class(object)) { ... } else {stop()}
kavramsal olarak yönteme eşdeğer olur mu?
Birisi OOP bağlamında yöntemlere karşı işlevlere ilişkin basit bir açıklama sağlayabilir mi?
if(class(object)) { ... } else {stop()}
kavramsal olarak yönteme eşdeğer olur mu?
Yanıtlar:
Bir fonksiyon adıyla çağrılır kodunun bir parçasıdır. Çalışmak için veriler geçirilebilir (yani parametreler) ve isteğe bağlı olarak verileri döndürebilir (dönüş değeri). Bir işleve iletilen tüm veriler açıkça geçirilir.
Bir yöntem, bir nesne ile ilişkilendirilmiş bir ait olan kod parçasıdır. Çoğu bakımdan, iki temel fark dışında bir fonksiyonla aynıdır:
(bu basitleştirilmiş bir açıklamadır, kapsam konularını göz ardı ederek vb.)
Yöntem bir nesnenin üzerindedir.
Bir işlev bir nesneden bağımsızdır.
Java ve C # için yalnızca yöntemler vardır.
C için sadece fonksiyonlar vardır.
C ++ ve Python için bir sınıfta olup olmadığınıza bağlıdır.
'method' , 'function' için nesne yönelimli kelimedir . Bunun hemen hemen hepsi var (yani, gerçek bir fark yok).
Ne yazık ki, buradaki cevapların birçoğu karmaşık ve anlamlı bir fark olduğu fikrini devam ettiriyor veya ilerletiyor.
Gerçekten - o kadar çok şey yok, sadece aynı şey için farklı kelimeler.
[geç ekleme]
Aslında, Brian Neal'ın bu soruya yaptığı bir yorumda belirttiği gibi , C ++ standardı üye işlevlerine atıfta bulunurken asla 'yöntem' terimini kullanmaz. Bazı insanlar bunu C ++ 'ın gerçekten nesne yönelimli bir dil olmadığının bir göstergesi olarak alabilirler; ancak bunu oldukça zeki bir insan grubunun farklı bir terim kullanmak için özellikle güçlü bir neden olduğunu düşünmediğinin bir göstergesi olarak almayı tercih ediyorum.
self
argüman açıktır. Ve birçok dilde, örnek geçmeyen statik yöntemler vardır.
this
veya öğesinin geçersiz kılmayı destekleyen diller vardır self
, ancak bu yapılara genellikle yöntemler yerine işlevler denir.
Genel olarak: yöntemler bir sınıfa ait işlevlerdir, işlevler kodun başka bir alanında olabilir, böylece tüm yöntemlerin işlev olduğunu, ancak tüm işlevlerin yöntem olmadığını belirtebilirsiniz:
Aşağıdaki python örneğini alın:
class Door:
def open(self):
print 'hello stranger'
def knock_door:
a_door = Door()
Door.open(a_door)
knock_door()
Verilen örnek, "kapı" adlı bir sınıfı veya "açık" adında bir eylemi olan bir sınıfı gösterir; buna sınıf içinde bildirildiği için bir yöntem denir. Kodun hemen altında "def" ile bir işlevi tanımlayan başka bir bölüm vardır, bu bir işlevdir, çünkü bir sınıf içinde bildirilmez, bu işlev görebildiğimiz gibi sınıfımızda tanımladığımız yöntemi çağırır ve son olarak işlev kendi kendine çağırdı.
Gördüğünüz gibi bir işlevi herhangi bir yere çağırabilirsiniz, ancak bir yöntemi çağırmak istiyorsanız, ya sınıfla aynı türden yeni bir nesne iletmeniz gerekir (yöntemin bildirildiği (Class.method (object)) ya da çağırmanız gerekir. en azından python'da nesnenin içindeki (object.Method ()) yöntem.
Yöntemleri sadece bir varlığın yapabileceği şeyler olarak düşünün, bu yüzden bir Köpek sınıfınız varsa, sadece bu sınıfın içinde bir kabuk işlevine sahip olmak mantıklı olacaktır ve bu bir yöntem olacaktır, eğer bir Person sınıfınız da varsa mantıklı olabilir hem insanlar hem de köpekler beslenebileceğinden ve özellikle herhangi bir sınıfa ait olmadığı için bu işlevi çağırabildiğiniz için, bunun için herhangi bir sınıfa ait olmayan "işlev" yazın.
Hatırlamanın kolay yolu:
Burada okumak istiyorsanız "OO yöntemlerine girişim"
Nesneye Dayalı paradigmanın arkasındaki fikir, yazılımın "iyi" nesnelerden "oluştuğunu" tehdit etmektir ". Gerçek dünyadaki nesnelerin özellikleri vardır, örneğin bir Çalışanınız varsa, çalışanın bir adı, çalışan kimliği, pozisyonu vardır, bir departmana aittir vb.
Nesne ayrıca öznitelikleriyle nasıl başa çıkılacağını ve bunlar üzerinde bazı işlemlerin nasıl yapılacağını da bilir. Bir çalışanın şu anda ne yaptığını bilmek istiyorsak, ona soracağımızı varsayalım.
employe whatAreYouDoing.
Bu "whatAreYouDoing", nesneye gönderilen bir "mesaj" dır. Nesne bu sorulara nasıl cevap verileceğini bilir, soruyu çözmek için bir "yöntem" olduğu söylenir.
Bu nedenle, nesnelerin davranışlarını ortaya çıkarma biçimine yöntemler denir. Bu nedenle yöntemler, yapay nesnenin bir şey "yapması" gerektiğidir.
Diğer olası yöntemler
employee whatIsYourName
employee whatIsYourDepartmentsName
vb.
Diğer yandan işlevler, bir programlama dilinin bazı verileri hesaplaması için gerekli yöntemlerdir, ö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 (fortran, c, pascal gibi) OO paradigmasını kapsamadığından, sadece bu yapay yapılara "işlevler" adını verir.
örneğin C'deki önceki işlev şöyle olur:
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 şeylerle daha fazla ilişkilidir, ancak işlevlerle tamamen aynı yöntemlere sahip olabilirsiniz, ö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 ++ C'dir.
Sonunda sadece bir kavram, uygulamada aynı görünebilirler, ancak OO belgelerinde bunlara yöntem denir.
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.
Fark, uygulandığı "etki alanı" üzerindedir.
AppleScript, bir noktada OO'nun sahip olduğu "doğal dil" matphor fikrine sahiptir. Örneğin Smalltalk. Umarım bunu okuduktan sonra nesnelerdeki yöntemleri anlamanız daha kolay olabilir.
NOT: Kod derlenmemeli, sadece örnek olarak gösterilmelidir. Gönderiyi değiştirebilir ve Python örneği ekleyebilirsiniz.
OO dünyasında, ikisi aynı şeyi ifade etmek için yaygın olarak kullanılır.
Saf bir Math ve CS perspektifinden bakıldığında, bir işlev aynı bağımsız değişkenlerle çağrıldığında her zaman aynı sonucu döndürür (f (x, y) = (x + y)). Öte yandan, bir yöntem tipik olarak bir sınıfın bir örneğiyle ilişkilendirilir. Yine de, çoğu modern OO dili artık çoğunlukla "işlev" terimini kullanmamaktadır. Birçok statik yöntem, tipik olarak durumları olmadığından (her zaman doğru değildir) işlevlere oldukça benzer olabilir.
Bir işlevin, bazı argümanlar alabilen ve bir sonuç döndürebilen bir kod bloğu (genellikle kendi kapsamıyla ve bazen kendi kapanışıyla) olduğunu varsayalım.
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 "sahip olmak", yönteme nesne / sınıf üzerinden başvurduğunuz anlamına gelir; örneğin, Java'da, bir "door" nesnesinin sahip olduğu "open ()" yöntemini çağırmak istiyorsanız, "door.open ()" yazmanız gerekir.
Genellikle yöntemler ayrıca nesne / sınıf içindeki davranışlarını açıklayan bazı ekstra özellikler kazanır, örneğin: yöntemin hangi nesnelerden (veya sınıflardan) çağrılabileceğini tanımlayan görünürlük (nesneye yönelik kapsülleme kavramı ile ilgili).
Birçok nesne yönelimli dilde, tüm "işlevler" bir nesneye (veya sınıfa) aittir ve bu nedenle bu dillerde yöntem olmayan işlevler yoktur.
Yöntemler sınıfların işlevleridir. Normal jargonda, insanlar yöntemi değiştirir ve her yerde çalışırlar. Temel olarak bunları aynı şey olarak düşünebilirsiniz (global işlevlerin yöntem olarak adlandırılıp adlandırılmadığından emin değilsiniz).
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. Sadece matematik. Olduğu gibi sin () ve cos () da işlevlerdir. Bir işlevin başka bir özelliği daha vardır: aynı parametrelere sahip bir işleve yapılan tüm çağrılar aynı sonucu döndürmelidir.
Öte yandan yöntem, nesne yönelimli bir dilde bir nesneyle ilişkili bir işlevdir. Örtük bir parametresi vardır: Üzerinde işlem yapılan nesne (ve durumu).
Bu nedenle, g (x) yöntemine sahip bir Z nesneniz varsa, aşağıdakileri görebilirsiniz:
Z.g(x) = sin(x) + cos(Z.y)
Bu durumda, x parametresi, daha önce fonksiyon örneğindeki gibi aktarılır. Bununla birlikte, cos () parametresi Z. Z nesnesinin içinde yaşayan bir değerdir ve onun içinde yaşayan veriler (Zy) Z'nin g () yöntemine örtük parametrelerdir.
İşlev veya yöntem, bazı işlemleri gerçekleştiren ve isteğe bağlı olarak bir değer döndüren adlandırılmış çağrılabilir kod parçasıdır.
In C dilinde terim fonksiyonu kullanılır. Java ve C # kullanıcıları bunu bir yöntem olarak söyler (ve bu durumda bir işlev bir sınıf / nesne içinde tanımlanır).
A C ++ programcısı bir işlev veya bazen yöntem olarak adlandırılabilir (yordamsal stil c ++ kodu yazıyorlarsa veya C ++ 'ın nesne yönelimli yolunu yapıyorlarsa bağlı olarak, yalnızca bir C / C ++ programcısı muhtemelen bir işlev olarak adlandırır çünkü' yöntem 'terimi C / C ++ literatüründe daha az kullanılır).
Bir işlevi sadece adı gibi arayarak kullanırsınız,
result = mySum(num1, num2);
Bir yöntemi ilk önce nesnesine başvurarak,
result = MyCalc.mySum(num1,num2);
Tarihsel olarak, bir "yöntemin" bir değer döndürmeyen bir şey olması ve bir "işlev" ile küçük bir fark olmuş olabilir.Her dilin kendi terim sözlüğü vardır özel anlamı olan.
In "C" , kelime "işlev" anlamına bir program rutini .
In Java terimi "işlev" herhangi bir özel anlama sahip değildir. Oysa "yöntem" , bir sınıfın uygulanmasını oluşturan rutinlerden biri anlamına gelir.
In C # bu kadar tercüme ediyorum:
public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function
Ama gerçekten, iki kavramda gerçekten hiçbir fark olmadığını tekrar ediyorum. Java hakkında gayri resmi tartışmalarda "işlev" terimini kullanırsanız, insanlar "yöntem" demek istediğinizi varsayar ve devam eder. Java ile ilgili uygun belgelerde veya sunumlarda kullanmayın yoksa aptalca görüneceksiniz.
method
... yoksa It çağırır procedure
ve function
.
İşlev, verileri işlemek için kullanılabilecek bir mantık kümesidir.
Süre, Yöntem ait olduğu nesnenin verilerini işlemek için kullanılan bir işlevdir. Yani teknik olarak, tamamen sınıfınızla ilgili olmayan ancak sınıfta beyan edilen bir fonksiyonunuz varsa, bu bir yöntem değildir; Buna kötü tasarım denir.
Sınıftaki yöntemler, nesnenin adı verilen sınıf ö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"
}
}
Object Pascal veya C ++ gibi OO dillerinde, bir "yöntem" bir nesne ile ilişkili bir fonksiyondur. Örneğin, bir "Köpek" nesnesinin bir "kabuk" işlevi olabilir ve bu bir "Yöntem" olarak kabul edilir. Buna karşılık, "StrLen" işlevi tek başınadır (bağımsız değişken olarak sağlanan dizenin uzunluğunu sağlar). Dolayısıyla bu sadece bir "işlev" dir. Javascript teknik olarak Nesneye Yöneliktir, ancak C ++, C # veya Pascal gibi tam gelişmiş bir dile kıyasla birçok sınırlama ile karşı karşıyadır. Bununla birlikte, ayrım hala devam etmelidir.
Birkaç ek gerçek: C # tamamen nesne yönelimli olduğundan bağımsız "fonksiyonlar" yaratamazsınız. C # 'da her işlev bir nesneye bağlıdır ve bu nedenle teknik olarak bir "yöntemdir". En önemlisi, C # 'da çok az insanın "yöntem" olarak adlandırdığıdır - sadece "işlevler" terimini kullanırlar çünkü yapılacak gerçek bir ayrım yoktur.
Son olarak - herhangi bir Pascal guru bana burada atlamıyor - Pascal da "fonksiyonlar" (bir değer döndüren) ve "prosedürler" arasında ayrım yapmaz. Elbette bir değer döndürüp döndürmemeyi seçebilmenize rağmen, C # bu ayrımı açıkça yapmaz.
Python'dan bahsettiğinizden beri, aşağıdakiler çoğu modern nesne yönelimli dilde yöntemler ve nesneler arasındaki ilişkinin yararlı bir örneği olabilir. Özetle, "yöntem" olarak adlandırdıkları şey, sadece (diğer cevapların işaret ettiği gibi) ekstra bir argümandan geçen bir işlevdir, 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 işlevi greet_with_greeter
ve yöntemi karşılaştırın greet
: tek fark ilk parametrenin adıdır ("karşılama" olarak adlandırdığım işlevde, "self" olarak adlandırdığım yöntemde). Böylece greet
yöntemi greet_with_greeter
( ben "sınıf" sözdizimini kullanarak, bir sınıf içinde tanımladığından beri) işlevini kullanarak tam olarak aynı şekilde kullanabilirsiniz :
Greeter.greet(hello_greeter, "World")
Bu yüzden bir yöntemi etkili bir şekilde bir işleve çevirdim. 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ği için deneyelim:
Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")
Evet, işlev greet_with_greeter
artık yöntem olarak da bilinir greet2
. Bu, yöntem ve işlev arasındaki tek gerçek farkı gösterir: bir nesneyi "on" yöntemiyle çağırarak çağırdığınızda object.method(args)
, dil sihirli bir şekilde dönüştürür method(object, args)
.
(OO puristleri bir yöntemin bir işlevden farklı bir şey olduğunu iddia edebilirler ve eğer gelişmiş Python veya Ruby - ya da Smalltalk! 'A girerseniz, onların amacını görmeye başlayacaksınız. Ayrıca bazı diller yöntemlere bir nesnenin bitlerine özel erişim sağlar. ana kavramsal fark hala gizli ekstra parametredir.)
benim için: bir yöntemin işlevi ve bir işlevi kabul edersem aynıdır:
Her kod parçası gibi, içine koyduğunuz nesneler olabilir ve sonuç olarak gelen bir nesneniz olabilir. Bunu yaparken bir nesnenin durumunu değiştirebilirler, ancak bu benim için temel işlevlerini değiştirmez.
Nesnelerin veya diğer kodların çağrı işlevlerinde bir tanım farklılığı olabilir. Ama bu sözel farklılıklar için bir şey değil mi ve bu yüzden insanlar onları değiştiriyorlar mı? Dikkat ettiğim hesaplama örneğinden bahsediyor. çünkü işe benim hesaplamaları yapmak için istihdam:
new Employer().calculateSum( 8, 8 );
Bu şekilde hesaplardan sorumlu bir işverene güvenebilirim. Daha fazla para istiyorsa onu serbest bırakıyorum ve çöp toplayıcısının kullanılmayan çalışanları atma işlevine izin verdim gerisini halledin ve yeni bir çalışan alın.
Bir yöntemin bir nesneler işlevi olduğunu ve bir işlevin bağlantısız hesaplama olduğunu iddia etmek bile bana yardımcı olmaz. İşlev tanımlayıcının kendisi ve ideal olarak işlevin belgeleri bana neye ihtiyacı olduğunu ve neyin geri dönebileceğini söyleyecektir. Gerisi, bazı nesnelerin durumunu değiştirmek gibi benim için gerçekten şeffaf değil. Hem işlevlerin hem de yöntemlerin, iddia ettiklerini, nasıl yaptıklarını ayrıntılı olarak bilmelerine gerek kalmadan 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 eklenebilir.
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 yöntemler fonksiyonlar ve alt rutinler ile temsil edilir. Çoğu dilin bunlar için kullandığı temel ayrım, işlevlerin arayana bir değer döndürebileceği ve bir altyordamın geri dönmeyebileceğidir. Bununla birlikte, birçok modern dilin sadece işlevleri vardır, ancak bunlar isteğe bağlı olarak herhangi bir değer döndüremez.
Örneğin, bir kediyi tanımlamak istediğinizi ve bunun esnemek istediğinizi varsayalım. Büyük olasılıkla herhangi bir dönüş değeri olmayan bir işlev olabilecek bir Esneme yöntemiyle bir Cat sınıfı oluşturacaksınız.
Birinci dereceden bir yaklaşım için, bir yöntem (C ++ stili OO'da) üye işlevinin başka bir kelimesidir, yani bir sınıfın parçası olan bir işlevdir.
C / C ++ gibi dillerde bir sınıfın üyesi olmayan işlevlere sahip olabilirsiniz; sınıfla ilişkili olmayan bir işlevi yöntem olarak çağırmazsınız.
İşlev, temel olarak bir işlevin verileri işleyebilen ve size değer döndüren bir varlık olduğu Prosedür odaklı programlamaya ait kavramdır
Yöntem, bir yöntemin çoğunlukla sınıf üyeleri üzerinde işlem yapan bir sınıfın üyesi olduğu Nesne Tabanlı programlama kavramıdır .
IMHO insanları, nesnelerin içindeki işlevlere başvurmak istediklerinde programcılar arasında daha kolay iletişim için yeni bir kelime icat etmek istiyorlardı.
Eğer yöntemler söylüyorsanız, sınıf içindeki işlevleri kastediyorsunuz demektir. Eğer fonksiyonlar söylüyorsanız, sadece sınıfın dışındaki fonksiyonlar demek istersiniz.
Gerçek şu ki, her iki kelime de fonksiyonları tanımlamak için kullanılır. Yanlış kullansanız bile yanlış bir şey olmaz. Her iki kelime de kodunuzda neyi başarmak istediğinizi açıklar.
İşlev, bir şey yapma rolünü ( işlevini ) yürütmesi gereken bir koddur . Yöntem, sorunu çözmek için bir yöntemdir .
Aynı şeyi yapar. Aynı şey. Süper hassas olmak ve kuralla birlikte gitmek istiyorsanız, yöntemleri nesnelerin içindeki işlevler olarak çağırabilirsiniz.
Ben bir uzman değilim, ama bunu biliyorum:
İşlev C dili terimidir, bir kod parçasına karşılık gelir ve işlev adı bu işlevi kullanmak için tanımlayıcı olacaktır.
Yöntem OO terimidir, genellikle function parametresinde bu bir işaretçi vardır. C gibi bu kod parçasını çağıramazsınız, onu çağırmak için nesne kullanmanız gerekir.
Çağırma yöntemleri de farklıdır. Burada bu kod parçasının adresini bulmak için anlam çağırın. C / C ++, bağlantı zamanını bulmak için fonksiyon sembolünü kullanır.
Objecive-C farklıdır. Adresi bulmak için veri yapısını kullanmak üzere bir C işlevi anlamına gelir. Bu, her şeyin çalışma zamanında bilindiği anlamına gelir.
Başkalarının zaten cevap verdiğini biliyorum, ancak aşağıdaki basit ama etkili tek satırlık bir cevap olduğunu buldum. Diğerlerinin cevaplarından çok daha iyi görünmese de, ancak dikkatlice okursanız, yöntem vs işlevi hakkında bilmeniz gereken her şeye sahiptir.
Yöntem, tanımlanmış bir alıcıya sahip bir işlevdir, OOP terimleriyle yöntem, bir nesnenin örneğindeki bir işlevdir.
Bu dokümanı Microsoft'ta okumaktan
Yürütülebilir kod içeren üyeler topluca bir sınıfın işlev üyeleri olarak bilinir. Önceki bölümde, birincil işlev üyesi türü olan yöntemler açıklanmaktadır. Bu bölümde, C # tarafından desteklenen diğer işlev üyeleri açıklanmaktadır: yapıcılar, özellikler, dizinleyiciler, olaylar, işleçler ve sonlandırıcılar.
Yöntemler, işlevlerin 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.
İşlev - Bağımsız bir kod parçasında, bazı mantık içeren ve bağımsız olarak çağrılması gereken bir işlev ve sınıf dışında tanımlanmış .
Yöntem - Yöntem , bazı nesnelere referans olarak adlandırılan ve sınıf içinde tanımlanan bağımsız bir kod parçasıdır .
JavaScript örneklerini kullanarak yöntem ve işlev için bazı açıklamalar:
test(20, 50);
işlev, bazı adımları çalıştırmak veya bir yerde saklanabilen / kullanılabilen bir şeyi geri döndürmek için tanımlamak ve kullanmaktır.
Kodu yeniden 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();
Burada test (), bir nesnenin yöntemi olabilir veya dahili nesneler için özel olarak tanımlanmış bir prototip olabilir, işte daha fazla açıklama:
JavaScript yöntemleri, nesneler üzerinde gerçekleştirilebilecek eylemlerdir.
JavaScript yöntemi, işlev tanımı içeren bir özelliktir.
Javascript dizeleri 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 Nesne Yöntemi , İşlevler , Prototip hakkında daha fazla bilgi
TL; DR
İşlev, çalıştırılacak bir kod parçasıdır.
Yöntem, bir Nesnenin içindeki bir İşlevdir.
Bir işlev örneği:
function sum(){
console.log("sum")l
}
Bir Yöntem Örneği:
const obj = {
a:1,
b:2,
sum(){
}
}
Bu nedenle, bir İşlev içindeki bir "bu" anahtar kelimenin arama, uygulama veya bağlama ile birlikte kullanmadıkça çok yararlı olmadığını söylüyoruz çünkü çağrı, uygulama, bağlama bu işlevi nesne içindeki bir yöntem olarak çağırır ==> temelde işlevi yönteme dönüştürür
Genellikle değiştirilebilirler, ancak bir yöntem genellikle bir sınıf içindeki bir alt yordama ve bir işlev genellikle sınıf dışındaki bir alt yordama karşılık gelir. örneğin, Ruby'de:
# function
def putSqr(a)
puts a ** 2
end
class Math2
# method
def putSqr(a)
puts a ** 2
end
end
Her şeyin (paket ve içe aktarma ifadeleri hariç) sınıf içinde olması gereken Java'da, insanlar hemen hemen her zaman "yöntem" olarak adlandırırlar.