Metod və funksiya arasındakı fərq nədir?

Hər kəs OOP kontekstində metodfunksiyaları sadə bir izah edə bilərmi?

1522
01 окт. willc2 01 oktyabr ayına təyin olundu . 2008-10-01 02:45 '08 saat 02:45 'da 2008-10-01 02:45
@ 35 cavab
  • 1
  • 2

Funksiyası - Bu, adı ilə adlanan bir kod parçasıdır. Əməliyyat üçün məlumat ötürülür (yəni parametrlər) və zəruri hallarda məlumatların (qayıdış dəyərinin) qaytarılması mümkündür. Bu funksiyaya ötürülən bütün məlumatlar açıq şəkildə ötürülür.

Bir metod , obyektlə əlaqəli adı ilə adlandırılan bir kod parçasıdır. Çox hallarda, iki əsas fərqlilik istisna olmaqla, funksiyada eynidır:

  • Metod, obyektiv olaraq özünə çağırılan obyektdən keçir.
  • Metod, bir sinifdə olan məlumatlarla işləməyə qadirdir (obyekt bir sinifin nümunəsidir - bir sinif tərifdir, bir obyekt bu məlumatın bir nümunəsidir).

(bu, sadələşdirilmiş bir izahatdır, əhatə problemlərini yox sayır və s.)

1587
01 окт. Andrew Edgecombe Oct 01 cavab 2008-10-01 03:00 '08 saat 03:00 'da

Metod obyekt üzərindədir.
Bu funksiya obyektdən asılı deyil.

Java üçün yalnız üsullar var.
C üçün yalnız funksiyalar vardır.

border=0

C ++ üçün bu, sinifdə olub-olmamağınıza bağlıdır.

892
01 окт. Cavab Aaron Oct. 01. 2008-10-01 02:51 '08 saat 02:51 'da 2008-10-01 02:51

'metod' funksiyası üçün obyekt yönümlü sözdür. Bu demək olar ki, bütün bunlar (yəni, heç bir real fərq).

Təəssüf ki, burada verilən bir çox cavab burada, bir növ kompleks, əhəmiyyətli fərq olduğunu düşünür və ya təbliğ edir.

Həqiqətən, onun üçün çox deyil, eyni şey üçün fərqli sözlər.

[son əlavə]


Əslində, Brian Neal bu sualın şərhində işarə etdiyindən, C ++ standartı üzv funksiyalarına istinadən heç vaxt "metod" termini istifadə etmir. Bəzi insanlar bunu C ++-nin obyekt yönümlü bir dil olmadığını bir əlamət hesab edə bilər; Ancaq mən bu bir ağıllı qrup qrupunun başqa bir müddətdən istifadə etmək üçün xüsusi bir səbəb olduğunu düşünməmişik.

181
01 окт. Michael Burr tərəfindən verilmiş cavab Oct 01 2008-10-01 02:48 '08 at 2:48 2008-10-01 02:48

Ümumiyyətlə, metodlar bir sinifə aid funksiyalardır, funksiyalar kodun hər hansı digər sahəsindəki ola bilər, belə ki bütün metodların funksiyaları olduğunu, lakin bütün funksiyaların metodları olmadığını təyin edə bilərsiniz:

Aşağıdakı python nümunəsini götür:

 class Door: def open(self): print 'hello stranger' def knock_door: a_door = Door() Door.open(a_door) knock_door() 

Aşağıdakı nümunə sizə "açıq" adlı bir üsul və ya fəaliyyət göstərən "Qapı" adlı bir sinfi göstərir. Kodun bir hissəsi daha aşağıda "def" ilə işlədilir və funksiya bu funksiyanı müəyyən edir, çünki bu sinifdə elan edilmir, çünki bu funksiya sinif daxilində təsvir etdiyimiz metodu çağırır və nəhayət, özü tərəfindən işlədilir.

Gördüyünüz kimi hər hansı bir funksiyanı zəng edə bilərsiniz, ancaq bir üsul çağırmaq istəyirsinizsə, üsulla elan edilmiş sinif (sinif .method (obyekt)) ilə eyni cür yeni bir obyekt keçirməlisiniz və ya obyektin içindəki üsulu çağırmalısınız (object.Method ()), ən azı python.

Yalnız bir şəxsin həyata keçə biləcəyi üsulları düşünün, belə ki, bir Dog sinifiniz varsa, yalnız bu sinifdə bir korteks funksiyasına malik olmağın vacibdir və bir funksiyanı yazmaq üçün məna verə bilən bir şəxs sinfi varsa, bu bir üsul olacaq Hər hansı bir sinifə aid olmayan "qidalanma", həm də insanlar və köpəklər ötürülə bilər və bu funksiyanı xüsusilə heç bir sinifə aid olmadığından çağırırsınız.

83
01 окт. Cavab Gustavo Rubio 01 oktyabr tərəfindən verilir . 2008-10-01 03:33 '08 saat 03:33 'da 2008-10-01 03:33

FunksiyaMetod arasındakı əsas fərqin çox ümumi təsviri:

Funksiyalar dərslərdən kənarda müəyyənləşdirilir və metodlar daxilində və siniflərdə müəyyənləşdirilir.

37
29 окт. Jorgesys tərəfindən verilmiş cavab 29 oktyabr 2014-10-29 02:08 '14 at 2:08 2014-10-29 02:08

Xatırlamaq üçün asan yol:

  • F əmsalı → F ree (Pulsuz və ya obyektə aid olmayan vasitələri)
  • M ethod → ​​M ember (bir obyektin və ya sinifin üzvü)
29
08 окт. 08 oktyabrda Duc Filanın verdiyi cavabı 2017-10-08 03:07 '17 'də 3:07' də 2017-10-08 03:07 'də

Burada oxumaq istəyirsinizsə, bu "OO metodlarına mənim giriş"

Obyekt yönümlü paradiqmanın ideyası "yaxşı" obyektlərdən ibarət "təhdid" proqramıdır. Real dünya obyektləri, məsələn, bir Xidmətçinin varsa, işçinin adına, işçi kimliyinə, vəzifəsinə, idarəsinə aiddir və s. Və s

Obyekt həmçinin öz xüsusiyyətlərini necə idarə edə bilir və onlara bəzi əməliyyatlar həyata keçirir. İşçinin indi nə etdiyini bilmək istəyiriksə deyək, ondan soruşacağıq.

 employe whatAreYouDoing. 

Bu "whatAreYouDoing" obyektə göndərilən "mesaj" dir. Məqsədi bu suallara necə cavab verəcəyini bilir, məsələnin həllində "üsul" olduğunu bildirir.

Beləliklə, obyektlərin davranışlarını nümayiş etdirmələri metodlar adlanır. Beləliklə, artifact üsulları bir şey etməlidir.

Digər mümkün üsullar:

 employee whatIsYourName employee whatIsYourDepartmentsName 

və digərləri

Digər tərəfdən funksiyalar bir proqramlaşdırma dilinin bəzi məlumatları hesablamaq üçün yollardır, məsələn, bir funksiyanı əlavə edə bilərsiniz addValues ​​(8, 8)

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

İlk populyar proqramlaşdırma dilləri (fortran, c, pascal kimi) OO paradiqmasını əhatə etmədikləri üçün, bu obyektlərin yalnız bu "əsərləri" istinad edirlər.

məsələn C əvvəlki funksiyası:

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

Bir obyektin bəzi hərəkətləri yerinə yetirmək üçün bir "funksiya" var, çünki funksiyalar riyazi materialla daha çox bağlıdır və İşçinin bu barədə az riyaziyyat var, ancaq funksiyaları ilə eyni şəkildə işləyən üsullara sahib ola bilərsiniz, məsələn, Java'da bu, addValues-un bərabər funksiyası olacaq.

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

Tənqidi görünür? Bu, Java-nın C ++ və C ++-də köklərinə malik olması ilə əlaqədardır.

Sonda bu yalnız bir konseptdir, onlar həyata keçirilməsində eyni görünə bilər, lakin OO sənədlərində bir üsul adlanır.

Java'da əvvəlki işçi obyektinin nümunəsi.

 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. 

Fərqi tətbiq etdiyi yerdə "domain" dir.

AppleScript bir məqamda OO olan "təbii dil" prinsipinin bir anlayışına sahibdir. Məsələn, Smalltalk. Ümid edirəm ki, oxuduqdan sonra obyektlərin metodlarını anlamaq daha asan olacaq.

Qeyd. Kod yalnız nümunə kimi xidmət etmək üçün tərtib edilməməlidir. Mesajı dəyişdirmək və bir Python nümunəsi əlavə etməkdən çəkinməyin.

26
01 окт. cavab OscarRyz 01 oktyabr verilir . 2008-10-01 03:21 '08 at 3:21 2008-10-01 03:21

OO dünyasında bu iki adətən eyni şey deməkdir.

Səmimi nöqteyi-nəzərdən Math və CS funksiyası həmişə eyni arqumentlərlə (f (x, y) = (x + y)) çağırıldığında eyni nəticəni verir. Digər tərəfdən bir üsul adətən bir sinif nümunəsi ilə əlaqələndirilir. Yenə də ən müasir OO dilləri artıq "funksiyası" termini çox hissəsi üçün istifadə edir. Bir çox statik üsullar funksiyaları kimi görünə bilər, çünki adətən bir dövlət yoxdur (həmişə doğru deyil).

16
01 окт. Cavab TheSoftwareJedi 01 oktyabr tərəfindən verilir . 2008-10-01 02:56 '08 saat 02:56 'da 2008-10-01 02:56

Deyək ki, funksiya kodun blokudur (adətən, öz əhatə dairəsi və bəzən öz bağlanması ilə), bəzi arqumentləri ala bilər və nəticə də geri qoya bilər.

Bir üsul, bir obyektə aid bir funksiyadır (bəzi obyekt yönümlü sistemlərdə, bir sinifə aid olduğunu söyləmək daha doğrudur). Bir "mülkiyyət" obyekti / sinfi olmağınız, bir obyekt / sinif vasitəsilə bir üsula istinad edirsiniz; məsələn, Java-da bir obyektin "qapı" na aid "açıq ()" üsuluna zəng etmək üçün "door.open ()" yazmalısınız.

Tipik olaraq, metodlar, obyektin / sinifdəki davranışlarını təsvir edən bəzi əlavə xüsusiyyətləri də alır: məsələn, hansı obyektlərin (və ya siniflərin) bir metoddan istifadə oluna biləcəyini müəyyən edən visibility (obyektə yönəlmiş encapsulation konsepsiyası ilə əlaqəli).

Bir çox obyekt yönümlü dildə bütün "funksiyalar" bir obyektə (ya da sinfi) istinad edir, beləliklə bu dildə üsullar olmayan funksiyalar yoxdur.

14
01 окт. Mike Tunnicliffe tərəfindən verilmiş cavab Oct 01 2008-10-01 02:55 '08 saat 02:55 'da 2008-10-01 02:55

Bir funksiya və ya üsul, bəzi əməliyyatları yerinə yetirən və mütləq bir dəyər qaytarmayan adlandırılmış çağırılabilir bir parçadır.

Cdə termini funksiyası istifadə olunur. JavaC # insanlar bu metodu deyəcəklər (bu halda funksiya sinifdə / obyektin içində müəyyən edilir).

C ++ proqramçıları bir funksiyanı və ya bəzən bir metodu (prosedur C ++ kodunu yazdıqlarına və ya obyekt yönümlü C ++ yolunu yazdıqlarına görə) deyə bilərlər, C / C ++ proqramçıları bir funksiyanı çağırır, çünki "metod" termini C / C ++ ədəbiyyatında daha az istifadə olunur).

Funksiyanı sadəcə bu adı zəng edərək istifadə edirsiniz,

 result = mySum(num1, num2); 


Birincisi əvvəlki obyektinə istinad edərək, bir üsul çağırırsınız, məsələn,

 result = MyCalc.mySum(num1,num2); 
11
06 февр. 06 fevralda Abdullah Leghari tərəfindən verilmiş cavab . 2014-02-06 08:03 '14 at 8:03 2014-02-06 08:03

Tarixi olaraq, "metod" bir dəyəri və bir "funksiya" verməyən bir şey olduğunda incə fərq ola bilər. Hər bir dil xüsusi bir məna ilə şərtlərin öz lüğətinə malikdir.

"C" -də "funksiya" sözü proqram prosedurudur .

Java'da "funksiya" funksiyası xüsusi bir məna daşımır, "metod" sinif tətbiqini təşkil edən alt proqramlardan biri deməkdir.

Aşağıdakı kimi görünəcək C # -də:

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

Amma əslində, təkrar edirəm ki, 2 anlayışda heç bir fərq yoxdur. Əgər Java haqqında qeyri-rəsmi müzakirələrdə "funksiya" termini istifadə etsəniz, insanlar "metod" demək və davam etdirdiyinizi qəbul edirlər. Java haqqında müvafiq sənədlərdə və ya təqdimatlarda istifadə etməyin, əks halda ağılsız görünürsən.

11
12 янв. Cavab Jaimin Patel tərəfindən 12 Yanvar verilir 2016-01-12 05:13 '16 'da 5:13 2016-01-12 05:13

Function - riyazi konsepsiya. Məsələn:

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

f () funksiyası ikinci parametrenin kosinosuna əlavə olunmuş ilk parametrenin günahını qaytaracaqdır. Yalnız riyaziyyatdır. Sin () və cos () funksiyaları da fəaliyyət göstərir. Funksiya fərqli bir xüsusiyyətə malikdir: eyni parametrlərlə bütün funksiya zəngləri eyni nəticə verməlidir.

Digər tərəfdən metod, bir obyektlə əlaqəli funksiyaya obyekt yönümlü bir dildə aiddir. Bu bir örtük parametrə malikdir: təsirlənən obyekt (və onun vəziyyəti).

G (x) üsulu ilə Z obyekti varsa, aşağıdakıları görə bilərsiniz:

 Zg(x) = sin(x) + cos(Zy) 

Bu halda parametr x keçilir, daha əvvəl nümunə funksiyasında olduğu kimi. Bununla belə, cos () parametri Z obyektinin içərisində yaşayan dəyərdir və Z içindəki məlumatlar (Zy) Zq metodu üçün örtük parametrlərdir ().

11
01 окт. Bradley Mazurek Oct 01 tərəfindən verilmiş cavab 2008-10-01 03:54 '08 at 3:54 2008-10-01 03:54

Metodlar siniflərin funksiyalarıdır. Adi jargonda insanlar hər yerə üsul və funksiya mübadiləsi edirlər. Əsasən, siz onları eyni hesab edə bilərsiniz (qlobal funksiyaların metodlar deyildiyinə əmin deyil).

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

10
01 окт. cavab verilmişdir 01 oktyabr. 2008-10-01 02:52 '08 saat 02:52 'da 2008-10-01 02:52

Object Pascal və ya C ++ kimi OO dillərində bir "metod" bir obyektlə əlaqəli bir funksiyadır. Məsələn, "İt" obyekti "qabıq" funksiyasına malik ola bilər və bu "üsul" hesab olunur. Əksinə, "StrLen" funksiyası tək dayanır (bir dəlil kimi verilən dizəyin uzunluğunu təmin edir). Buna görə də sadəcə bir "funksiya" dir. Javascript texniki cəhətdən obyektivdir, lakin C ++, C # və ya Pascal kimi dolğun dil ilə müqayisədə bir çox məhdudiyyətlər var. Ancaq bu fərq hələ də davam etməlidir.

Bəzi əlavə faktlar: C # tamamilə obyektivdir, beləliklə muxtar funksiyalar yarada bilməzsiniz. " C # -də hər bir funksiya bir obyektə bağlıdır və beləliklə, texniki cəhətdən "üsul" olur. Kicker, C # -də neçə adamın "metodlar" deyildiyindən, sadəcə "funksiyaları" termini istifadə edir, çünki heç bir real fərq yoxdur.

Nəhayət, Paskalın bütün gurusu burada mənim üzərimə atılmır, - Pascal da "funksiyaları" (dəyəri qaytaran) və "prosedurlar" arasında fərq qoyur. Əlbəttə ki, bir dəyər seçə bilərsiniz, baxmayaraq ki, C # bu fərqlə açıq bir şey etmir.

7
01 окт. Mark Brittingham tərəfindən verilmiş cavab 01 oktyabr 2008-10-01 02:59 '08 at 02:59 2008-10-01 02:59

Nümunə adlı bir sinifdə sinif hərəkət üsulları.

 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" } } 
7
01 окт. cavab verilmişdir 01 oktyabr. 2008-10-01 02:57 '08 at 2:57 2008-10-01 02:57

Python'dan bəhs etdiyinizə görə, aşağıdakı illüstrasiya ən müasir obyekt yönümlü dillərdə üsullar və obyektlər arasındakı əlaqənin faydalı bir nümunəsi ola bilər. Qısacası, "metod" deyilənlər yalnız bir funksiyadır (başqa cavablar göstərildiyi kimi), lakin Python bunu ən çox dildə daha aydın edir.

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

İndi greet_with_greeter funksiyasını müqayisə greet_with_greeter və metod greet : yalnız fərq ilk parametrenin adıdır ("greeter" adını verdiyim funksiyada, "mən" adlanan mənada). Buna görə də mən greet_with_greeter funksiyasından istifadə etdiyim kimi greet metodundan istifadə edə greet_with_greeter (sinif daxilində müəyyən etdiyim kimi, "dot" sintaksisindən istifadə etməklə):

 Greeter.greet(hello_greeter, "World") 

Beləliklə, üsulu effektiv bir funksiyaya çevirdim. Bir funksiyanı bir üsula çevirə bilərəmmi? Python müəyyən etdikdən sonra siniflərlə ünsiyyət qurmağınızı təmin edərkən, cəhd edin:

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

Bəli, greet_with_greeter funksiyası artıq greet2 metodu olaraq da bilinir. Bu, bir üsul və funksiya arasında yalnız bir real fərq göstərir: bir obyektin üsuluna zəng etdiyiniz zaman object.method(args) çağırdığınızda, dil magically onu method(object, args) çevirir.

(OO purists bir metodun bir funksiyadan fərqli olduğunu iddia edə bilər və inkişaf etmiş Python və ya Ruby - və ya Smalltalk-a düşsəniz - onların nöqtələrini görməyə başlayacaqsınız) Bəzi dillər bitlərə xüsusi çıxış təmin edir, lakin əsas konseptual fərq hələ də gizlidir isteğe bağlı parametr.)

7
01 окт. Sam Stokes'a Oct 01 cavab verin 2008-10-01 04:20 '08 at 4:20 2008-10-01 04:20

Bir funksiya məlumatları idarə etmək üçün istifadə edilə bilən məntiqi elementlər qrupudur.

Metod, aid olduğu obyektin məlumatlarını idarə etmək üçün istifadə edilən bir funksiyadır. Texniki cəhətdən, sizin siniflə tam əlaqəli deyil, bir sinifdə elan edilmiş funksiyanız varsa, bu bir üsul deyil; O pis dizayn deyildi.

7
03 дек. cavab gian ebao 03 dekabrda verilir. 2008-12-03 12:47 '08 at 12:47 2008-12-03 12:47

Bir funksiya data işlətmək üçün istifadə edilə bilən məntiq bir sıra. Metod, aid olduğu obyektin məlumatlarını idarə etmək üçün istifadə edilən bir funksiyadır. Texniki cəhətdən, sizin siniflə tam əlaqəli deyil, bir sinifdə elan edilmiş funksiyanız varsa, bu bir üsul deyil; O pis dizayn deyildi.

7
25 февр. Debaprasad fevralın 25-də verilir 2014-02-25 07:40 '14 da 7:40 2014-02-25 07:40

mənim üçün: metodun funksiyası və funksiyası üst-üstə düşürsə, mən aşağıdakıları qəbul edirəm:

  • funksiyası dəyər qaytara bilər
  • parametrləri gözləmək olar

Hər hansı bir kod parçası kimi, siz daxil etdiyiniz obyektlərə də sahib ola bilərsiniz və nəticədə görünən bir obyekt ola bilər. Çalışma müddətində onlar bir obyektin vəziyyətini dəyişə bilər, amma bu mənim üçün əsas fəaliyyətini dəyişmir.

Obyektlərin funksiyaları və ya başqa kodları çağırarkən fərqlənən bir tərif ola bilər. Sözsüz fərqlər üçün bu bir şey deyil və niyə insanlar onları dəyişir? Hesablama nümunəsinin bir nümunəsi olduğunda diqqətli olacağam. Çünki hesabları yerinə yetirmək üçün işçiləri işə götürürəm:

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

Beləliklə, işəgötürənin hesablamalara görə məsuliyyət daşıyır. Daha çox pul istərsə, mən onu azad edəcəyəm və lazımsız işçilərin istifadəsi üçün kollektor funksiyasını geri qaytarmaq və yeni bir işçi əldə etmək imkanını verəcəyəm.

Hətta üsulun obyektlərin bir funksiyası olduğunu iddia edir və funksiya ilə əlaqəli deyil, hesablama mənə kömək etmir. Funksiyanın identifikatoru və, ideal olaraq, funksiya sənədləri mənə nə lazımdır və nə qaytara biləcəyini izah edir. Qalanlar, obyektin bəzi dövlətinin manipulyasiyası kimi, mənim üçün çox şəffaf deyil. Mən həm funksiyaların, həm də metodların nə etdiklərini ətraflı bilmədən dövlətin nə verəcəyini və necə idarə edəcəyini gözlədiyini gözləyirəm. Hətta təmiz hesablama funksiyası konsolun vəziyyətini dəyişdirə və ya günlük faylına əlavə edə bilər.

6
13 апр. Dirk Schumacherin aprelin 13-də verdiyi cavabı 2012-04-13 12:50 '12 at 12:50 pm 2012-04-13 12:50

Anlayışımdan bir metod, bir sinifdə edilə bilən hər hansı bir əməliyyatdır. Proqramlaşdırmada istifadə edilən ümumi bir müddətdir.

Bir çox dildə, üsullar funksiyalar və subroutines ilə təmsil olunur. Çox dilin onlar üçün istifadə etdiyi əsas fərq funksiyaların arayanya geri qayıdacağıdır və subroutin işləməyəcəkdir. Однако многие современные языки имеют только функции, но они необязательно не возвращают никакого значения.

Например, скажем, вы хотите описать кошку, и вы хотели бы, чтобы она могла зевать. Вы должны создать класс Cat с помощью метода Yawn, который, скорее всего, будет функцией без возвращаемого значения.

4
ответ дан marcj 01 окт. '08 в 2:53 2008-10-01 02:53

В первом приближении метод (в стиле O ++ С++) - это другое слово для функции-члена, то есть функция, являющаяся частью класса.

В таких языках, как C/С++, вы можете иметь функции, которые не являются членами класса; вы не вызываете функцию, не связанную с методом класса.

4
ответ дан Captain Segfault 01 окт. '08 в 3:00 2008-10-01 03:00

Люди ИМХО просто хотели придумать новое слово для упрощения связи между программистами, когда они хотели ссылаться на функции внутри объектов.

Если вы говорите о методах, вы подразумеваете функции внутри класса. Если вы говорите о функциях, вы имеете в виду просто функции вне класса.

Истина заключается в том, что оба слова используются для описания функций. Даже если вы ошибались, ничего плохого не происходит. Оба слова хорошо описывают то, что вы хотите достичь в своем коде.

Функция - это код, который должен играть роль (функцию) что-то делать. Метод - это метод решения проблемы.

Он делает то же самое. Это одно и то же. Если вы хотите быть супер точным и соглашаетесь с соглашением, вы можете вызывать методы как функции внутри объектов.

3
ответ дан Morfidon 01 апр. '15 в 1:34 2015-04-01 01:34

Функция - это понятие, в основном принадлежащее Программируемое программирование , где функция является объектом, который может обрабатывать данные и возвращает значение

Метод - это концепция Object Oriented programming , где метод является членом класса, который в основном обрабатывает члены класса.

3
ответ дан Akshay Khale 10 нояб. '15 в 17:23 2015-11-10 17:23

Пусть не усложняет, что должно быть очень простым ответом. Методы и функции - это одно и то же. Вы вызываете функцию функцией, когда она находится вне класса, и вы вызываете функцию методом, когда она написана внутри класса.

3
ответ дан SamyCode 14 дек. '17 в 17:03 2017-12-14 17:03

Функции и методы - это одно и то же

Некоторые программисты подумали, что лучше было бы вызвать функции внутри классов с другим именем. Они называли их методами .

Функции-члены внутри классов называются методами в некоторых языках программирования (например, Java).

Но если программа на С++ попросила вас провести различие между этими двумя терминами, и вы дадите ему следующие аргументы,

  • Методы разные, поскольку они имеют модификаторы доступа.
  • Методы разные, потому что они внутри классов.
  • Методы неявно передают ссылку на объект, на который они были вызваны.

то вы, вероятно, сбиваете с толку его/ее. (большинство) программисты на C++ (обычно) не используют имя "метод", и в этом случае все вышеперечисленные аргументы ошибочны. Бьярне Страуструп даже не удосужился назвать "методы" функций членов в своей книге "Язык программирования на C++".

Если ребенок известен под именем "Джон" дома и "Петр" в школе, можно ли сказать, что Питер идет в школу, но Джон не делает?

Дифференциация между "функциями" и "методами" так же сложна, как дифференцирование "функций" и "функций".

Поверьте, что "функция" и "метод" представляют собой только два разных имени , вы будете в порядке.

2
ответ дан Devashish 03 дек. '17 в 1:59 2017-12-03 01:59

Я знаю, что многие другие уже ответили, но я нашел следующее - простой, но эффективный однострочный ответ. Хотя это не выглядит намного лучше, чем другие ответы здесь, но если вы внимательно прочитаете его, у него есть все, что вам нужно знать о методе vs function.

Метод - это функция, которая имеет определенный приемник, в терминах ООП, метод является функцией экземпляра объекта.

2
ответ дан f-society 24 апр. '17 в 2:11 2017-04-24 02:11

Я не эксперт, но это то, что я знаю:

  • Функция - это термин языка C, это относится к фрагменту кода, и имя функции будет идентификатором для использования этой функции.

  • Метод - это термин OO, обычно он имеет этот указатель в параметре функции. Вы не можете вызвать этот кусок кода, например C, вам нужно использовать объект для его вызова.

  • Методы вызова также различны. Здесь вызывается смысл найти адрес этой части кода. C/С++, время связывания будет использовать символ функции для поиска.

  • Objecive-C отличается. Invoke означает функцию C, чтобы использовать структуру данных для поиска адреса. Это означает, что все известно во время выполнения.

2
ответ дан Marvin 30 июля '13 в 7:02 2013-07-30 07:02

Ниже приведено объяснение метода против функции с использованием примеров JavaScript:

test(20, 50); - это определение функции и использование для выполнения некоторых шагов или возврата чего-то назад, которое может быть где-то сохранено/использовано.

Вы можете повторно использовать код: Определите код один раз и используйте его много раз.

Вы можете использовать один и тот же код много раз с разными аргументами для получения разных результатов.

 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(); здесь test() может быть методом некоторого объекта или настраиваемого пользователем прототипа для встроенных объектов, здесь больше объяснений:

JavaScript-методы - это действия, которые могут выполняться над объектами.

Метод JavaScript - это свойство, содержащее определение функции.

Встроенное свойство/метод для строк в javascript:

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

Пользовательский пример:

 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 name to 'SomeName' 

Вы также можете определить свойства для String, Array и т.д.

1
ответ дан Lahar Shah 28 сент. '17 в 17:12 2017-09-28 17:12

Функция vs Метод: -

  • функции определены в структурном языке и методы определены в объектно-ориентированном >

  • Функции имеют независимое существование, так как они могут быть определены вне класса. Пример: - функция main() на языке C, С++, но методы не имеют независимого существования, которое всегда определяется в классе.
    Пример: - метод main() на языке С#, который определен в классе.

  • Функции определены в структурированных языках, таких как Pascal, C и объектно-ориентированный язык, например javaScript, но методы определены в объектно-ориентированных языках, таких как С#, Java

1
ответ дан User1703 29 дек. '17 в 8:40 2017-12-29 08:40

Разница между методами и функциями

Из чтения этого документа на Microsoft

Члены, которые содержат исполняемый код, все вместе называются членами функции класса. В предыдущем разделе описаны методы, которые являются основным видом членов функции. В этом разделе описываются другие типы членов функции, поддерживаемые С#: конструкторы, свойства, индексы, события, операторы и финализаторы.

Итак, методы - это подмножество функций. Каждый метод является функцией, но не каждая функция является методом, например, constructor не может считаться методом , но это функция.

1
ответ дан Siraj 15 дек. '17 в 21:42 2017-12-15 21:42
  • 1
  • 2

Другие вопросы по меткам > или Задайте вопрос