غالبًا ما يجد مطورو JavaScript وTypeScript أنفسهم يكتبون نفس الشروط بشكل متكرر. إذا كنت مطور ويب، فمن المحتمل أنك واجهت رمزًا مثل هذا:
const handleSaveTextKeydown = (event: KeyboardEvent) => { if (event.key === 'Enter') { //... save text } }
في هذه الحالة، يكون events.key من النوع سلسلة، ومن السهل إدخال أخطاء عن طريق تضمين مسافة في "Enter" عن طريق الخطأ، على سبيل المثال.
لماذا لا يتم تغليف هذا الشرط في دالة؟
const handleSaveTextKeydown = (event: KeyboardEvent) => { if (checkIsEnterKey(event.key)) { //... save text } }
يضمن هذا أن تكون جميع عمليات التحقق من مفتاح Enter متسقة وموثوقة.
الآن، ضع في اعتبارك هذا التحقق:
type Value = null | object; const value = {} as Value; if (typeof value === 'object') { value; // value type is null | object }
على الرغم من أن TypeScript ذكي، إلا أن القيمة داخل الشرط تظل من النوع Value. وذلك لأن typeof null يُرجع "كائن".
لذلك، عليك أن تكتب:
if (value !== null && typeof value === 'object') { value; // value type is object }
قد لا يقوم العديد من المطورين بتغليف هذا في وظيفة وبدلاً من ذلك يكتبونه بشكل متكرر كلما واجهوا هذا الموقف.
كم مرة كتبت نفس الحالة في حياتك؟
كم مرة ارتكبت نفس الخطأ؟
كم مرة ستكتب نفس الشرط في المستقبل؟
لو كنت مكاني لفعلت هذا:
if (checkIsObject(value)) { value; // value type is object }
هناك العديد من الفوائد لتغليف الشروط العامة في الوظائف.
خذ بعين الاعتبار المثال التالي:
const array = [0, 1, 2, 3, 4, 5, null, undefined];
لنقم بإنشاء مصفوفة تستبعد القيم الخالية فقط.
يمكنك إعطاء الأولوية للإيجاز وكتابته على النحو التالي:
const numbers = array.filter(Boolean);
لسوء الحظ، هذا ليس مثاليا. يتم تقييم 0 أيضًا على أنه خطأ ويتم استبعاده. لذلك عليك أن تكتب:
const numbers = array.filter(item => item !== null && item !== undefined);
ألا يبدو هذا وكأنه رمز قبيح وغير قابل لإعادة الاستخدام؟
يمكنني كتابة كود أكثر أناقة:
const numbers = array.filter(checkIsNullish);
التوقف عن كتابة الشروط العامة بشكل متكرر. إنه يؤدي فقط إلى الأخطاء، ويصبح الكود أقل قابلية للقراءة.
اسمح لي بتقديم مكتبة قمت بإنشائها تسمى المدقق.
تمثل مكتبة الوظائف المساعدة هذه الشروط شائعة الاستخدام في تطوير الويب العام والتطوير منخفض المستوى كوظائف. جميع الوظائف تأخذ مدخلات وترجع قيمة منطقية.
في وقت كتابة هذه المقالة، كان يوفر مجموعة كبيرة من الوظائف للتعامل مع أنواع البيانات مثل السلاسل والأرقام والقيم المنطقية والقيم الخالية. تم اختبار جميع الوظائف وتوثيقها وسهولة البدء في استخدامها.
دعونا نلقي نظرة على بعض الأمثلة الواقعية.
تم نشر جميع الحزم التي توفرها هذه المكتبة على JSR. يمكن تركيبها بسهولة في مشاريع NPM وPNPM وYarn وBun وDeno.
هنا، سنأخذ حزمة @checker/string كمثال مع NPM.
قم بتشغيل الأمر التالي في دليل المشروع الخاص بك:
npx jsr add @checker/string
import { checkIsNotEmptyString, checkIsIndexFound } from "@checker/string"; const value = "Hello"; const formatted = value.trim(); if (checkIsNotEmptyString(formatted)) { // formatted !== '' // When formatted is not an empty string } const index = value.indexOf("el"); if (checkIsIndexFound(index)) { // index !== -1 // When "el" is found in value }
أنا لست مغرمًا باستخدام عوامل النفي المنطقية مثل !SOME_CONDITION لعكس قيمة منطقية. وذلك لأنها ضمنية، وببساطة عكس القيمة المنطقية عن طريق إضافتها أو حذفها يمكن أن يؤدي إلى العديد من المواقف الخطيرة.
لذلك، جميع الوظائف لها وظائف checkIsNot~ المقابلة المحددة.
تغليف الشروط العامة في الوظائف. بهذه الطريقة، يصبح الكود أكثر قابلية للقراءة، ويصبح اكتشاف الأخطاء أسهل.
شكرا على القراءة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3