Ultimate magazine theme for WordPress.

ما فائدة لغات البرمجة المطبوعة؟ – CloudSavvy IT

6

ads

الكتابة الثابتة

الكتابة الثابتة هي إحدى ميزات لغة البرمجة التي تتطلب منك تحديد بنية وأنواع بيانات الكود الذي تكتبه بدقة. في حين أنه غالبًا ما يتطلب الأمر مزيدًا من العمل للمطور ، إلا أنه يؤدي إلى الكثير من قواعد التعليمات البرمجية الأنظف والمفهومة على المدى الطويل.

ما هي الكتابة الثابتة؟

في اللغة المكتوبة ديناميكيًا ، يمكنك تحديد كل شيء باستخدام var. لا توجد أنواع محددة مسبقًا مثل string أو int؛ يحتوي المتغير ببساطة على قيمة:

var num = 5;
var str = "hello";

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

إذا حاولت تمرير وسيطات الوظائف غير المرغوب فيها ، فسوف تقبلها ؛  إذا كان كود الوظيفة يتوقع سلسلة بدلا من رقم ، فإنه يمكن أن يعطي خطأ.

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

إذا حاولت تمرير C # شيئًا لم يطلبه ، فسيرمي المترجم خطأ.

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

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

لماذا تعتبر الكتابة الثابتة مفيدة؟

إذا كان هذا يبدو وكأنه عمل إضافي ، فهو بالتأكيد كذلك. لكن لها بعض الفوائد العظيمة على المدى الطويل.

أهم ميزة للمطورين هي فحص أخطاء وقت الترجمة. إذا أخطأت في البرمجة ، وحاولت استخدام نوع مختلف عن المقصود ، أو حاولت استدعاء طريقة غير موجودة ، فسيصرخ المترجم عليك. في لغة مكتوبة ديناميكيًا مثل JavaScript ، سيؤدي ذلك ببساطة إلى حدوث خطأ في وقت التشغيل – ليس جيدًا. في C # ، ستتلقى تحذيرات إذا حاولت القيام بشيء لا يجب عليك فعله ، مثل استدعاء طريقة غير موجودة.

التحقق من أخطاء وقت الترجمة قيد التنفيذ

يساعد هذا في اكتشاف الأخطاء مبكرًا ، ويقلل من عدد التزامات عربات التي تجرها الدواب التي سيقوم مطوروك بتنفيذها.

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

تتيح لك الكتابة الثابتة البرمجة بشكل أكثر كفاءة.

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

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

هل هناك أي سبب لتفضيل الكتابة الديناميكية؟

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

بالنسبة للجزء الأكبر ، تفوق الفوائد العديدة للكتابة الثابتة الجوانب السلبية القليلة ، لذلك إذا كان لديك الخيار (كما في حالة TypeScript مقابل JavaScript) ، فإن معظم المشاريع الكبيرة ستختار الكتابة الثابتة. ومع ذلك ، هناك عوائد متناقصة بمجرد أن تبدأ في التقييد.

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

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

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

“مكتوب بقوة في مقابل الكتابة الضعيفة”

على الرغم من التشابه الشديد بينهما ، إلا أن “المصنف بشدة مقابل الكتابة الضعيفة” و “المصنف بشكل ثابت مقابل النوع الديناميكي” هما مفهومان مختلفان.

تعني “مكتوبة بشدة” أن اللغة لا تقوم بالعديد من تحويلات الكتابة الضمنية أو كتابة الإكراه. على سبيل المثال ، C # لغة مكتوبة بقوة. إذا كنت ترغب في تمرير int إلى وظيفة تتوقع أ float، سوف تحصل على خطأ.

في C # ، إذا كنت تريد تمرير int إلى دالة تتوقع عددًا عشريًا ، فستتلقى خطأ.

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

بشكل عام ، تؤدي الكتابة القوية إلى ارتباك أقل بشكل عام ، ولكن التحويلات الضمنية حيثما تكون مفيدة. على سبيل المثال ، التحويل int إلى float عادةً ما يكون الأمر جيدًا ، حيث لا يتم تغيير أي بيانات بعد التبديل إلى نوع مختلف. تحويل ملف float إلى int سيحتاج إلى شكل من أشكال التقريب للتخلص من المنازل العشرية.

يمكن أن تؤدي الكتابة الضعيفة إلى الارتباك في بعض الحالات القصوى. على سبيل المثال ، تشتهر JS بتحويلاتها الضمنية السخية: يمكنك إضافة رقم إلى سلسلة ، والحصول على سلسلة نتيجة لذلك. ولكن إذا قمت بضرب رقم وسلسلة ، فإنه يوزع السلسلة إلى رقم ويعيدها NaN إذا كان لا يمكن تحليلها.

يمكنك إضافة رقم إلى سلسلة ، والحصول على سلسلة نتيجة لذلك.

ads

اترك رد

لن يتم نشر عنوان بريدك الإلكتروني.