سؤال

هل يمكن لأحد أن يقدم شرحا بسيطا ل طُرق ضد. المهام في سياق OOP؟

هل كانت مفيدة؟

المحلول

أ وظيفة هو جزء من التعليمات البرمجية التي يتم استدعاؤها بالاسم.يمكن تمرير البيانات للعمل عليها (أي.المعلمات) ويمكن اختياريًا إرجاع البيانات (قيمة الإرجاع).يتم تمرير كافة البيانات التي تم تمريرها إلى دالة بشكل صريح.

أ طريقة عبارة عن جزء من التعليمات البرمجية يتم استدعاؤه بواسطة اسم مرتبط بكائن ما.في معظم النواحي، تكون مطابقة للدالة باستثناء اختلافين رئيسيين:

  1. يتم تمرير الطريقة ضمنيًا إلى الكائن الذي تم استدعاؤها عليه.
  2. الطريقة قادرة على العمل على البيانات الموجودة داخل الفئة (تذكر أن الكائن هو مثيل للفئة - الفئة هي التعريف، والكائن هو مثيل لتلك البيانات).

(وهذا شرح مبسط، مع تجاهل مسائل نِطَاق إلخ.)

نصائح أخرى

هناك طريقة على كائن.
الوظيفة مستقلة عن الكائن.

بالنسبة لجافا، هناك طرق فقط.
بالنسبة لـ C، هناك وظائف فقط.

بالنسبة لـ C++، سيعتمد الأمر على ما إذا كنت في فصل دراسي أم لا.

'طريقة' هي الكلمة الموجهة للكائنات 'وظيفة'.هذا إلى حد كبير كل ما في الأمر (أي لا يوجد فرق حقيقي).

لسوء الحظ، أعتقد أن الكثير من الإجابات هنا تعمل على إدامة أو تطوير فكرة وجود اختلاف معقد وذو معنى.

حقًا - ليس هناك الكثير مما في الأمر، فقط كلمات مختلفة لنفس الشيء.

[إضافة متأخرة]


في الواقع، كما بريان نيل وأشار في تعليق ل هذا السؤال, ، لا يستخدم معيار C++ مطلقًا مصطلح "الطريقة" عند الإشارة إلى وظائف الأعضاء.قد يعتبر بعض الأشخاص ذلك بمثابة إشارة إلى أن لغة C++ ليست في الواقع لغة موجهة للكائنات؛ومع ذلك، أفضل أن أعتبره إشارة إلى أن مجموعة ذكية جدًا من الأشخاص لم تعتقد أن هناك سببًا قويًا بشكل خاص لاستخدام مصطلح مختلف.

على العموم:الأساليب هي وظائف تنتمي إلى فئة، ويمكن أن تكون الوظائف في أي نطاق آخر من التعليمات البرمجية حتى تتمكن من الإشارة إلى أن جميع الطرق هي وظائف، ولكن ليست كل الوظائف هي طرق:

خذ مثال بايثون التالي:

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

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

knock_door()

يوضح لك المثال الموضح فئة تسمى "Door" والتي تحتوي على طريقة أو إجراء يسمى "open"، وتسمى طريقة لأنه تم الإعلان عنها داخل الفصل.يوجد جزء آخر من التعليمات البرمجية مع "def" أدناه مباشرةً والذي يحدد الوظيفة، إنها وظيفة لأنه لم يتم الإعلان عنها داخل الفصل، هذه الوظيفة تستدعي الطريقة التي حددناها داخل الفصل لدينا كما ترون وأخيرًا يتم إنشاء الوظيفة دعا من تلقاء نفسه.

كما ترون يمكنك استدعاء دالة في أي مكان ولكن إذا كنت تريد استدعاء طريقة ما، فيجب عليك تمرير كائن جديد من نفس نوع الفئة التي تم الإعلان عن الطريقة (Class.method(object)) أو يتعين عليك استدعاءها الطريقة داخل الكائن (object.Method())، على الأقل في بايثون.

فكر في الأساليب كأشياء يمكن لكيان واحد فقط القيام بها، لذلك إذا كان لديك فئة Dog، فمن المنطقي أن يكون لديك وظيفة النباح فقط داخل تلك الفئة وستكون هذه طريقة، إذا كان لديك أيضًا فئة Person، فقد يكون من المنطقي اكتب وظيفة "موجز" لأنها لا تنتمي إلى أي فئة حيث يمكن إطعام كل من البشر والكلاب ويمكنك تسمية هذه الوظيفة لأنها لا تنتمي إلى أي فئة على وجه الخصوص.

تعريف عام جدًا للفرق الرئيسي بين أ وظيفة و أ طريقة:

يتم تعريف الوظائف خارج الفئات، في حين يتم تعريف الأساليب داخل وجزء من الفئات.

طريقة بسيطة للتذكر:

  • Fمسحة → Free (وسائل مجانية لا تنتمي إلى كائن أو فئة)
  • مالطريقة → مجمرة (عضو في كائن أو فئة)

إذا كنت ترغب في القراءة هنا هو "مقدمتي لأساليب OO"

الفكرة وراء النموذج الموجه للكائنات هي "تهديد" البرنامج الذي يتكون من ..حسنا "الكائنات".الكائنات في العالم الحقيقي لها خصائص، على سبيل المثال، إذا كان لديك موظف، فإن الموظف لديه اسم، ومعرف موظف، ومنصب، وهو ينتمي إلى قسم وما إلى ذلك.إلخ.

ويعرف الكائن أيضًا كيفية التعامل مع سماته وإجراء بعض العمليات عليها.لنفترض أننا إذا أردنا معرفة ما يفعله الموظف الآن فسنسأله.

employe whatAreYouDoing.

أن "whatAreYouDoing" هي "رسالة" مرسلة إلى الكائن.الكائن يعرف كيفية الإجابة على تلك الأسئلة، ويقال أن لديه "طريقة" لحل السؤال.

لذا، فإن الطريقة التي يجب أن تكشف بها الكائنات سلوكها تسمى الأساليب.وبالتالي فإن الأساليب هي أن الكائن قطعة أثرية يجب أن "يفعل" شيئًا ما.

الطرق الممكنة الأخرى هي

employee whatIsYourName
employee whatIsYourDepartmentsName

إلخ.

من ناحية أخرى، الوظائف هي طرق تستخدمها لغة البرمجة لحساب بعض البيانات، على سبيل المثال قد يكون لديك الدالة addValues( 8 , 8 ) التي تُرجع 16

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

نظرًا لأن لغات البرمجة الشائعة الأولى (مثل fortran وc وpascal) لم تغطي نموذج OO، فإنها تستدعي فقط "وظائف" هذه المصنوعات اليدوية.

على سبيل المثال الوظيفة السابقة في لغة C ستكون:

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

ليس من "الطبيعي" القول بأن الكائن لديه "وظيفة" لتنفيذ بعض الإجراءات، لأن الوظائف أكثر ارتباطًا بالأشياء الرياضية في حين أن الموظف لديه القليل من الرياضيات عليها، ولكن يمكن أن يكون لديك طرق تؤدي نفس الوظائف تمامًا، على سبيل المثال في Java، ستكون هذه هي وظيفة addValues ​​المكافئة.

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

يبدو مألوفا؟ذلك لأن Java لها جذورها في C++ وC++ في C.

في النهاية هو مجرد مفهوم، وقد يبدوان متشابهين في التنفيذ، لكن في وثائق OO يُطلق عليهما اسم الأسلوب.

فيما يلي مثال لكائن الموظف السابق في Java.

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

الفرق إذن هو في "المجال" حيث يتم تطبيقه.

لدى AppleScript فكرة المجاز "باللغة الطبيعية"، والتي كانت لدى OO في وقت ما.على سبيل المثال Smalltalk.آمل أن يكون من الأسهل بالنسبة لك فهم الأساليب في الكائنات بعد قراءة هذا.

ملحوظة:لا ينبغي تجميع الكود، فقط ليكون بمثابة مثال.لا تتردد في تعديل المنشور وإضافة مثال بايثون.

في عالم OO، يتم استخدام الاثنين بشكل شائع للإشارة إلى نفس الشيء.

من منظور الرياضيات وCS فقط، ستُرجع الدالة دائمًا نفس النتيجة عند استدعائها بنفس الوسائط ( f(x,y) = (x + y) ).من ناحية أخرى، ترتبط الطريقة عادةً بمثيل للفئة.مرة أخرى، لم تعد معظم لغات OO الحديثة تستخدم مصطلح "وظيفة" في معظم الأحيان.العديد من الأساليب الثابتة يمكن أن تكون مشابهة تمامًا للدوال، لأنها عادةً لا تحتوي على حالة (ليس صحيحًا دائمًا).

لنفترض أن الوظيفة عبارة عن كتلة من التعليمات البرمجية (عادةً بنطاقها الخاص، وأحيانًا بإغلاقها الخاص) والتي قد تتلقى بعض الوسائط وقد تُرجع أيضًا نتيجة.

الطريقة هي وظيفة مملوكة لكائن ما (في بعض الأنظمة الموجهة للكائنات، من الأصح القول أنها مملوكة لفئة ما).كونك "مملوكًا" لكائن/فئة يعني أنك تشير إلى الطريقة من خلال الكائن/الفئة؛على سبيل المثال، في Java، إذا كنت تريد استدعاء الأسلوب "open()" الذي يملكه الكائن "door" فأنت بحاجة إلى كتابة "door.open()".

عادةً ما تكتسب الأساليب أيضًا بعض السمات الإضافية التي تصف سلوكها داخل الكائن/الفئة، على سبيل المثال:الرؤية (المتعلقة بمفهوم التغليف الموجه للكائنات) والتي تحدد الكائنات (أو الفئات) التي يمكن استدعاء الطريقة منها.

في العديد من اللغات الموجهة للكائنات، تنتمي جميع "الوظائف" إلى كائن (أو فئة) معينة، وبالتالي لا توجد في هذه اللغات وظائف ليست طرقًا.

الأساليب هي وظائف الطبقات.في المصطلحات العادية، يتبادل الأشخاص الأساليب ويعملون في كل مكان.في الأساس يمكنك التفكير فيهما على أنهما نفس الشيء (لست متأكدًا مما إذا كانت الوظائف العامة تسمى طرقًا).

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

الوظيفة هي مفهوم رياضي.على سبيل المثال:

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

يقول أن الدالة f() ستعيد خطيئة المعلمة الأولى المضافة إلى جيب تمام المعلمة الثانية.إنها مجرد رياضيات.وكما يحدث فإن الخطيئة () وcos () هي أيضًا وظائف.الدالة لها خاصية أخرى:جميع الاستدعاءات إلى دالة لها نفس المعلمات يجب أن تُرجع نفس النتيجة.

ومن ناحية أخرى، فإن الطريقة هي دالة مرتبطة بكائن في لغة موجهة للكائنات.لديها معلمة ضمنية واحدة:الكائن الذي يتم التصرف عليه (وحالته).

لذلك، إذا كان لديك كائن Z بالطريقة g(x)، فقد ترى ما يلي:

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

في هذه الحالة، يتم تمرير المعلمة x، كما في مثال الدالة سابقًا.ومع ذلك، فإن معلمة cos() هي قيمة موجودة داخل الكائن Z.Z والبيانات التي تعيش بداخله (Z.y) هي معلمات ضمنية لطريقة Z's g().

الوظيفة أو الطريقة عبارة عن جزء محدد من التعليمات البرمجية قابل للاستدعاء والذي يقوم بتنفيذ بعض العمليات وإرجاع قيمة بشكل اختياري.

في ج اللغة التي يتم فيها استخدام مصطلح الوظيفة. جافا & ج # قد يقولها الناس كطريقة (يتم تعريف الوظيفة في هذه الحالة ضمن فئة/كائن).

أ سي ++ قد يطلق عليها المبرمج وظيفة أو في بعض الأحيان طريقة (اعتمادًا على ما إذا كانوا يكتبون كود C++ ذو النمط الإجرائي أو يقومون بطريقة موجهة للكائنات من C++، ومن المحتمل أيضًا أن يطلق عليها مبرمج C/C++ فقط وظيفة لأن المصطلح "طريقة" أقل شيوعًا المستخدمة في الأدب C/C++).

يمكنك استخدام وظيفة بمجرد الاتصال باسمها مثل،

result = mySum(num1, num2);


يمكنك استدعاء الطريقة من خلال الرجوع إلى كائنها أولاً، مثل،

result = MyCalc.mySum(num1,num2);

تاريخيًا، ربما كان هناك اختلاف دقيق بين أن "الطريقة" هي شيء لا يُرجع قيمة، و"وظيفة" هي التي تقوم بذلك. كل لغة لها خصائصها الخاصة. معجم المصطلحات مع معنى خاص.

في "ج", ، الكلمة "وظيفة" وسائل روتين البرنامج.

في جافا, ، على المدى "وظيفة" ليس لديها أي معنى خاص.بينما "طريقة" يعني أحد الإجراءات الروتينية التي تشكل تنفيذ الفصل.

في ج # من شأنه أن يترجم على النحو التالي:

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

لكن في الحقيقة، أكرر أنه لا يوجد فرق في المفهومين.إذا استخدمت مصطلح "وظيفة" في المناقشات غير الرسمية حول Java، فسيفترض الناس أنك تقصد "الطريقة" ويستمرون.لا تستخدمه في المستندات أو العروض التقديمية المناسبة حول Java، وإلا ستبدو سخيفًا.

تعمل الأساليب الموجودة في الفصل على مثيل الفصل، والذي يسمى الكائن.

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

في لغات OO مثل Object Pascal أو C++، "الطريقة" هي دالة مرتبطة بكائن ما.لذلك، على سبيل المثال، قد يكون لكائن "كلب" وظيفة "نباح" وسيعتبر هذا "أسلوبًا".وفي المقابل، فإن الدالة "StrLen" تقف بمفردها (فهي توفر طول السلسلة المقدمة كوسيطة).إنه هكذا فقط وظيفة." JavaScript موجهة من الناحية الفنية أيضًا ، ولكنها تواجه العديد من القيود مقارنة بلغة كاملة مثل C ++ أو C# أو Pascal.ومع ذلك، ينبغي أن يظل التمييز قائما.

بعض الحقائق الإضافية:

أخيرًا - حتى لا يهاجمني أي من معلمي باسكال هنا - يفرق باسكال أيضًا بين "الوظائف" (التي تُرجع قيمة) و"الإجراءات" التي لا تُرجعها.لا تقوم لغة C# بإجراء هذا التمييز بشكل صريح على الرغم من أنه يمكنك بالطبع اختيار إرجاع قيمة أم لا.

منذ أن ذكرت بايثون، قد يكون ما يلي توضيحًا مفيدًا للعلاقة بين الأساليب والكائنات في معظم اللغات الموجهة للكائنات الحديثة.باختصار، ما يسمونه "الطريقة" هو مجرد وظيفة يتم تمرير وسيطة إضافية (كما أشارت الإجابات الأخرى)، ولكن بايثون تجعل ذلك أكثر وضوحًا من معظم اللغات.

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

الآن قارن الوظيفة greet_with_greeter والطريقة greet:الاختلاف الوحيد هو اسم المعلمة الأولى (في الوظيفة أطلقت عليها اسم "مرحبًا"، وفي الطريقة أسميتها "ذاتيًا").حتى أتمكن من استخدام greet الطريقة بنفس الطريقة التي أستخدمها تمامًا greet_with_greeter الوظيفة (باستخدام صيغة "النقطة" للوصول إليها، حيث أنني قمت بتعريفها داخل الفصل):

Greeter.greet(hello_greeter, "World")

لذلك قمت بتحويل الطريقة بشكل فعال إلى وظيفة.هل يمكنني تحويل الوظيفة إلى طريقة؟حسنًا، بما أن بايثون تتيح لك العبث بالفئات بعد تعريفها، فلنحاول:

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

نعم الوظيفة greet_with_greeter يُعرف الآن أيضًا باسم الطريقة greet2.يوضح هذا الفرق الحقيقي الوحيد بين الطريقة والوظيفة:عند استدعاء أسلوب "على" كائن عن طريق الاتصال object.method(args), ، فاللغة تحولها بطريقة سحرية method(object, args).

(قد يجادل المتشددون في OO بأن الطريقة شيء مختلف عن الوظيفة، وإذا دخلت في لغة Python أو Ruby المتقدمة - أو Smalltalk!- سوف تبدأ في رؤية وجهة نظرهم.كما تمنح بعض اللغات طرقًا وصولاً خاصًا إلى أجزاء من الكائن.لكن الاختلاف المفاهيمي الرئيسي لا يزال يتمثل في المعلمة الإضافية المخفية.)

الوظيفة هي مجموعة من المنطق التي يمكن استخدامها لمعالجة البيانات.

في حين أن الطريقة هي وظيفة تُستخدم لمعالجة بيانات الكائن الذي تنتمي إليه.لذا من الناحية الفنية، إذا كانت لديك دالة غير مرتبطة تمامًا بفصلك ولكن تم الإعلان عنها في الفصل، فهي ليست طريقة؛يطلق عليه تصميم سيء.

لي:وظيفة الطريقة والوظيفة هي نفسها إذا وافقت على ما يلي:

  • قد تقوم الدالة بإرجاع قيمة
  • قد تتوقع المعلمات

تمامًا مثل أي جزء من التعليمات البرمجية، قد يكون لديك كائنات تضعها وقد يكون لديك كائن يأتي نتيجة لذلك.أثناء القيام بذلك، قد يغيرون حالة الكائن ولكن ذلك لن يغير وظيفته الأساسية بالنسبة لي.

قد يكون هناك تعريف مختلف في استدعاء وظائف الكائنات أو الرموز الأخرى.لكن أليس هذا أمرًا يتعلق بالاختلافات اللفظية ولهذا السبب يتبادلها الناس؟المثال المذكور للحساب سأكون حذرًا معه.لأنني أقوم بتعيين موظفين للقيام بحساباتي:

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

ومن خلال القيام بذلك بهذه الطريقة، يمكنني الاعتماد على أن يكون صاحب العمل مسؤولاً عن الحسابات.إذا كان يريد المزيد من المال، فأنا أطلق سراحه وأترك ​​لوظيفة جامع الكارباج المتمثلة في التخلص من الموظفين غير المستخدمين القيام بالباقي والحصول على موظف جديد.

حتى الجدال حول أن الطريقة هي وظيفة كائن وأن الوظيفة عبارة عن حساب غير متصل لن يساعدني.سيخبرني واصف الوظيفة نفسه ووثائق الوظيفة بشكل مثالي بما تحتاجه وما قد يعود به.أما الباقي، مثل التلاعب بحالة كائن ما، فهو ليس شفافًا حقًا بالنسبة لي.أتوقع أن تقوم كل من الوظائف والأساليب بتقديم ما تزعمه والتلاعب به دون الحاجة إلى معرفة كيفية القيام بذلك بالتفصيل.حتى الوظيفة الحسابية البحتة قد تغير حالة وحدة التحكم أو تلحق بملف السجل.

من وجهة نظري، الطريقة هي أي عملية يمكن إجراؤها في الفصل الدراسي.وهو مصطلح عام يستخدم في البرمجة.

في العديد من اللغات، يتم تمثيل الأساليب بالوظائف والإجراءات الفرعية.يتمثل الاختلاف الرئيسي الذي تستخدمه معظم اللغات في أن الوظائف قد تعيد قيمة إلى المتصل وقد لا يقوم الروتين الفرعي بذلك.ومع ذلك، فإن العديد من اللغات الحديثة لها وظائف فقط، ولكن لا يمكنها اختياريًا إرجاع أي قيمة.

على سبيل المثال، لنفترض أنك تريد وصف قطة وتريد أن تكون قادرة على التثاؤب.يمكنك إنشاء فئة Cat باستخدام طريقة Yawn، والتي من المرجح أن تكون دالة بدون أي قيمة إرجاع.

لتقريب من الدرجة الأولى، الطريقة (في نمط C++ OO) هي كلمة أخرى لوظيفة عضو، وهي وظيفة تشكل جزءًا من فئة.

في لغات مثل C/C++، يمكن أن يكون لديك وظائف ليست أعضاء في فئة ما؛لا يمكنك استدعاء وظيفة غير مرتبطة بفصل دراسي.

أراد الأشخاص في IMHO فقط ابتكار كلمة جديدة لتسهيل التواصل بين المبرمجين عندما يريدون الإشارة إلى الوظائف داخل الكائنات.

إذا كنت تقول الأساليب فأنت تعني وظائف داخل الفصل.إذا كنت تقول وظائف فهذا يعني ببساطة وظائف خارج الفصل.

الحقيقة هي أن كلتا الكلمتين تستخدمان لوصف الوظائف.حتى لو استخدمته بطريقة خاطئة لا يحدث أي خطأ.تصف كلتا الكلمتين جيدًا ما تريد تحقيقه في التعليمات البرمجية الخاصة بك.

الوظيفة هي رمز يجب أن يلعب دورًا (وظيفة) لفعل شيء ما.الطريقة هي طريقة لحل المشكلة.

وهو يفعل الشيء نفسه.نفس الشيء.إذا كنت تريد أن تكون دقيقًا للغاية وتتوافق مع التقليد، يمكنك استدعاء الأساليب كوظائف داخل الكائنات.

الوظيفة هي المفهوم الذي ينتمي إليه بشكل أساسي البرمجة الموجهة نحو الإجراءات حيث تكون الوظيفة كيانًا يمكنه معالجة البيانات وإرجاع القيمة لك

الطريقة هي مفهوم البرمجة الشيئية حيث تكون الطريقة عضوًا في الفصل الذي يقوم في الغالب بالمعالجة على أعضاء الفصل.

دعونا لا نبالغ في تعقيد ما ينبغي أن يكون إجابة بسيطة للغاية.الأساليب والوظائف هي نفس الشيء.يمكنك استدعاء وظيفة وظيفة عندما تكون خارج فئة، ويمكنك استدعاء وظيفة طريقة عندما يتم كتابتها داخل فئة.

أنا لست خبيرا، ولكن هذا ما أعرفه:

  1. الوظيفة هي مصطلح في لغة C، وتشير إلى جزء من التعليمات البرمجية وسيكون اسم الوظيفة هو المعرف لاستخدام هذه الوظيفة.

  2. الأسلوب هو مصطلح OO، وعادة ما يحتوي على هذا المؤشر في معلمة الوظيفة.لا يمكنك استدعاء هذا الجزء من التعليمات البرمجية مثل C، تحتاج إلى استخدام الكائن لاستدعائه.

  3. طرق الاستدعاء مختلفة أيضًا.هنا استدعاء المعنى للعثور على عنوان هذا الجزء من التعليمات البرمجية.C/C++، سيستخدم وقت الارتباط رمز الوظيفة لتحديد موقعه.

  4. الهدف-C مختلف.استدعاء معنى وظيفة C لاستخدام بنية البيانات للعثور على العنوان.وهذا يعني أن كل شيء معروف في وقت التشغيل.

أعلم أن العديد من الأشخاص الآخرين قد أجابوا بالفعل، لكنني وجدت أن ما يلي هو إجابة بسيطة وفعالة في سطر واحد.على الرغم من أنها لا تبدو أفضل بكثير من إجابات الآخرين هنا، ولكن إذا قرأتها بعناية، فإنها تحتوي على كل ما تحتاج لمعرفته حول الطريقة مقابل الوظيفة.

الطريقة هي دالة لها جهاز استقبال محدد، بمصطلحات OOP، الطريقة هي دالة على مثيل كائن.

الفرق بين الطرق والوظائف

من القراءة هذا المستند على مايكروسوفت

يُعرف الأعضاء الذين يحتويون على تعليمات برمجية قابلة للتنفيذ بشكل جماعي بالأعضاء الوظيفيين للفئة.يصف القسم السابق الطرق، وهي النوع الأساسي من أعضاء الوظيفة.يصف هذا القسم الأنواع الأخرى من أعضاء الوظائف التي يدعمها C#:المنشئون والخصائص والمفهرسون والأحداث والمشغلون والنهائيون.

لذا فإن الأساليب هي مجموعة فرعية من الوظائف.كل طريقة هي وظيفة ولكن ليست كل وظيفة هي طريقة، على سبيل المثال، أ constructor لا يمكن أن يقال ك طريقة ولكنها وظيفة.

فيما يلي بعض الشرح للطريقة مقابل الطريقة.وظيفة باستخدام أمثلة جافا سكريبت:

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(); هنا يمكن أن يكون الاختبار () طريقة لبعض الكائنات أو نموذجًا أوليًا محددًا للكائنات المضمنة، إليك المزيد من الشرح:

أساليب 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's name to 'SomeName'

يمكنك تحديد خصائص String وArray وما إلى ذلك أيضًا على سبيل المثال

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

بعض المراجع: طريقة كائن جافا سكريبت, المهام, مزيد من المعلومات حول النموذج الأولي

الوظيفة - وظيفة في جزء مستقل من التعليمات البرمجية يتضمن بعض المنطق و يجب أن يتم استدعاؤه بشكل مستقل ويتم تعريفها خارج الفصل.

الطريقة - الطريقة عبارة عن جزء مستقل من التعليمات البرمجية يتم استدعاؤها بالإشارة إلى بعض الكائنات ويتم تعريفها داخل الفصل.

في لغة C++، يتم أحيانًا استخدام الطريقة لتعكس فكرة وظيفة العضو في الفصل.ولكنني وجدت مؤخرًا عبارة في كتاب «لغة البرمجة C++ الإصدار الرابع» في الصفحة 586 «الفئات المشتقة»

تسمى الوظيفة الافتراضية أحيانًا الطريقة.

هذا مربك بعض الشيء، لكنه قال أحيانا, ، لذلك فمن المنطقي تقريبًا أن يميل منشئ C++ إلى رؤية الأساليب كوظائف يمكن استدعاؤها على الكائنات ويمكن أن تتصرف بشكل متعدد الأشكال.

الفصل عبارة عن مجموعة من البيانات ويعمل بشكل اختياري باستخدام مُنشئ.

أثناء قيامك بإنشاء مثيل (نسخ، نسخ متماثل) لتلك الفئة المعينة، يقوم المنشئ بتهيئة الفئة وإرجاع كائن.

الآن يصبح الفصل كائنًا (بدون مُنشئ) والوظائف معروفة باسم الطريقة في سياق الكائن.

ذلك في الأساس

فئة <==جديد==>كائن

وظيفة <==جديد==>طريقة

في جافا يُقال عمومًا أن اسم المنشئ هو نفس اسم الفئة ولكن في الواقع يشبه هذا المُنشئ كتلة المثيل والكتلة الثابتة ولكن مع وجود مستخدم يحدد نوع الإرجاع (على سبيل المثال.نوع الفصل)

While the class can have an static block,instance block,constructor, function The object generally have only data & method.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top