diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json index 81b3e6e0d59..c656f807b97 100644 --- a/client/i18n/locales/english/intro.json +++ b/client/i18n/locales/english/intro.json @@ -4775,6 +4775,12 @@ "intro": [ "In this lab you will build a function to manage a record collection." ] + }, + "lab-optional-arguments-sum-function": { + "title": "Build an Optional Arguments Sum Function", + "intro": [ + "In this lab you will build a function that accepts up to two arguments, and sum them, but if there is only one argument returns a function that waits for the second number to sum." + ] } } }, diff --git a/client/src/pages/learn/full-stack-developer/lab-optional-arguments-sum-function/index.md b/client/src/pages/learn/full-stack-developer/lab-optional-arguments-sum-function/index.md new file mode 100644 index 00000000000..5107a3e6dbc --- /dev/null +++ b/client/src/pages/learn/full-stack-developer/lab-optional-arguments-sum-function/index.md @@ -0,0 +1,9 @@ +--- +title: Introduction to the Build an Optional Arguments Sum Function +block: lab-optional-arguments-sum-function +superBlock: full-stack-developer +--- + +## Introduction to the Build an Optional Arguments Sum Function + +In this lab you will build a function that accepts up to two arguments, and sum them, but if there is only one argument returns a function that waits for the second number to sum. diff --git a/curriculum/challenges/english/blocks/lab-optional-arguments-sum-function/a97fd23d9b809dac9921074f.md b/curriculum/challenges/english/blocks/lab-optional-arguments-sum-function/a97fd23d9b809dac9921074f.md new file mode 100644 index 00000000000..1f2e268ec40 --- /dev/null +++ b/curriculum/challenges/english/blocks/lab-optional-arguments-sum-function/a97fd23d9b809dac9921074f.md @@ -0,0 +1,120 @@ +--- +id: a97fd23d9b809dac9921074f +title: Build an Optional Arguments Sum Function +challengeType: 26 +dashedName: build-an-optional-arguments-sum-function +--- + +# --description-- + +In this lab you will build a function that accepts up to two arguments, and sum them, but if there is only one argument returns a function that waits for the second number to sum. + +**Objective:** Fulfill the user stories below and get all the tests to pass to complete the lab. + +**User Stories:** + +1. Create a function `addTogether`. +2. If the function receives two arguments, the function should return the sum of the two arguments. +3. If only one argument is provided, `addTogether` should return a function. + - When the returned function is called with a single argument, it should return the sum. + + ```js + const sumTwoAnd = addTogether(2); + sumTwoAnd(3); // 5 + ``` + +4. If either argument isn't a valid number, return `undefined`. + +# --hints-- + +You should have the `addTogether` function. + +```js +assert.isFunction(addTogether); +``` + +`addTogether(2, 3)` should return 5. + +```js +assert.deepEqual(addTogether(2, 3), 5); +``` + +`addTogether(23.4, 30)` should return 53.4. + +```js +assert.deepEqual(addTogether(23.4, 30), 53.4); +``` + +`addTogether("2", 3)` should return `undefined`. + +```js +assert.isUndefined(addTogether('2', 3)); +``` + +`addTogether(5, undefined)` should return `undefined`. + +```js +assert.isUndefined(addTogether(5, undefined)); +``` + +`addTogether("https://www.youtube.com/watch?v=dQw4w9WgXcQ")` should return `undefined`. + +```js +assert.isUndefined(addTogether('https://www.youtube.com/watch?v=dQw4w9WgXcQ')); +``` + +`addTogether(5)` should return a function. + +```js +assert.isFunction(addTogether(5)); +``` + +`addTogether(5)(7)` should return 12. + +```js +assert.deepEqual(addTogether(5)(7), 12); +``` + +`addTogether(2)([3])` should return `undefined`. + +```js +assert.isUndefined(addTogether(2)([3])); +``` + +`addTogether(2, "3")` should return `undefined`. + +```js +assert.isUndefined(addTogether(2, '3')); +``` + +# --seed-- + +## --seed-contents-- + +```js + +``` + +# --solutions-- + +```js +function addTogether() { + const first = arguments[0]; + if (typeof(first) !== 'number') { + return undefined; + } + if (arguments.length === 1) { + return function(second) { + if (typeof(second) !== 'number') { + return undefined; + } + return first + second; + }; + } + const second = arguments[1]; + if (typeof(second) !== 'number') { + return undefined; + } + return first + second; +} +``` diff --git a/curriculum/structure/blocks/lab-optional-arguments-sum-function.json b/curriculum/structure/blocks/lab-optional-arguments-sum-function.json new file mode 100644 index 00000000000..dbe882da93d --- /dev/null +++ b/curriculum/structure/blocks/lab-optional-arguments-sum-function.json @@ -0,0 +1,16 @@ +{ + "name": "Build an Optional Arguments Sum Function", + "isUpcomingChange": false, + "blockType": "lab", + "blockLayout": "link", + "dashedName": "lab-optional-arguments-sum-function", + "superBlock": "full-stack-developer", + "helpCategory": "JavaScript", + "challengeOrder": [ + { + "id": "a97fd23d9b809dac9921074f", + "title": "Build an Optional Arguments Sum Function" + } + ], + "usesMultifileEditor": true +} diff --git a/curriculum/structure/superblocks/full-stack-developer.json b/curriculum/structure/superblocks/full-stack-developer.json index 3758c17980f..5fa3291a16f 100644 --- a/curriculum/structure/superblocks/full-stack-developer.json +++ b/curriculum/structure/superblocks/full-stack-developer.json @@ -381,6 +381,7 @@ "lab-password-generator", "lab-sum-all-numbers-algorithm", "lab-html-entitiy-converter", + "lab-optional-arguments-sum-function", "review-javascript-fundamentals", "quiz-javascript-fundamentals" ]