freeCodeCamp/guide/arabic/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../arguments-optional/index.md

13 KiB

title localeTitle
Arguments Optional الحجج اختياري

:triangular_flag_on_post: تذكر استخدام Read-Search-Ask إذا واجهتك مشكلة. حاول إقران البرنامج :busts_in_silhouette: واكتب الكود الخاص بك :pencil:

:checkered_flag: شرح المشكلة:

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

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

روابط ذات صلة

:speech_balloon: تلميح: 1

في كل مرة تتعامل فيها مع حجة ، عليك أن تتحقق مما إذا كانت رقمًا أم لا. لهذه الوظيفة التي تعالج هذه المهمة سيوفر لك رمز المتكررة.

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 2

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

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 3

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

حاول أن تحل المشكلة الآن

تنبيه المفسد!

علامة تحذير

الحل في المستقبل!

:beginner: الحل الأساسي للكود:

` function addTogether() { // Function to check if a number is actually a number // and return undefined otherwise. var checkNum = function(num) { if (typeof num !== 'number') { return undefined; } else return num; };

  // Check if we have two parameters, check if they are numbers 
  // handle the case where one is not 
  // returns the addition. 
  if (arguments.length > 1) { 
    var a = checkNum(arguments[0]); 
    var b = checkNum(arguments[1]); 
    if (a === undefined || b === undefined) { 
      return undefined; 
    } else { 
      return a + b; 
    } 
  } else { 
    // If only one parameter was found, returns a new function that expects two 
    // Store first argument before entering the new function scope 
    var c = arguments[0]; 

    // Check the number again, must be outside the function to about returning an object 
    // instead of undefined. 
    if (checkNum(c)) { 
      // Return function that expect a second argument. 
      return function(arg2) { 
        // Check for non-numbers 
        if (c === undefined || checkNum(arg2) === undefined) { 
          return undefined; 
        } else { 
          // if numbers then add them. 
          return c + arg2; 
        } 
      }; 
    } 
  } 
} 

// test here 
addTogether(2,3); 

`

:rocket: تشغيل الكود

شرح الشفرة:

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

روابط ذات صلة

:sunflower: حل الشفرة المتوسطة:

` function addTogether() { var args = new Array(arguments.length); //Storing the arguments in an array for(var i = 0; i < args.length; ++i) { args[i] = arguments[i]; } //Check for the arguments length if(args.length == 2){ //If there are two arguments,check for the type of both arguments //Use typeof to check the type of the argument(both should be numbers) if(typeof args[0] !== 'number' || typeof args[1] !=='number' ){ return undefined; } return args[0]+args[1]; } //When only one argument is provided if(args.length == 1){ a= args[0]; //Check the argument using typeof if(typeof a!=='number'){ return undefined; } else{ //Making use of closures return function(b){ //Checking the second argument if(typeof b !=='number'){ return undefined; } else return a+b; }; } } }

// test here 
addTogether(2,3); 

`

:rocket: تشغيل الكود

شرح الشفرة:

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

روابط ذات صلة

:rotating_light: الحل المتقدم للكود:

` //jshint esversion: 6 function addTogether() { var args = Array.from(arguments); return args.some(n => typeof n !== 'number') ? undefined: args.length > 1 ? args.reduce((acc, n) => acc += n, 0): (n) => typeof n === "number" ? n + args[0]: undefined; }

// test here 
addTogether(2,3); 

`

:rocket: تشغيل الكود

شرح الشفرة:

  • أولا أنا من خلال تكرار الحجج والتحقق من الحجج التي ليست عددا وترجع غير محددة
  • إذا لم يكن الأمر كذلك فأنا أتأكد مما إذا كان طول الوسيطات أعلى من 1 ، إذا كنت أجمع الحجج باستخدام Array.prototype.reduce
  • أقوم بإرجاع دالة تتحقق مما إذا كانت الوسيطة التي تم تمريرها عبارة عن رقم وجمعها ، إذا لم يتم إرجاعها

روابط ذات صلة

ملاحظة: الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة إلى صفحة wiki. (الرجاء عدم إزالة أي أسماء مستخدمين حالية.)

:clipboard: ملاحظات للمساهمات:

  • :warning: لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
  • أضف شرحًا لحلك.
  • تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم . :traffic_light:
  • الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . ( :warning: لا تزيل أي أسماء مستخدمين حالية )

نرى :point_right: Wiki Challenge Solution Template كمرجع.