اذهب إلى المحتوى
  • 0

ماهي الوظائف من الدرجة الأولى و الوظائف من المرتبة الاعلى في جافاسكريبت

Talal Alharbi2

السؤال

Recommended Posts

  • 0

First Class Function أي وظائف من الدرجة الأولى وهي تطلق على الوظائف إذا كانت تعامل مثل باقي المتغيرات (Variable) . و هذا يعني أن هذه الوظائف يمكن تمريرها كوسائط إلى وظائف أخرى (Argument)، وإعادتها كقيم من وظائف أخرى ، وتعيينها لمتغيرات أو تخزينها في هياكل البيانات.

Higher-Order Function الوظيفة الأعلى مرتبة وهي الوظيفة التي تقوم بتنفيذ واحد على الأقل مما يلي:

  • يأخذ وظيفة أو أكثر كوسائط parameters.
  • إرجاع دالة كنتيجة لها.

جميع الوظائف الأخرى هي وظائف من الدرجة الأولى.

تُستخدم الدوال من مرتبة عليا عادةً في حالات التحكم في التدفق (Flow Control) والتلاعب بالبيانات (Data Manipulation) والتعامل مع الأحداث (Events) وغيرها، ومن أمثلة الدوال من مرتبة عليا في جافاسكريبت:

1- دوال التحكم في التدفق:

  •  forEach()
  •  map()
  •  filter()
  •  reduce()
  •  sort()

2- دوال التلاعب بالبيانات:

  •  find()
  •  every()
  •  some()
  •  concat()
  •  slice()

3- دوال التعامل مع الأحداث:

  •  addEventListener()
  •  setTimeout()
  •  setInterval()

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

قد يفيدك الاطلاع على هذه المقالة :

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

First Class Function: تعني أن الدوال في جافا سكريبت يمكن استخدامها كمتغيرات وإرجاعها كقيمة من دالة أخرى، ويمكن تمريرها كوسائط لدوال أخرى.

مثال:

function calc(num1, num2) {
  return num1 + num2;
}

const plus = calc; // يتم تخزين الدالة add في متغير sum
console.log(plus(8, 4)); // سيظهر الناتج 12

Higher-Order Function: تعني دالة يمكنها استقبال دالة أخرى كوسيط أو إرجاع دالة جديدة.

مثال:

function calc(num) {
  return function(x) {
    return x * num;
  }
}

const double = calc(4); // يتم إنشاء دالة جديدة تضرب العدد بـ4
console.log(double(2)); // سيظهر الناتج 8

يمكنك التعمق في Higher-Order Function من خلال موسوعة حسوب.

الدوال من المرتبة الأعلى (Higher-Order Functions) و Lambdas - موسوعة حسوب (hsoub.com)

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

تعتبر لغة البرمجة أنها تدعم وظائف الدرجة الأولى عندما لا يكون لها قيود / حدود على كيفية إنشاء الوظائف أو استخدامها.حيث يقال إن لغة البرمجة لها وظائف من الدرجة الأولى عندما يتم التعامل مع الوظائف في تلك اللغة مثل أي متغير آخر.

بعض "الامتيازات" للوظائف من الدرجة الأولى:

  • يمكن إسنادها كقيمة لمتغيرات بدون مشكلة
    const string = "Foo"
    const num    = 2
    const bool   = false
    const greet  = (name) => `Hello ${name}`
    
    greet('Ahmed') // Hello Ahmed

     

  • يمكن تمريرها كمعاملات للوظائف
    const nums = [1, 2, 3, 4, 5]
    const addOne = (n) => n + 1
    const addedOne = nums.map(addOne) // [2, 3, 4, 5, 6]

     

  • يمكن إرجاعها كنتيجة من وظيفة ما
    const makeCounter = () => {
        let count = 0
        return () => ++count
    }
    const counter = makeCounter()
    counter() // 1
    counter() // 2

     

  • يمكن تخزينها في أي هياكل البيانات : يمكننا تخزين الوظائف في مصفوفات و يمكننا أيضًا تخزينها في كائنات 

وظائف الترتيب الأعلى هي وظائف تعمل على وظائف أخرى ، إما عن طريق أخذها كوسيطات أو عن طريق إعادتها. بكلمات بسيطة ، دالة الترتيب الأعلى هي وظيفة تتلقى دالة كوسيطة أو تُرجع الدالة كإخراج. على سبيل المثال ، Array.prototype.map و Array.prototype.filter و Array.prototype.reduce هي بعض وظائف الترتيب الأعلى المضمنة في اللغة.

ولمعرفة الأهمية سنقوم بكتابة مثال من خلال وظائف الترتيب الأعلى وبدونها

بدون وظيفة الترتيب الأعلى

const birthYear = [1975, 1997, 2002, 1995, 1985];
const ages = [];
for(let i = 0; i < birthYear.length; i++) {
  let age = 2018 - birthYear[i];
  ages.push(age);
}

يمكنك تنفيذ البرنامج السابق ببساطة مع وظيفة الترتيب الأعلى map 

const birthYear = [1975, 1997, 2002, 1995, 1985];
const ages = birthYear.map(year => 2018 - year);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

ممتاز شرح واضح لكن الفايده من First function ماهو ؟

بتاريخ 15 ساعة قال عبدالباسط ابراهيم:

تعتبر لغة البرمجة أنها تدعم وظائف الدرجة الأولى عندما لا يكون لها قيود / حدود على كيفية إنشاء الوظائف أو استخدامها.حيث يقال إن لغة البرمجة لها وظائف من الدرجة الأولى عندما يتم التعامل مع الوظائف في تلك اللغة مثل أي متغير آخر.

بعض "الامتيازات" للوظائف من الدرجة الأولى:

  • يمكن إسنادها كقيمة لمتغيرات بدون مشكلة
    const string = "Foo"
    const num    = 2
    const bool   = false
    const greet  = (name) => `Hello ${name}`
    
    greet('Ahmed') // Hello Ahmed

     

  • يمكن تمريرها كمعاملات للوظائف
    const nums = [1, 2, 3, 4, 5]
    const addOne = (n) => n + 1
    const addedOne = nums.map(addOne) // [2, 3, 4, 5, 6]

     

  • يمكن إرجاعها كنتيجة من وظيفة ما
    const makeCounter = () => {
        let count = 0
        return () => ++count
    }
    const counter = makeCounter()
    counter() // 1
    counter() // 2

     

  • يمكن تخزينها في أي هياكل البيانات : يمكننا تخزين الوظائف في مصفوفات و يمكننا أيضًا تخزينها في كائنات 

وظائف الترتيب الأعلى هي وظائف تعمل على وظائف أخرى ، إما عن طريق أخذها كوسيطات أو عن طريق إعادتها. بكلمات بسيطة ، دالة الترتيب الأعلى هي وظيفة تتلقى دالة كوسيطة أو تُرجع الدالة كإخراج. على سبيل المثال ، Array.prototype.map و Array.prototype.filter و Array.prototype.reduce هي بعض وظائف الترتيب الأعلى المضمنة في اللغة.

ولمعرفة الأهمية سنقوم بكتابة مثال من خلال وظائف الترتيب الأعلى وبدونها

بدون وظيفة الترتيب الأعلى

const birthYear = [1975, 1997, 2002, 1995, 1985];
const ages = [];
for(let i = 0; i < birthYear.length; i++) {
  let age = 2018 - birthYear[i];
  ages.push(age);
}

يمكنك تنفيذ البرنامج السابق ببساطة مع وظيفة الترتيب الأعلى map 

const birthYear = [1975, 1997, 2002, 1995, 1985];
const ages = birthYear.map(year => 2018 - year);

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال طلال السحيمي:

ممتاز شرح واضح لكن الفايده من First function ماهو ؟

 

الفائدة ببساطة لوظائف الدرجة الأولى في لغة البرمجة javascript أنه في بعض اللغات البرمجية الأخرى  يكون لها قيود / حدود على كيفية إنشاء الوظائف أو استخدامها وليس كما في الشرح السابق فلا يمكنك يمكن إسنادها كقيمة لمتغيرات ولا يمكن تمريرها كمعاملات للوظائف إلخ

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال عبدالباسط ابراهيم:

الفائدة ببساطة لوظائف الدرجة الأولى في لغة البرمجة javascript أنه في بعض اللغات البرمجية الأخرى  يكون لها قيود / حدود على كيفية إنشاء الوظائف أو استخدامها وليس كما في الشرح السابق فلا يمكنك يمكن إسنادها كقيمة لمتغيرات ولا يمكن تمريرها كمعاملات للوظائف إلخ

اعلم هذا ، لكن مالفائدة البرمجية من الامر ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 38 دقائق مضت قال طلال السحيمي:

اعلم هذا ، لكن مالفائدة البرمجية من الامر ؟

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

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

هذا مثال بسيط لإنشاء واستخدام وظيفة من الدرجة الأولى في جافاسكريبت:

// إنشاء دالة من الدرجة الأولى
function greet(name) {
  console.log('Hello, ' + name + '!');
}

// استخدام دالة كمعامل لدالة أخرى
function sayHi(callback) {
  callback('John');
}

// استخدام الدالة كقيمة لمتغير
const myGreet = greet;
myGreet('Mary');

// استخدام الدالة داخل دالة أخرى 
sayHi(function(name) {
  console.log('Hi, ' + name + '!');
});

الدالة greet هي دالة بسيطة تستقبل اسم وتطبع رسالة تحيي بها الشخص الذي يحمل هذا الاسم.

ثم يتم استخدام هذه الدالة كمعامل في دالة sayHi. هذا يعني أن دالة sayHi تتوقع دالة (أي تعامل معها بطريقة مماثلة لطريقة تعاملها مع البيانات) كمدخل لها. بعد ذلك، يتم استدعاء الدالة الممررة إلى sayHi، والتي تكون الدالة greet في هذه الحالة، مع إعطاءها اسم "John" كوسيط.

في السطر التالي، يتم إنشاء متغير جديد باسم myGreet، والذي يشير إلى نفس الدالة greet.

ثم يتم استدعاء دالة sayHi مرة أخرى، لكن هذه المرة يتم تمرير دالة جديدة كوسيط، وهي دالة تستقبل اسمًا وتطبع رسالة تحيا بها الشخص الذي يحمل هذا الاسم. يتم تمرير هذه الدالة باستخدام دالة callback التي تمرر دالة كمعامل.

يتم استدعاء الدالة الممررة إلى sayHi مع إعطائها اسم "John" كوسيط. سيتم تنفيذ الدالة الممررة، والتي تمرر لها الاسم "John"، وسيتم طباعة رسالة تحيا بها الشخص الذي يحمل هذا الاسم.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...