chore(i18n,learn): processed translations (#49326)

This commit is contained in:
camperbot
2023-02-16 16:34:56 +05:30
committed by GitHub
parent 88752ccd6c
commit cd58053ced
540 changed files with 17855 additions and 1106 deletions

View File

@@ -11,7 +11,7 @@ dashedName: access-array-data-with-indexes
يمكننا الوصول إلى البيانات داخل القائمات باستخدام <dfn>الترتيب</dfn>.
Array indexes تكتب بنفس الأقواس التي تستخدم في مقاطع النصية (strings)، باستثناء أنه بدلاً من تحديد رمز، فإنهم يحددون عنصرا في القائمة (array). مثل المقاطع النصية (strings)، فإن القائمات (arrays) تستخدم القائمة <dfn>تبدأ بالصفر</dfn>، لذا فإن العنصر الأول في القائمة (array) لديه الترتيب (index) برقم `0`.
array indexes تكتب بنفس الأقواس التي تستخدم في المقاطع النصية (strings)، باستثناء أنه بدلاً من تحديد رمز، فإنهم يحددون عنصرا في القائمة (array). مثل المقاطع النصية، فإن القائمات تستخدم <dfn>ترتيب من الصفر</dfn>، لذا فإن رَقَم ترتيب (index) العنصر الأول في القائمة `0`.
<br>
@@ -23,7 +23,7 @@ console.log(array[0]);
const data = array[1];
```
`console.log(array[0])` تطبع `50` و `data` بقيمة `60`.
`console.log(array[0])` تطبع `50` و `data` قيمتها `60`.
# --instructions--

View File

@@ -9,7 +9,7 @@ dashedName: access-multi-dimensional-arrays-with-indexes
# --description--
إحدى الطرق للتفكير في قائمة <dfn>عديده الأبعاد(multi-dimensional)</dfn> هي تكون *قائمة من قائمات (array of arrays)*. عندما تستخدم أقواس للوصول إلى القائمة (array)، تشير المجموعة الأولى من الأقواس إلى المواد الموجودة في أعلى فئة (المستوى الأول)، ويشير كل زوج إضافي من الأقواس إلى المستوى التالي من الإدخالات في الداخل.
تتمثل إحدى طرق التفكير في القائمة <dfn>العديدة الأبعاد (multi-dimensional)</dfn> بأنها *كقائمة قائمات (array of arrays)*. عندما تستخدم أقواس للوصول إلى القائمة (array)، يشير أول زوج من الأقواس إلى العناصر الموجودة في أبعد مستوى (المستوى الأول)، ويشير كل زوج إضافي من الأقواس إلى المستوى التالي من الإدخالات في الداخل.
**مثال**
@@ -28,11 +28,11 @@ const element = arr[3][0][1];
في هذا المثال، لدي `subarray` قيمة `[[10, 11, 12], 13, 14]`, ولدي `nestedSubarray` قيمة `[10, 11, 12]`, ولدي `element` قيمة `11`.
**ملاحظة:** لا ينبغي أن تكون هناك أي مسافات بين اسم القائمة (array) والأقواس المربعة، مثل `array [0][0]` و حتي ذلك `array [0] [0]` ممنوع أيضاً. مع أنّ JavaScript قادر على معالجة هذا الأمر بشكل صحيح، إلا أن هذا قد يحير المبرمجين الآخرين الذين يقرؤون التعليمات البرمجية الخاص بك.
**ملاحظة:** لا ينبغي أن تكون هناك أي مسافات بين اسم القائمة (array) والأقواس المربعة، مثل `array [0][0]` و حتي ذلك `array [0] [0]` ممنوع أيضاً. مع أنّ JavaScript قادر على معالجة هذا الأمر بشكل صحيح، إلا أن هذا قد يحير المبرمجين الآخرين الذين يقرؤون التعليمات البرمجية الخاصة بك.
# --instructions--
اختر عنصرا من `myArray` باستخدام علامات الأقواس بحيث أن `myData` يساوي `8`.
اختار عنصرا من `myArray` باستخدام علامات الأقواس بحيث أن `myData` يساوي `8`.
# --hints--

View File

@@ -1,6 +1,6 @@
---
id: 56533eb9ac21ba0edf2244ed
title: إلحاق المتغيرات بالمقاطع النصية (Appending Variables to Strings)
title: إلحاق المتغيرات بالمقاطع النصية
challengeType: 1
videoUrl: 'https://scrimba.com/c/cbQmZfa'
forumTopicId: 16656
@@ -9,7 +9,7 @@ dashedName: appending-variables-to-strings
# --description--
تماما كما يمكننا بناء مقطع نصي (string) مكونة من عدة سطور باستخدام <dfn>الاحرف مقطع نصي (string literals)</dfn>، يمكننا أيضا إلحاق المتغيرات في مقطع نصي (string) معينة باستخدام (`+=`).
تماما كما نستطيع أن نبني مقطع نصي (string) مكون من عدة سطور باستخدام <dfn>مقاطع نصية حرفية (string literals)</dfn>، يمكننا أيضا إلحاق المتغيرات في مقطع نصي (string) معين باستخدام المشغل (`+=`).
على سبيل المثال:
@@ -19,11 +19,11 @@ let ourStr = "freeCodeCamp is ";
ourStr += anAdjective;
```
المتغير `ourStr` ستكون قيمته النهائية `freeCodeCamp is awesome!`.
قيمة المتغير `ourStr` النهائية ستكون `freeCodeCamp is awesome!`.
# --instructions--
عرف متغير جديد `someAdjective` بحيث يكون string قيمته مكون من 3 أحرف في الأقل, ثم إلحاقه بمتغير آخر `myStr` باستخدام `+=`.
حدد قيمة المتغير `someAdjective` بحيث يكون مقطع نصي مكون من 3 أحرف في الأقل, ثم ضفه في نهاية المتغير `myStr` باستخدام `+=`.
# --hints--

View File

@@ -9,13 +9,13 @@ dashedName: compound-assignment-with-augmented-addition
# --description--
في البرمجة، من الشائع استخدام assignments (التعيينات) لتعديل محتوي المتغير. تذكر أن كل شيء إلى يمين علامة المساواة يتم تقييمه أولا، لذلك يمكننا القول:
في البرمجة، من الشائع استخدام assignments (التعيينات) لتعديل محتوي المتغير. تذكر أن كل شيء إلى يمين علامة المساواة يتم تقييمه أولا، لذلك يمكننا أن نقول:
```js
myVar = myVar + 5;
```
لإضافة `5` إلى `myVar`. نظرًا لأن هذا نمط شائع، فهناك مشغلين يقوموا بعملية رياضية وتعيين في خطوة واحدة.
وذلك يضيف `5` إلى `myVar`. نظرًا أن هذا نمط شائع، فهناك مشغلين يقومون بالعملية الرياضية مع عملية التعيين في خطوة واحدة.
أحد هؤلاء المشغلين هو مشغل `+=`.
@@ -25,11 +25,11 @@ myVar += 5;
console.log(myVar);
```
سوف يتم عرض `6` في وحدة التحكم.
سوف يتم عرض `6` في الكونسول.
# --instructions--
تحويل التعيينات `a`, و `b`, و `c` لتستخدم المشغل `+=`.
حوِّل التعيينات `a` و `b` و `c` لتستخدم المشغل `+=`.
# --hints--

View File

@@ -9,13 +9,13 @@ dashedName: compound-assignment-with-augmented-multiplication
# --description--
يقوم المشغل `*=` مضاعفة متغير في عدد.
يقوم المشغل `*=` f بمضاعفة متغير في عدد.
```js
myVar = myVar * 5;
```
سوف تضاعف `myVar` في `5`. ويمكن إعادة كتابة هذا على النحو التالي:
سيتم ضرب `myVar` في `5`. ويمكن إعادة كتابة هذا على النحو التالي:
```js
myVar *= 5;

View File

@@ -1,6 +1,6 @@
---
id: 56533eb9ac21ba0edf2244b7
title: ربط المقاطع النصية باستخدام مشغل الجمع (Concatenating Strings with Plus Operator)
title: ربط المقاطع النصية باستخدام مشغل الجمع
challengeType: 1
videoUrl: 'https://scrimba.com/c/cNpM8AN'
forumTopicId: 16802
@@ -9,7 +9,7 @@ dashedName: concatenating-strings-with-plus-operator
# --description--
في JavaScript، عندما يستخدم مشغل `+` مع `String`، فإنه يسمى مشغل <dfn>سلسلة</dfn>. يمكنك بناء مقطع جديد من المقاطع الأخرى من طريق تجميع <dfn>السلسلة</dfn> بعضها مع بعض.
في JavaScript، عندما يستخدم مشغل `+` مع `String`، فإنه يسمى مشغل <dfn>الضم</dfn>. يمكنك بناء مقطع نصي جديد من المقاطع الأخرى عن طريق <dfn>ضم</dfn> بعضها مع بعض.
**مثال**
@@ -17,7 +17,7 @@ dashedName: concatenating-strings-with-plus-operator
'My name is Alan,' + ' I concatenate.'
```
**ملاحظة:** احترس من المسافات. لإن ربط السلسلة لا تضيف مسافات بين المقاطع الذي تم جمعها، لذا ستحتاج إلى إضافتها بنفسك.
**ملاحظة:** احترس من المسافات. لإن مشغِّل الضم لا يضيف مسافات بين المقاطع الذي يجمعها، لذا ستحتاج إلى إضافتها بنفسك.
مثال:
@@ -25,14 +25,14 @@ dashedName: concatenating-strings-with-plus-operator
const ourStr = "I come first. " + "I come second.";
```
المقطع الآتي `I come first. I come second.` سيتم عرضه في وحدة التحكم.
سيعرض الكونسول المقطع الآتي `I come first. I come second.`.
# --instructions--
أنشئ `myStr` من المقاطع الآتية `This is the start.` و `This is the end.` باستخدام المشغل `+`. تيقن من تضمين مسافة بين المقاطع.
# --hints--
يجب أن يوجد حرف الفراغ واحد بين المقطعين في `myStr`.
يجب أن يوجد حرف فراغ واحد بين المقطعين في `myStr`.
```js
assert(/start\. This/.test(myStr));
@@ -56,7 +56,7 @@ assert(code.match(/(["']).*\1\s*\+\s*(["']).*\2/g));
assert(/const\s+myStr/.test(code));
```
يجب عليك تعيين النتيجة إلى متغير `myStr`.
يجب عليك تعيين النتيجة إلى المتغير `myStr`.
```js
assert(/myStr\s*=/.test(code));

View File

@@ -1,6 +1,6 @@
---
id: 56533eb9ac21ba0edf2244b8
title: ربط المقاطع النصية باستخدام مشغل =+ (Concatenating Strings with the Plus Equals Operator)
title: ضم المقاطع النصية باستخدام مشغل =+ (Concatenating Strings with the Plus Equals Operator)
challengeType: 1
videoUrl: 'https://scrimba.com/c/cbQmmC4'
forumTopicId: 16803
@@ -9,9 +9,9 @@ dashedName: concatenating-strings-with-the-plus-equals-operator
# --description--
يمكننا أيضًا استخدام المشغل `+=` لربط مقطع <dfn>كسلسلة</dfn> في نهاية متغير مقطع نصي أخر موجود. ويمكن أن يكون ذلك مفيدا جدا لكسر المقطع طويل على عدة اسطر.
يمكننا أيضًا استخدام المشغل `+=` <dfn>لضم</dfn> مقطع نصي في نهاية متغير مقطع نصي آخر موجود. ويمكن أن يكون ذلك مفيدا جدا لكسر مقطع نصي طويل على عدة اسطر.
**ملاحظة:** احترس من المسافات. لا يضيف التسلسل مسافات بين مقاطع نصية المتسلسلة التي تم جمعها، لذا ستحتاج إلى إضافتها بنفسك.
**ملاحظة:** احترس من المسافات. لا يضيف المشغِّل مسافات بين المقاطع النصية المتسلسلة عند جمعها، لذا ستحتاج إلى إضافتها بنفسك.
مثال:
@@ -20,21 +20,21 @@ let ourStr = "I come first. ";
ourStr += "I come second.";
```
يحتوي `ourStr` قيمة مقطع الآتي `I come first. I come second.` الآن.
يحتوي `ourStr` على قيمة المقطع النصي الآتي `I come first. I come second.` الآن.
# --instructions--
أبني `myStr` على عدة اسطر بواسطة عمل سلسلة من المقاطع الآتية: `This is the first sentence.` و `This is the second sentence.` باستخدام المشغل `+=`. استخدم مشغل `+=` بطريقة مشابهة لكيفية عرضه في المثال وتيقن من تضمين مسافة بين المقاطع. ابدأ بتعيين المقطع الأول إلى `myStr`، ثم أضف المقطع الثاني.
ابني `myStr` على عدة اسطر بضم المقاطع الآتية: `This is the first sentence.` و `This is the second sentence.` و استخدم المشغل `+=`. استخدم مشغل `+=` بطريقة مشابهة للمثال وتيقن من تضمين مسافة بين المقاطع. ابدأ بتعيين المقطع الأول إلى `myStr`، ثم أضف المقطع الثاني.
# --hints--
يجب أن يوجد حرف الفراغ واحد بين المقطعين في `myStr`.
يجب أن يوجد حرف فراغ واحد بين المقطعين في `myStr`.
```js
assert(/sentence\. This/.test(myStr));
```
يجب أن يكون قيمة `myStr` مقطع الآتي `This is the first sentence. This is the second sentence.`
يجب أن يكون قيمة `myStr` المقطع النصي الآتي `This is the first sentence. This is the second sentence.`
```js
assert(myStr === 'This is the first sentence. This is the second sentence.');

View File

@@ -1,6 +1,6 @@
---
id: 56533eb9ac21ba0edf2244b9
title: بناء المقاطع النصية باستخدام المتغيرات (Constructing Strings with Variables)
title: بناء المقاطع النصية باستخدام المتغيرات
challengeType: 1
videoUrl: 'https://scrimba.com/c/cqk8rf4'
forumTopicId: 16805
@@ -9,7 +9,7 @@ dashedName: constructing-strings-with-variables
# --description--
أحيانا قد تحتاج إلي إنشاء مقطع. في أثناء استخدام مشغل التسلسل الآتي (`+`)، يمكنك إدخال متغير واحد أو أكثر في مقطع الذي تقوم ببنائه.
أحيانا قد تحتاج إلي إنشاء مقطع نصي. باستخدام مشغل الضم الآتي (`+`)، يمكنك إدخال متغير واحد أو أكثر في المقطع الذي تقوم ببنائه.
مثال:
@@ -22,17 +22,17 @@ const ourStr = "Hello, our name is " + ourName + ", how are you?";
# --instructions--
عيّن `myName` إلى مقطع مساوي لأسمك وأبني `myStr` بقيمة `myName` بين المقطعين الآتيين `My name is` و `and I am well!`
عيّن `myName` إلى مقطع مساوي لأسمك وأبني `myStr` واضعاً `myName` بين المقطعين الآتيين `My name is` و `and I am well!`
# --hints--
يجب تعيين `myName` كمقطع يحتوي 3 رموز في الأقل.
يجب تعيين `myName` كمقطع نصي يحتوي 3 رموز في الأقل.
```js
assert(typeof myName !== 'undefined' && myName.length > 2);
```
يجب عليك استخدام مشغلين اثنين من `+` لبناء `myStr` يحتوي `myName` داخله.
يجب عليك استخدام `+` مرتين لبناء `myStr` باحتواء `myName` داخله.
```js
assert(code.match(/["']\s*\+\s*myName\s*\+\s*["']/g).length > 0);

View File

@@ -9,36 +9,31 @@ dashedName: escape-sequences-in-strings
# --description--
الاقتباسات (Quotes) ليست الرموز الوحيدة التي يمكن أن تكتب <dfn>مخرَّجة</dfn> داخل المقطع النصي (string). وهناك سببان لاستخدام رموز احتيالية (escaping characters):
1. للسماح لك باستخدام الرموز التي قد لا تتمكن من استخدامها، مثل سطر جديد (newline).
2. للسماح لك بتمثيل الاقتباسات (Quotes) متعددة في مقطع نصي دون أن يسيء JavaScript فهم ما تعنيه.
وقد تعلمنا ذلك في التحدي السابق.
الاقتباسات (quotes) ليست الرموز الوحيدة التي يمكن أن تكتب <dfn>مخرَّجة</dfn> (escaped) داخل مقطع نصي (string). Escape sequences allow you to use characters you may not otherwise be able to use in a string.
<table class='table table-striped'><thead><tr><th>الكود</th><th>الناتج</th></tr></thead><tbody><tr><td><code>\'</code></td><td>single quote</td></tr><tr><td><code>\"</code></td><td>double quote</td></tr><tr><td><code>\\</code></td><td>backslash</td></tr><tr><td><code>\n</code></td><td>newline</td></tr><tr><td><code>\t</code></td><td>tab</td></tr><tr><td><code>\r</code></td><td>carriage return</td></tr><tr><td><code>\b</code></td><td>word boundary</td></tr><tr><td><code>\f</code></td><td>form feed</td></tr></tbody></table>
*لاحظ أن يجب أن يكون الخط المائل (backslash) نفسه يخرَّج (escaped) ليتم عرضه كخط مائل backslash.*
*Note that the backslash itself must be escaped in order to display as a backslash.*
# --instructions--
عيّن الأسطر الثلاثة التالية من النص في المتغير `myStr` الوحيد باستخدام تسلسل التخريج (escape sequences).
Assign the following three lines of text into the single variable `myStr` using escape sequences.
<blockquote>FirstLine<br>    \SecondLine<br>ThirdLine</blockquote>
سوف تحتاج إلى استخدام تسلسل تخريج لإدراج الرموز الخاصة (special characters) بشكل صحيح. ستحتاج أيضًا إلى اتباع التباعد كما هو موضح أعلاه، دون مسافات بين تسلسل التخريج escape sequences أو الكلمات.
You will need to use escape sequences to insert special characters correctly. You will also need to follow the spacing as it looks above, with no spaces between escape sequences or words.
**ملاحظة:** يتم الحصول على التباعد (indentation) في `SecondLine` باستخدام رمز التخريح الشريط (tab escape character) وليس المسافة الفارغة (space).
**Note:** The indentation for `SecondLine` is achieved with the tab escape character, not spaces.
# --hints--
يجب ألا يحتوي `myStr` على أي مسافات
`myStr` should not contain any spaces
```js
assert(!/ /.test(myStr));
```
يجب أن يحتوي `myStr` على المقطع (string) الآتي `FirstLine`, و `SecondLine`, و `ThirdLine` (تذكر الحساسية حالة الحرف (case sensitivity))
`myStr` should contain the strings `FirstLine`, `SecondLine` and `ThirdLine` (remember case sensitivity)
```js
assert(
@@ -46,31 +41,31 @@ assert(
);
```
يجب أن يتبع `FirstLine` رمز السطر الجديد (newline character) الاتي `\n`
`FirstLine` should be followed by the newline character `\n`
```js
assert(/FirstLine\n/.test(myStr));
```
يجب أن يحتوي `myStr` على رمز الشريط (tab character) وهو `\t` الذي يتبع رمز السطر الجديد (newline character)
`myStr` should contain a tab character `\t` which follows a newline character
```js
assert(/\n\t/.test(myStr));
```
يجب أن يسبق `SecondLine` رمز خط مائل (backslash character) يكتب هكذا `\`
`SecondLine` should be preceded by the backslash character `\`
```js
assert(/\\SecondLine/.test(myStr));
```
يجب أن يكون هناك رمز السطر الجديد (newline character) بين `SecondLine` و `ThirdLine`
There should be a newline character between `SecondLine` and `ThirdLine`
```js
assert(/SecondLine\nThirdLine/.test(myStr));
```
يجب أن يحتوي `myStr` فقط على الرموز التي تظهر في التعليمات
`myStr` should only contain characters shown in the instructions
```js
assert(myStr === 'FirstLine\n\t\\SecondLine\nThirdLine');

View File

@@ -9,15 +9,15 @@ dashedName: escaping-literal-quotes-in-strings
# --description--
عند تحديد مقطع نصي يجب أن تبدأ وتنتهي بالعلامات التنصيص واحد ('') أو مزدوج (""). ماذا يحدث عندما تحتاج إلى استخدام علامتا التنصيص مثل: `"` أو `'` داخل مقطعك النصي؟
عند تحديد مقطع نصي يجب أن تبدأ وتنتهي بعلامات التنصيص مفردة ('') أو مزدوجة (""). ماذا يحدث عندما تحتاج إلى استخدام علامتا التنصيص مثل: `"` أو `'` داخل مقطعك النصي؟
في JavaScript، يمكنك <dfn>إخراج</dfn> علامتا التنصيص حتي لا تعدّ نهاية للعلامة الأولى في المقطع النصي عن طريق وضع <dfn>خط مائل للشمال</dfn> بشكل (`\`) أمام علامتا التنصيص.
في JavaScript، يمكنك <dfn>إخراج</dfn> علامتا التنصيص حتى لا تعدّ نهاية للمقطع النصي عن طريق وضع <dfn>خط مائل للشمال</dfn> بشكل (`\`) أمام علامة التنصيص.
```js
const sampleStr = "Alan said, \"Peter is learning JavaScript\".";
```
هذا يوضح إلى JavaScript أن علامة التنصيص التالية ليست بنهاية للمقطع، بل يجب أن تظهر داخل المقطع. لذا عند طبع هذا إلى وحدة التحكم (console) ستحصل على:
هذا يوضح إلى JavaScript أن علامة التنصيص التالية ليست بنهاية للمقطع، بل يجب أن تظهر داخل المقطع. لذا عند طبع هذا إلى الكونسول (console) ستحصل على:
```js
Alan said, "Peter is learning JavaScript".
@@ -25,7 +25,7 @@ Alan said, "Peter is learning JavaScript".
# --instructions--
استخدم <dfn>شرطات مائلة للخلف</dfn> لتعيين مقطع إلى متغير `myStr` بحيث إذا كنت تريد طباعته إلى وحدة التحكم، ستري ما يلي:
استخدم <dfn>شرطات مائلة للشمال</dfn> لتعيين مقطع نصي إلى متغير `myStr` بحيث إذا كنت تريد طباعته إلى الكونسول، ستري ما يلي:
```js
I am a "double quoted" string inside "double quotes".

View File

@@ -15,9 +15,9 @@ dashedName: find-the-length-of-a-string
console.log("Alan Peter".length);
```
سوف يتم عرض القيمة `10` في وحدة التحكم. لاحظ أن رمز المسافة بين "Alan" و "Peter" يتم حسابه أيضا.
سوف يتم عرض القيمة `10` في الكونسول. لاحظ أن رمز المسافة بين "Alan" و "Peter" يتم عدُّه أيضا.
على سبيل المثال، إذا أنشئت متغير `const firstName = "Ada"`، يمكننا معرفة طول المقطع النصي (string) الآتي `Ada` باستخدام `firstName.length`.
على سبيل المثال، إذا أنشئت متغير `const firstName = "Ada"`، يمكننا معرفة طول المقطع النصي الآتي `Ada` باستخدام `firstName.length`.
# --instructions--

View File

@@ -28,7 +28,7 @@ dashedName: finding-a-remainder-in-javascript
# --hints--
يجب تهيئة المتغير `remainder` بمعني أخر يجب أن يكون initialized
يجب تهيئة المتغير `remainder`. بمعنى آخر، يجب أن يكون initialized
```js
assert(/(const|let|var)\s+?remainder/.test(code));

View File

@@ -19,7 +19,7 @@ for (let i = 0; i < arr.length; i++) {
}
```
تذكر أن القوائم (arrays) لديها ترتيب (index) قائم على الصفر، مما يعني أن ترتيب الأخير في القائمة (array) هو `length - 1`. يكون شرطك لهذه الحلقة (loop) هو `i < arr.length`، الذي يوقف الحلقة (loop) عندما `i` يساوي `length`. في هذه الحالة يكون آخر تكرار `i === 4`, بمعنى عندما تصبح `i` مساوي `arr.length - 1` وتنتج `6` ألى وحدة التحكم. ثم `i` يزيد إلى `5`، وتنتهي الحلقة (loop) لأن `i < arr.length` يكون `false`.
تذكر أن القوائم (arrays) لديها ترتيب (index) من الصفر، مما يعني أن ترتيب الأخير في القائمة (array) هو `length - 1`. يكون شرطك لهذه الحلقة (loop) هو `i < arr.length`، الذي يوقف الحلقة (loop) عندما `i` يساوي `length`. في هذه الحالة يكون آخر تكرار `i === 4`, بمعنى عندما تصبح `i` مساوي `arr.length - 1` وتنتج `6` ألى وحدة التحكم. ثم `i` يزيد إلى `5`، وتنتهي الحلقة (loop) لأن `i < arr.length` يكون `false`.
# --instructions--

View File

@@ -9,9 +9,9 @@ dashedName: manipulate-arrays-with-pop
# --description--
طريقة أخرى لتغيير البيانات في قائمة (Array) هي باستخدام الوظيفة `.pop()`.
طريقة أخرى لتغيير البيانات في القائمة (array) هي استخدام الوظيفة `.pop()`.
تستخدم الوظيفة `.pop()` لإزالة قيمة من نهاية القائمة. يمكننا تخزين هذه القيمة المستخرجة عن طريق تعيينها إلى متغير. بعبارة أخرى، تزيل الوظيفة `.pop()` العنصر الأخير من قائمة وتنتج ذلك العنصر.
تستخدم الوظيفة `.pop()` لإزالة (أو قفز pop) قيمة من نهاية القائمة. يمكننا تخزين هذه القيمة المستخرجة عن طريق تعيينها إلى متغير. بعبارة أخرى، تزيل الوظيفة `.pop()` العنصر الأخير من قائمة وتنتج ذلك العنصر.
أي نوع من البيانات يمكن أن تستخرج من القائمة - الأرقام، المقاطع، حتى القوائم المتداخلة.

View File

@@ -9,7 +9,7 @@ dashedName: manipulate-arrays-with-push
# --description--
طريقة سهلة لإضافة البيانات إلى نهاية القائمة هي عن طريق وظيفة `push()`.
يوجد طريقة سهلة لإضافة البيانات إلى نهاية القائمة و هي عن طريق وظيفة `push()`.
تأخذ `.push()` واحد أو أكثر من <dfn>الوسائط</dfn> و "تدفعها" إلى نهاية القائمة.
@@ -23,11 +23,11 @@ const arr2 = ["Stimpson", "J", "cat"];
arr2.push(["happy", "joy"]);
```
لدي `arr1` قيمة `[1, 2, 3, 4]` الآن ولدي `arr2` قيمة `["Stimpson", "J", "cat", ["happy", "joy"]]`.
ألأن `arr1` لديه قيمة `[1, 2, 3, 4]` ولدي `arr2` قيمة `["Stimpson", "J", "cat", ["happy", "joy"]]`.
# --instructions--
اضف `["dog", 3]` إلي نهاية المتغير `myArray`.
ضف `["dog", 3]` إلي نهاية المتغير `myArray`.
# --hints--

View File

@@ -9,9 +9,9 @@ dashedName: manipulate-arrays-with-shift
# --description--
يزيل `pop()` العنصر الأخير من القائمة دائما. ماذا لو كنت تريد إزالة الأول؟
يزيل `pop()` العنصر الأخير من القائمة دائما. ولكن ماذا لو كنت تريد إزالة الأول؟
هنا يأتي دور `.shift()`. يعمل تماما مثل `.pop()`، ولكنه يزيل العنصر الأول بدلا من العنصر الأخير.
هنا يأتي دور `.shift()`. يعمل تماما مثل `.pop()`، ولكنه يزيل (أو يزيح - shift) العنصر الأول بدلا من العنصر الأخير.
مثال:
@@ -20,11 +20,11 @@ const ourArray = ["Stimpson", "J", ["cat"]];
const removedFromOurArray = ourArray.shift();
```
سيحتوي `removedFromOurArray` قيمة المقطع `Stimpson`، وسيحتوي `ourArray` على `["J", ["cat"]]`.
ستحتوي `removedFromOurArray` قيمة المقطع `Stimpson`، وستحتوي `ourArray` على `["J", ["cat"]]`.
# --instructions--
استخدم الوظيفة `.shift()` لإزالة العنصر الأول من `myArray` وعيّن القيمة التي "تم نقلها" إلى متغير جديد `removedFromMyArray`.
استخدم الوظيفة `.shift()` لإزالة العنصر الأول من `myArray` وعيّن القيمة التي "أزيحت للخارج" إلى متغير جديد `removedFromMyArray`.
# --hints--

View File

@@ -9,7 +9,7 @@ dashedName: manipulate-arrays-with-unshift
# --description--
ليس من ممكن استخدام `shift` في عناصر من بداية القائمة فقط، ولكن يمكنك استخدام `unshift` في عناصر في بداية القائمة أيضًا، أي يمكن أن تضيف عناصر ألى بداية القائمة.
ليس فقط تسطيع أن تستخدم `shift` لتزيح العناصر من بداية قائمة إلى خارجها، ولكن أيضاً يمكنك استخدام `unshift` لتزيح عناصر إلى بداية القائمة أيضًا، أي يمكنك أن تضيف عناصر في بداية القائمة.
يعمل `.unshift()` تماما مثل `.push()`، ولكن بدلا من إضافة العنصر في نهاية القائمة، يضيف `unshift()` العنصر إلى بداية القائمة.

View File

@@ -1,6 +1,6 @@
---
id: cf1111c1c11feddfaeb8bdef
title: تعديل بيانات القوائم بالترتيب (Modify Array Data With Indexes)
title: تعديل بيانات القوائم برقم الترتيب
challengeType: 1
videoUrl: 'https://scrimba.com/c/czQM4A8'
forumTopicId: 18241
@@ -24,7 +24,7 @@ ourArray[0] = 15;
# --instructions--
عدل البيانات المخزنة في الترتيب `0` من `myArray` إلى قيمة `45`.
عدل البيانات المخزنة في موقع الترتيب رَقَم `0` من `myArray` إلى قيمة `45`.
# --hints--
@@ -47,7 +47,7 @@ assert(
);
```
يجب عليك استخدام الترتيب الصحيح لتعديل القيمة في `myArray`.
يجب عليك استخدام رقم الترتيب الصحيح لتعديل القيمة في `myArray`.
```js
assert(

View File

@@ -11,7 +11,7 @@ dashedName: multiply-two-decimals-with-javascript
في JavaScript، يمكنك أيضًا إجراء حسابات بأرقام عشرية، تماما مثل الأرقام صحيحة.
لنضرب عددين عشريين معًا لنحصل على حاصل ضربهما.
دعونا نضرب عددين عشريين معًا لنحصل على حاصل ضربهما.
# --instructions--

View File

@@ -1,6 +1,6 @@
---
id: cf1111c1c11feddfaeb7bdef
title: أدخال قائمة في قائمة اخري
title: إدخال قائمة في قائمة اخرى
challengeType: 1
videoUrl: 'https://scrimba.com/c/crZQZf8'
forumTopicId: 18247
@@ -9,7 +9,7 @@ dashedName: nest-one-array-within-another-array
# --description--
يمكنك أيضًا ادخال قوائم داخل القوائم الأخرى، مثل أدناه:
يمكنك أيضًا إدخال قوائم داخل قوائم أخرى، مثل أدناه:
```js
const teams = [["Bulls", 23], ["White Sox", 45]];
@@ -19,11 +19,11 @@ const teams = [["Bulls", 23], ["White Sox", 45]];
# --instructions--
أنشئ قوائم متداخلة تسمى `myArray`.
أنشئ قائمة متداخلة تسمى `myArray`.
# --hints--
يجب أن تحتوي `myArray` على الأقل علي قائمة واحدة متداخلة داخل قائمة أخرى.
يجب أن تحتوي `myArray` على الأقل علي قائمة واحدة متداخلة في قائمة أخرى.
```js
assert(Array.isArray(myArray) && myArray.some(Array.isArray));

View File

@@ -9,7 +9,7 @@ dashedName: passing-values-to-functions-with-arguments
# --description--
إن <dfn>الوسائط (parameters)</dfn> متغيرات تعمل كعناصر ناقلة للقيم الذي يجب أن تكون مدخلة للوظيفة (function) عند تنفيذها. عندما يتم تعريف الوظيفة، فإنها تُعرَّف عادة مع واحد أو أكثر من وسيط. القيم الفعلية التي تدخل (أو <dfn>"تمرر"</dfn>) إلى وظيفة عند استدعائها هي معروفة باسم <dfn>الحجج (arguments)</dfn>.
إن <dfn>الوسائط (parameters)</dfn> متغيرات تعمل كعناصر ناقلة للقيم الذي يجب أن تكون مدخلة للوظيفة (function) عند تفعيلها. عندما يتم تعريف الوظيفة، فإنها تُعرَّف عادة مع واحد أو أكثر من وسيط. القيم الفعلية التي تدخل (أو <dfn>"تمرر"</dfn>) إلى وظيفة عند استدعائها هي معروفة باسم <dfn>الحجج (arguments)</dfn>.
إليك وظيفة ذات وسيطين، `param1` و `param2`:

View File

@@ -1,6 +1,6 @@
---
id: 56533eb9ac21ba0edf2244b4
title: اقتباس مقاطع بعلامات اقتباس منفردة
title: اقتباس المقاطع النصية بعلامات اقتباس منفردة
challengeType: 1
videoUrl: 'https://scrimba.com/c/cbQmnhM'
forumTopicId: 18260
@@ -9,14 +9,14 @@ dashedName: quoting-strings-with-single-quotes
# --description--
قيم <dfn>مقطع</dfn> في JavaScript يمكن كتابتها بعلامات اقتباس فردية أو مزدوجة، مادام تبدأ وتنتهي بنفس النوع من العلامات. وخلافا لبعض لغات البرمجة الأخرى، يفعل الاقتباس المنفرد والاقتباس المزدوج الشيء نفسه في JavaScript.
المقاطع النصية <dfn>(string values)</dfn> في JavaScript يمكن كتابتها بعلامات اقتباس فردية أو مزدوجة، ما زالت العلمات في البَدْء نفس النوع في النهاية. وخلافا لبعض لغات البرمجة الأخرى، علمات الاقتباس المنفردة والاقتباس المزدوجة يفعلان الشيء نفسه في JavaScript.
```js
const doubleQuoteStr = "This is a string";
const singleQuoteStr = 'This is also a string';
```
السبب في رغبتك في استخدام نوع من الاقتباس فوق الآخر هو إذا كنت ترغب في استخدام كلا النوعين في المقطع. قد يحدث هذا إذا كنت ترغب في حفظ محادثة في المقطع ووضع المحادثة بين علامات الاقتباس. استخدام آخر له هو حفظ علامة `<a>` مع سمات مختلفة في علامات الاقتباس، كل ذلك ضمن مقطع.
السبب في رغبتك في استخدام نوع اقتباس فوق النوع الآخر هو إذا رغبت في استخدام كلا النوعين في المقطع. قد يحدث هذا إذا رغبت في حفظ محادثة في مقطع نصي ووضع المحادثة بين علامات الاقتباس. استخدام آخر له هو حفظ علامة `<a>` مع سمات مختلفة في علامات الاقتباس، كل ذلك ضمن مقطع نصي.
```js
const conversation = 'Finn exclaims to Jake, "Algebraic!"';
@@ -29,15 +29,15 @@ const goodStr = 'Jake asks Finn, "Hey, let\'s go on an adventure?"';
const badStr = 'Finn responds, "Let's go!"';
```
هنا `badStr` سوف تسبب بخطأ.
هنا `badStr` سوف تسبب خطأ.
في <dfn>goodStr</dfn> أعلاه، يمكنك استخدام أي من علامات الاقتباس بأمان باستخدام الخط المائل (backslash) الآتية `\` كرمز التخريج (escape character).
**ملاحظة:** يجب عدم الخلط بين الخط المائل (blackslash) الآتية `\` والخط المائل للأمام (forward slash) الآتية `/`. إنهم لا يفعلون الشيء نفسه.
**ملاحظة:** يجب عدم الخلط بين الخط المائل (blackslash) للشمال `\` والخط المائل (forward slash) لليمين `/`. إنهم لا يفعلون الشيء نفسه.
# --instructions--
غيّر المقطع المقدم إلى مقطع مع اقتباسات فردية في البداية والنهاية وبدون رموز التخريج (escape characters).
غيّر المقطع النصي المقدم إلى مقطع مع اقتباسات فردية في البداية والنهاية وبدون رموز التخريج (escape characters).
الآن، العلامة `<a>` في المقطع تستخدم اقتباسات مزدوجة في كل مكان. سوف تحتاج إلى تغيير الاقتباسات الخارجية إلى اقتباسات فردية حتى تتمكن من إزالة رموز التخريج (escape characters).

View File

@@ -1,6 +1,6 @@
---
id: 56533eb9ac21ba0edf2244bc
title: قائمة التسوق (Shopping List)
title: قائمة التسوق
challengeType: 1
videoUrl: 'https://scrimba.com/c/c9MEKHZ'
forumTopicId: 18280
@@ -9,15 +9,15 @@ dashedName: shopping-list
# --description--
قم إنشاء قائمة تسوق في المتغير `myList`. وينبغي أن تكون القائمة متعددة الأبعاد (multi-dimensional array) تحتوي على عدة قائمات فرعية (sub-arrays).
أنشئ قائمة تسوُّق في المتغير `myList`. وينبغي أن تكون القائمة متعددة الأبعاد (multi-dimensional array) تحتوي على عدة قائمات فرعية (sub-arrays).
يجب أن يحتوي العنصر الأول في كل قائمة فرعية (sub-array) على مقطع نصي (string) يحمل اسم الصنف. أما العنصر الثاني فيجب أن يكون رقماً يمثل الكمية مثل.
يجب أن يحتوي العنصر الأول في كل قائمة فرعية (sub-array) على مقطع نصي (string) يحمل اسم الصنف. أما العنصر الثاني فيجب أن يكون رقماً يمثل الكمية، مثلا
```js
["Chocolate Bar", 15]
```
وينبغي أن يكون في القائمة خمسة الفرعية (sub-arrays) على الأقل.
وينبغي أن يكون في القائمة خمسة قائمات فرعية (sub-arrays) على الأقل.
# --hints--
@@ -27,19 +27,19 @@ dashedName: shopping-list
assert(isArray);
```
يجب أن تكون العناصر الأولى في كل قوائمك فرعية (sub-arrays) مقاطع نصية (strings) كلها.
يجب أن تكون كلِّ العناصر الأولى في كل قوائمك الفرعية (sub-arrays) مقاطع نصية (strings).
```js
assert(hasString);
```
يجب أن تكون العناصر الثانية في كل قوائمك فرعية (sub-arrays) أرقام (numbers) كلها.
يجب أن تكون كل العناصر الثانية في كل قوائمك الفرعية (sub-arrays) أرقام.
```js
assert(hasNumber);
```
يجب أن يكون لديك 5 عناصر على الأقل في قائمتك.
يجب أن يكون لديك 5 أصناف على الأقل في قائمتك.
```js
assert(count > 4);

View File

@@ -1,6 +1,6 @@
---
id: bd7993c9c69feddfaeb8bdef
title: تخزين قيم متعددة في متغير واحد باستخدام مصفوفات جافا سكريبت (Store Multiple Values in one Variable using JavaScript Arrays)
title: تخزين قيم متعددة في متغير واحد باستخدام قائمات JavaScript
challengeType: 1
videoUrl: 'https://scrimba.com/c/crZQWAm'
forumTopicId: 18309
@@ -9,7 +9,7 @@ dashedName: store-multiple-values-in-one-variable-using-javascript-arrays
# --description--
مع متغير جافا سكريبت الـ `array`، يمكننا تخزين عدة قطع من البيانات في مكان واحد.
بواسطة المتغيرات من نوع `array` في JavaScript، يمكننا تخزين عدة قطع من البيانات في مكان واحد.
تبدأ إعلان القائمة (array) بأقواس مربعه (square bracke) وتنهيها بأقواس مربعه، ووضع فاصلة بين كل إدخال، مثال:
@@ -19,7 +19,7 @@ const sandwich = ["peanut butter", "jelly", "bread"];
# --instructions--
قم بتعديل الـ array الجديدة `myArray` بحيث تحتوي على string ورقم في نفس الوقت (بهذا الترتيب).
عدِّل الـقائمة الجديدة `myArray` بحيث تحتوي على string ورقم في نفس الوقت (بهذا الترتيب).
# --hints--

View File

@@ -1,6 +1,6 @@
---
id: 56533eb9ac21ba0edf2244ba
title: فهم عدم قابلية المقطع على التغيير (Understand String Immutability)
title: فهم عدم قابلية المقطع على التغيير (String Immutability)
challengeType: 1
videoUrl: 'https://scrimba.com/c/cWPVaUR'
forumTopicId: 18331
@@ -9,16 +9,16 @@ dashedName: understand-string-immutability
# --description--
في JavaScript، قيم `String` هي قيم <dfn>قابلة للتغيير</dfn>، مما يعني أنه لا يمكن تغييرها بمجرد إنشائها.
في JavaScript، قيم `String` هي قيم <dfn>غير قابلة للتغيير</dfn>، (immutable) مما يعني أنه لا يمكن تغييرها بعد إنشائها.
على سبيل المثال الكود التالي سيحدث خطأ لأن الحرف `B` في المقطع `Bob` لا يمكن تغييره إلى الحرف `J`:
على سبيل المثال الكود التالي سينتج خطأ لأن الحرف `B` في المقطع النصي `Bob` لا يمكن تغييره إلى حرف `J`:
```js
let myStr = "Bob";
myStr[0] = "J";
```
لاحظ أن هذا *لا* يعني أنه لا يمكن إعادة تعيين `myStr`. الطريقة الوحيدة لتغيير `myStr` هي تعيينه بمقطع جديدة، هكذا:
لاحظ أن هذا *لا* يعني أنه لا يمكن إعادة تعيين `myStr`. الطريقة الوحيدة لتغيير `myStr` هي تعيينه بمقطع جديد، هكذا:
```js
let myStr = "Bob";
@@ -27,7 +27,7 @@ myStr = "Job";
# --instructions--
صحّ تعيين `myStr` بحيث يحتوي على قيمة المقطع `Hello World` باستخدام النهج الموضح في المثال أعلاه.
صحّح تعيين `myStr` بحيث يحتوي على قيمة المقطع النصي `Hello World` باستخدام الطريقة الموضحة في المثال أعلاه.
# --hints--

View File

@@ -9,11 +9,11 @@ dashedName: use-bracket-notation-to-find-the-first-character-in-a-string
# --description--
<dfn>القوسان المعكوفان</dfn> هي طريقة للحصول على رمز في ترتيب معين داخل مقطع نصي.
<dfn>القوسان المربعان</dfn> هما طريقة للحصول على رمز في ترتيب (index) معين داخل مقطع نصي.
معظم لغات البرمجة الحديثة، مثل JavaScript، لا تبدأ في العد من 1 كما يفعل البشر. إنهم يبدؤون عند الصفر. يشار إلى هذا بالترتيب <dfn>مبني على الصفر</dfn>.
معظم لغات البرمجة الحديثة، مثل JavaScript، لا تبدأ في العد من 1 كما يفعل البشر. إنهم يبدؤون عند الصفر. يشار إلى هذا بالترتيب من الصفر <dfn>zero-based indexing</dfn>.
على سبيل المثال، رمز ترتيب 0 في كلمة `Charles` هو `C`. إذن إذا `const firstName = "Charles"`، يمكنك الحصول على قيمة الرمز الأول من المقطع باستخدام `firstName[0]`.
على سبيل المثال، الرمز في ترتيب 0 في كلمة `Charles` هو `C`. إذن إذا `const firstName = "Charles"`، يمكنك الحصول على قيمة الرمز الأول من المقطع باستخدام `firstName[0]`.
مثال:
@@ -26,7 +26,7 @@ const firstLetter = firstName[0];
# --instructions--
استخدم رمز الأقواس للعثور على الرمز الأول في متغير `lastName` وتعيينه إلى `firstLetterOfLastName`.
استخدم علامات الأقواس المربعة للعثور على الرمز الأول في متغير `lastName` وتعيينه إلى `firstLetterOfLastName`.
**تلميح:** حاول النظر إلى المثال أعلاه إذا كنت عالق.

View File

@@ -11,7 +11,7 @@ dashedName: use-bracket-notation-to-find-the-last-character-in-a-string
للحصول على آخر حرف من المقطع النصي (String)، يمكنك طرح واحد من طوله.
على سبيل المثال، إذا `const firstName = "Ada"`، يمكنك الحصول على قيمة الحرف الأخير من السلسلة باستخدام `firstName[firstName.length - 1]`.
على سبيل المثال، إذا `const firstName = "Ada"`، يمكنك الحصول على قيمة الحرف الأخير من المقطع باستخدام `firstName[firstName.length - 1]`.
مثال:
@@ -20,7 +20,7 @@ const firstName = "Ada";
const lastLetter = firstName[firstName.length - 1];
```
`lastLetter` سيكون لها قيمة تساوي السلسلة `a`.
سيكون قيمة `lastLetter` تساوي المقطع النصي `a`.
# --instructions--
@@ -30,7 +30,7 @@ const lastLetter = firstName[firstName.length - 1];
# --hints--
`lastLetterOfLastName` يجب أن يكون الحرف `e`.
يجب أن يكون `lastLetterOfLastName` الحرف `e`.
```js
assert(lastLetterOfLastName === 'e');

View File

@@ -9,9 +9,9 @@ dashedName: use-bracket-notation-to-find-the-nth-character-in-a-string
# --description--
يمكنك أيضًا استخدام <dfn> علامات الأقواس</dfn> للحصول على الحرف في مواقع أخرى داخل مقطع.
يمكنك أيضًا استخدام <dfn> علامات الأقواس</dfn> للحصول على حرف في مواقع أخرى داخل مقطع.
تذكر أن أجهزة الكمبيوتر تبدأ في العد في `0`، لذا فإن الحرف الأول هو في الواقع الحرف صفر.
تذكر أن أجهزة الكمبيوتر تبدأ في العد من `0`، لذا فإن الحرف الأول هو في الواقع الحرف الصفر.
مثال:

View File

@@ -1,6 +1,6 @@
---
id: bd7123c9c452eddfaeb5bdef
title: استخدم علامات الأقواس للعثور على رمز معين قبل الأخر في المقطع النصي
title: استخدم علامات الأقواس للعثور على رمز معين قبل الأخير في المقطع النصي
challengeType: 1
videoUrl: 'https://scrimba.com/c/cw4vkh9'
forumTopicId: 18344
@@ -9,7 +9,7 @@ dashedName: use-bracket-notation-to-find-the-nth-to-last-character-in-a-string
# --description--
يمكنك استخدام نفس المبدأ الذي استخدمناه للتو لاسترداد الحرف الأخير في مقطع لاسترداد الحرف ما قبل أخر حرف.
يمكنك استخدام نفس المبدأ الذي استخدمناه لاسترداد آخر حرف في مقطع نصي لتسترد أي حرف ما قبل الحرف الأخير.
على سبيل المثال يمكنك الحصول على قيمة الحرف الثالث إلى الأخير من مقطع `const firstName = "Augusta"` باستخدام `firstName[firstName.length - 3]`
@@ -20,7 +20,7 @@ const firstName = "Augusta";
const thirdToLastLetter = firstName[firstName.length - 3];
```
سيحتوي `thirdToLastLetter` قيمة من المقطع `s`.
سيحتوي `thirdToLastLetter` قيمة `s` من المقطع النصي.
# --instructions--
@@ -36,7 +36,7 @@ const thirdToLastLetter = firstName[firstName.length - 3];
assert(secondToLastLetterOfLastName === 'c');
```
يجب عليك استخدام `.length` للحصول على الحرف الثاني الأخير.
يجب عليك استخدام `.length` للحصول على الحرف الثاني إلى الأخير.
```js
assert(code.match(/\.length/g).length > 0);

View File

@@ -9,7 +9,7 @@ dashedName: word-blanks
# --description--
لقد تم تزويدك بجمل مع بعض الكلمات الناقصة، مثل الأسماء و الأفعال و النعوت و الظروف. ثم تملأ القطع المفقودة بكلمات من اختيارك بطريقة تجعل الجملة المكتملة منطقية.
تم تزويدك بجمل ناقصة بعض الكلمات، مثل الأسماء و الأفعال و النعوت و الظروف. ثم أملأ القطع المفقودة بكلمات من اختيارك بطريقة تجعل الجملة المكتملة منطقية.
فكر في هذه الجملة - كانت حقاً **\_\_\_\_\_**، ونحن **\_\_\_\_** أيضا **\_\_\_\_\_**. هذه الجملة لها ثلاث قطع مفقودة - نعمة و فعل و ظرف، ويمكنك إضافة كلمات من اختيارك لإكمالها. ويمكن بعد ذلك أن نحيل الجملة المستكملة إلى متغير (variable) على النحو التالي:
@@ -21,13 +21,13 @@ const sentence = "It was really " + "hot" + ", and we " + "laughed" + " ourselve
في هذا التحدي، نقدم لكم اسماً وفعلاً ووصفاً وظرفاً. تحتاج إلى تشكيل جملة كاملة باستخدام كلمات من اختيارك، إلى جانب الكلمات التي نقدمها.
سوف تحتاج إلى استخدام مشغل يربط المقاطع (string concatenation operator) `+` لبناء مقطع (string) جديدة، باستخدام المتغيرات المتاحة: `myNoun`، و `myAdjective`، و `myVerb`، و `myAdverb`. بعد ذلك عيين مقطع الذي تم تشكيلها إلى متغير `wordBlanks`. لا يجب عليك تغيير الكلمات المسندة إلى متغيرات.
سوف تحتاج إلى استخدام مشغل ضم المقاطع (string concatenation operator) `+` لبناء مقطع نصي جديد، باستخدام المتغيرات المتاحة: `myNoun`، و `myAdjective`، و `myVerb`، و `myAdverb`. بعد ذلك عيين المقطع النصي الذي تم تشكيله إلى متغير `wordBlanks`. لا يجب عليك تغيير الكلمات المسندة إلى متغيرات.
سوف تحتاج أيضا إلى حساب المسافات الموجودة في مقطع، بحيث تحتوي الجملة الأخيرة على مسافات بين جميع الكلمات. ينبغي أن تكون النتيجة الجملة الكاملة.
سوف تحتاج أيضا إلى حساب المسافات الموجودة في مقطعك، بحيث أن تحتوي الجملة الأخيرة على مسافات بين جميع الكلمات. ينبغي أن تكون النتيجة جملة كاملة.
# --hints--
يجب أن تكون `wordBlanks` مقطع.
يجب أن تكون `wordBlanks` مقطع نصي.
```js
assert(typeof wordBlanks === 'string');
@@ -44,7 +44,7 @@ assert(
);
```
يجب ألا تستخدم القيم `dog` أو `ran`, أو `big`, أو `quickly` لإنشاء `wordBlanks`.
يجب ألا تستخدم القيم `dog` أو `ran`, أو `big`, أو `quickly` مباشرةً لإنشاء `wordBlanks`.
```js
const newCode = removeAssignments(code);
@@ -56,7 +56,7 @@ assert(
);
```
يجب أن يحتوي `wordBlanks` على جميع الكلمات المخصصة للمتغيرات `myNoun`, و `myVerb`, و `myAdjective`, و `myAdverb` المفصولة برموز ليست بكلمات (و أي كلمات إضافية من اختيارك).
يجب أن يحتوي `wordBlanks` على جميع الكلمات المخصصة للمتغيرات `myNoun`, و `myVerb`, و `myAdjective`, و `myAdverb` المفصولة برموز ليست بكلمات (مع أي كلمات إضافية من اختيارك).
```js
assert(

View File

@@ -1,6 +1,6 @@
---
id: 56bbb991ad1ed5201cd392cf
title: كتابة JavaScript قابلة لإعادة الاستخدام مع الوظائف (Functions)
title: كتابة JavaScript قابلة لإعادة الاستخدام بواسطة الوظائف (Functions)
challengeType: 1
videoUrl: 'https://scrimba.com/c/cL6dqfy'
forumTopicId: 18378
@@ -19,16 +19,16 @@ function functionName() {
}
```
يمكنك تنفيذ أو <dfn>تفعيل</dfn> هذه الوظيفة باستخدام اسمه متبوعا بقوسين، هكذا: `functionName();` في كل مرة تنفذ الوظيفة، ستطبع الرسالة `Hello World` في وحدة التحكم (console). سيتم تنفيذ الكود بين الأقواس المتعرجة في كل مرة تنفيذ الوظيفة.
يمكنك تنفيذ أو <dfn>تفعيل</dfn> هذه الوظيفة باستخدام اسمها متبوعا بقوسين، هكذا: `functionName();`. في كل مرة تفعَّل الوظيفة، ستطبع الرسالة `Hello World` في الكونسول (console). سيتم تنفيذ الكود بين الأقواس المقرونة في كل مرة تفعَّل الوظيفة.
# --instructions--
<ol>
<li>
أنشئ وظيفة تسمى <code>reusableFunction</code> التي تطبع مقطع <code>Hi World</code> في وحدة التحكم.
أنشئ وظيفة تسمى <code>reusableFunction</code> التي تطبع مقطع <code>Hi World</code> في الكونسول.
</li>
<li>
نفذ الوظيفة.
فعِّل الوظيفة.
</li>
</ol>
@@ -40,13 +40,13 @@ function functionName() {
assert(typeof reusableFunction === 'function');
```
إذا تم استدعاء `reusableFunction`، فيجب طباعة مقطع `Hi World` في وحدة التحكم.
إذا تم تفعيل `reusableFunction`، فيجب طباعة مقطع `Hi World` في الكونسول.
```js
assert(testConsole());
```
يجب عليك استدعاء `reusableFunction` بمجرد تعريفها.
يجب عليك تفعيل `reusableFunction` بمجرد تعريفها.
```js
const functionStr = reusableFunction && __helpers.removeWhiteSpace(reusableFunction.toString());