نواصل ترجمة سلسلة من المقالات حول نظائرها في Python و JavaScript
في الإصدارات السابقة ، اعتمدنا على بنية الإصدارات الكلاسيكية من Python (2.7) و JS استنادًا إلى ECMAScript 5. هذه المرة سوف نستخدم الوظائف الجديدة التي ظهرت في Python 3.6 و JS من معيار ECMAScript 6.
ECMAScript 6 هو معيار جديد نسبيًا يدعمه معظم المتصفحات الحديثة . لاستخدام الإصدار القياسي السادس في المتصفحات القديمة ، ستحتاج إلى Babel لترجمة تصميمات JS6 الحديثة إلى الدعم عبر المتصفح.
في مقال اليوم: المتغيرات في السلاسل وقوائم التفريغ ووظائف لامدا والتكرار بدون فهارس ومولدات ومجموعات.
محتويات قضايا أخرى:
- الجزء الأول - تحويل النوع ، عامل التشغيل الثلاثي ، الوصول إلى خاصية من خلال اسم الخاصية ، القواميس ، القوائم ، السلاسل ، سلسلة متسلسلة
- الجزء الثاني هو تسلسل القواميس ، JSON ، النظامي ، الأخطاء والاستثناءات.
- هذه المقالة
- الجزء الرابع هو الحجج الوظيفية ، وخلق والعمل مع الطبقات ، والميراث ، و gitter وخصائص الطبقة.
المتغيرات في الصفوف
تستخدم الطريقة التقليدية لبناء السلاسل مع المتغيرات سلسلة من السلاسل والمتغيرات:
name = 'World' value = 'Hello, ' + name + '!\nWelcome!'
قد يبدو هذا السجل مبعثرًا وقراءة سيئة ، ويمكنك غالبًا ارتكاب أخطاء في المساحات المحيطة بالكلمات في السطور.
بدءًا من الإصدار 3.6 في Python وفي JS ECMAScrip6 ، يمكنك استخدام استيفاء السلسلة ، أو ، في شروط Python ، f-strings. هذه أنماط سلسلة يتم فيها استبدال القيم من المتغيرات.
في Python ، يتم وضع علامة f على الأسطر f قبل علامات الاقتباس:
name = 'World' value = f"""Hello, {name}! Welcome!""" price = 14.9 value = f'Price: {price:.2f} €'
في JS ، تبدأ أنماط الأوتار وتنتهي بـ backtrick `
name = 'World'; value = `Hello, ${name}! Welcome!`; price = 14.9; value = `Price ${price.toFixed(2)} €`;
لاحظ أن الأنماط يمكن أن تكون خط واحد ومتعدد الخطوط.
في Python ، يمكنك تعيين تنسيق المتغيرات.
قوائم التفريغ
في Python ، والآن في JS ، هناك فرصة مثيرة للاهتمام لتعيين عناصر التسلسل لمتغيرات مختلفة. على سبيل المثال ، يمكننا تعيين ثلاث قيم من القائمة لثلاثة متغيرات:
[a, b, c] = [1, 2, 3]
بالنسبة إلى الصفوف ، قد يتم حذف الأقواس.
المثال التالي شائع جدًا في Python كطريقة لتبادل قيم متغيرين:
a = 1 b = 2 a, b = b, a
في JS6 + ، من الممكن أيضًا:
a = 1; b = 2; [a, b] = [b, a];
في Python ، إذا كان لدينا عدد غير محدد من العناصر في قائمة أو مجموعة ، فيمكننا تعيين هذه العناصر لمجموعة من المتغيرات التي ترجع فيها القيم القليلة الأخيرة كقائمة:
first, second, *the_rest = [1, 2, 3, 4]
يمكن فعل الشيء نفسه في JS (ECMAScrip6):
[first, second, ...the_rest] = [1, 2, 3, 4];
وظائف لامدا
يحتوي كل من Python و JS على وظائف واضحة جدًا لإنشاء وظائف سطر واحد. تسمى هذه الوظائف دالات لامدا. Lambdas هي دالات تأخذ وسيطة أو أكثر وتعرض قيمة محسوبة. عادة ، يتم استخدام وظائف لامدا عندما تحتاج إلى نقل وظيفة إلى وظيفة أخرى كرد اتصال ، أو عندما يكون من الضروري معالجة كل عنصر من عناصر التسلسل.
في Python ، يمكنك تحديد وظيفة لامدا باستخدام الكلمة الرئيسية lambda
:
sum = lambda x, y: x + y square = lambda x: x ** 2
يستخدم شبيبة =>
تدوين. إذا كان هناك أكثر من وسيطة ، يتم وضعها بين قوسين:
sum = (x, y) => x + y; square = x => Math.pow(x, 2);
تكرار بدون فهارس
تسمح لك العديد من PLs بتجاوز المصفوفات فقط باستخدام الوصول إلى عنصر معين عن طريق رقم الفهرس والدورة مع زيادة هذا الفهرس.
for (i=0; i<items.length; i++) { console.log(items[i]); }
هذا ليس سجلاً جميلًا ، ومعقدًا قليلاً للمبتدئين - مثل هذا السجل لا يبدو طبيعيًا. تمتلك Python طريقة جميلة وموجزة للتجول في القائمة:
for item in ['A', 'B', 'C']: print(item)
في JS الحديثة ، يتم تنفيذ ذلك باستخدام عامل التشغيل for..of
:
for (let item of ['A', 'B', 'C']) { console.log(item); }
يمكنك أيضًا تجاوز حرف الخط حرفًا في Python:
for character in 'ABC': print(character)
وجافا سكريبت الحديثة:
for (let character of 'ABC') { console.log(character); }
مولدات
يسمح لك كل من Python و JS الحديث بتحديد الوظائف الخاصة التي ستبدو مثل التكرارات. مع كل استدعاء (تكرار) ، سيُرجعون القيمة التالية التي تم إنشاؤها من التسلسل. تسمى هذه الوظائف المولدات.
تُستخدم المولدات عادةً للحصول على: أرقام من نطاق ، وخطوط من ملف ، وصفحة بيانات بصفحة من واجهة برمجة تطبيقات خارجية ، وأرقام فيبوناتشي وغيرها من التسلسلات التي يتم إنشاؤها ديناميكيًا.
من الناحية الفنية ، تبدو المولدات مثل الوظائف العادية ، ولكن بدلاً من إرجاع قيمة واحدة (وإيقاف العمل) ، فإنها ترجع قيمة واحدة وتوقف العملية مؤقتًا حتى المكالمة التالية. سيقومون بإنشاء القيم التالية من القائمة مع كل مكالمة حتى يتم الوصول إلى نهاية القائمة.
ضع في اعتبارك مثالاً في Python يتم فيه إنشاء مولد العد التنازلي () ، والذي يُرجع الأرقام من رقم معين إلى 1 بالترتيب العكسي (10،9،8، ...، 1):
def countdown(counter): while counter > 0: yield counter counter -= 1 for counter in countdown(10): print(counter)
يمكن الحصول على نفس الشيء في JS الحديثة ، ولكن انتبه إلى * في وصف الوظيفة. هذا يعرّفها كمولد:
function* countdown(counter) { while (counter > 0) { yield counter; counter--; } } for (let counter of countdown(10)) { console.log(counter); }
مجموعات
لقد تعرفنا بالفعل على القوائم (القوائم) ، الصفوف (الصفوف) ، الصفائف (الصفائف). ولكن هناك نوع آخر من مجموعات البيانات. المجموعات هي صفائف البيانات التي لا يتواجد فيها كل عنصر فريد إلا في نسخة واحدة. تحدد نظرية المجموعات العمليات مع المجموعات على أنها اتحاد وتقاطع وفرق ، لكننا لن نعتبرها الآن.
ننشئ مجموعة ، نضيف عنصرًا إليها ، نتحقق من وجود العنصر ، نحصل على العدد الإجمالي للعناصر ، نتجول في المجموعة حسب العناصر ونحذف عنصر واحد باستخدام Python:
s = set(['A']) s.add('B'); s.add('C') 'A' in s len(s) == 3 for elem in s: print(elem) s.remove('C')
نفس الشيء على شبيبة:
s = new Set(['A']); s.add('B').add('C'); s.has('A') === true; s.size === 3; for (let elem of s.values()) { console.log(elem); } s.delete('C')
لتلخيص
- يمكن أن تحسن أنماط السلاسل (خطوط f) من سهولة القراءة وتبسيط التعليمات البرمجية ، حتى في حالة الكائنات متعددة الأسطر.
- يمكنك تجاوز المصفوفات أو المجموعات أو السلاسل بدون استخدام الفهارس.
- باستخدام المولدات ، يمكنك الحصول على تسلسلات مع عدد غير محدود من العناصر.
- يسهّل استخدام المجموعات التحقق من تفرد عنصر في مصفوفة.
- استخدم لامداس عندما تحتاج إلى وظائف صغيرة ذات سطر واحد.
في الجزء التالي ، سنتحدث عن الحجج الوظيفية والفئات والميراث والخصائص.