بعد أن عثرت على المادة وفقًا لمبادئ الشفرة النظيفة لبرنامج TypeScript وقراءتها ، قررت أن أتناول ترجمتها. أريد هنا أن أشاطركم بعض المقتطفات من هذه الترجمة ، نظرًا لأن بعض نقاط شفرة TypeScript الخالصة تكرر نفس المبادئ لجافا سكريبت ، ولن أصفها هنا ، إذا كان ذلك سيكون ممتعًا ، فقد تم نشر ترجمة JS بالفعل على المحور (@ BoryaMogila ) أو يمكنك التعرف على نفسك في المصدر الأصلي .

للبدء ، دعونا نتعرف على ماهية مبادئ الشفرة النظيفة هذه. لكن لسوء الحظ ، من غير المرجح أن تقدم تعريفًا واضحًا للرمز النظيف. جزئيًا ، كل هذا يتوقف على الأشخاص ، على سبيل المثال ، عندما تأتي إلى المتحف ، تنظر إلى الصورة وتفكر في مدى قبحها ، ولكن بعد ذلك يأتي شخص آخر ويقول ما روعة. نعم ، لدينا بعض الميزات العامة والمحددة للعالم حيث يمكننا القول أن واحدة أو أخرى جميلة ، لكن بالتأكيد لا يمكننا إعطاء تعريف لكل هذا. لذلك هنا فقط بعض المعايير الصغيرة لهذا الجمال ، منذ ذلك الحين يختار نفسه. هذه ليست القواعد التي يتم نحتها في الجرانيت. هذه مجرد توصيات.
المتغيرات
استخدام التعداد لتوثيق
يمكن أنام تساعد في توثيق التعليمات البرمجية الخاصة بك. على سبيل المثال ، عندما نشعر بالقلق من أن المتغيرات لدينا تختلف عن القيم.
الفقراء:
const GENRE = { ROMANTIC: 'romantic', DRAMA: 'drama', COMEDY: 'comedy', DOCUMENTARY: 'documentary', } projector.configureFilm(GENRE.COMEDY); class Projector {
حسن:
enum GENRE { ROMANTIC, DRAMA, COMEDY, DOCUMENTARY, } projector.configureFilm(GENRE.COMEDY); class Projector {
وظائف
تجنب التحقق من النوع
TypeScript عبارة عن مجموعة فرعية من بناء جملة JavaScript وتضيف اختبارات نوع ثابتة إضافية للغة. تفضل دائمًا تحديد أنواع المتغيرات والمعلمات وقيم الإرجاع للاستفادة الكاملة من TypeScript. وهذا يجعل إعادة بناء المستقبل أسهل.
الفقراء:
function travelToTexas(vehicle: Bicycle | Car) { if (vehicle instanceof Bicycle) { vehicle.pedal(currentLocation, new Location('texas')); } else if (vehicle instanceof Car) { vehicle.drive(currentLocation, new Location('texas')); } }
حسن:
type Vehicle = Bicycle | Car; function travelToTexas(vehicle: Vehicle) { vehicle.move(currentLocation, new Location('texas')); }
استخدام التكرارات والمولدات
استخدم المولدات والتكرارات عند العمل مع مجموعات البيانات المستخدمة كدفق.
هناك عدة أسباب لهذا:
- يفصل الكائن المدعو عن تطبيق المولد بمعنى أن الكائن المدعو يقرر عدد العناصر
يكون للوصول - تنفيذ كسول ، يتم تمرير العناصر على الطلب
- دعم مدمج لعناصر التكرار باستخدام بناء الجملة
- تتيح لك التكرارات تنفيذ أنماط التكرار المحسنة
الفقراء:
function fibonacci(n: number): number[] { if (n === 1) return [0]; if (n === 2) return [0, 1]; const items: number[] = [0, 1]; while (items.length < n) { items.push(items[items.length - 2] + items[items.length - 1]); } return items; } function print(n: number) { fibonacci(n).forEach(fib => console.log(fib)); }
حسن:
توجد المكتبات التي تسمح لك بالعمل مع التكرارات بنفس الطريقة مثل المصفوفات الخاصة بك ، من خلال forEach
الطرق مثل map
، slice
، forEach
، وما إلى ذلك. راجع مثال itiriri لمعالجة متقدمة من التكرارات (أو المتزامن itiriri لمعالجة التكرارات غير المتزامنة).
import itiriri from 'itiriri'; function* fibonacci(): IterableIterator<number> { let [a, b] = [0, 1]; while (true) { yield a; [a, b] = [b, a + b]; } } itiriri(fibonacci()) .take(10) .forEach(fib => console.log(fib));
الكائنات وهياكل البيانات
استخدام getters و setters
يدعم TypeScript بناء الجملة من getters و setters. يعد استخدام getters و setters للوصول إلى بيانات الكائن أفضل بكثير من الوصول مباشرة إلى خصائصه. "لماذا؟" أنت تسأل. فيما يلي قائمة بالأسباب:
- إذا كنت تريد تنفيذ أكثر من مجرد الوصول إلى خاصية ، فأنت بحاجة إلى تغيير التطبيق في مكان واحد ، وليس في جميع أنحاء الرمز
- التحقق من الصحة سهل التنفيذ على مستوى التنفيذ
set
- تغليف الحالة الداخلية
- من السهل إضافة تسجيل ومعالجة الأخطاء في مستوى getter و setter
- يمكنك تحميل خصائص الكائن الخاص بك ، على سبيل المثال ، من الخادم
الفقراء:
type BankAccount = { balance: number;
حسن:
class BankAccount { private accountBalance: number = 0; get balance(): number { return this.accountBalance; } set balance(value: number) { if (value < 0) { throw new Error('Cannot set negative balance.'); } this.accountBalance = value; }
إنشاء كائنات مع الحقول الخاصة / آمنة
يدعم TypeScript الوسائل public
(الافتراضية) protected
private
للوصول إلى خصائص الفصل.
الفقراء:
class Circle { radius: number; constructor(radius: number) { this.radius = radius; } perimeter() { return 2 * Math.PI * this.radius; } surface() { return Math.PI * this.radius * this.radius; } }
حسن:
class Circle { constructor(private readonly radius: number) { } perimeter() { return 2 * Math.PI * this.radius; } surface() { return Math.PI * this.radius * this.radius; } }
أعزائي القراء ، ما هي المبادئ التي تستخدمها عند استخدام برنامج TypeScript؟
أن تستمر ...