diff --git a/README.ar-SY.md b/README.ar-SY.md new file mode 100644 index 0000000..d14134c --- /dev/null +++ b/README.ar-SY.md @@ -0,0 +1,411 @@ +# State-of-the-Art Shitcode Principles + +[![State-of-the-art Shitcode](https://img.shields.io/static/v1?label=State-of-the-art&message=Shitcode&color=7B5804)](https://github.com/trekhleb/state-of-the-art-shitcode) + +هذه قائمة بأحدث مبادئ كود shitcode التي يجب أن يتبعها مشروعك ليطلق عليه كود shitcode المناسب. + +_اقرأ هذا في لغات أخرى:_ +[_English_](README.md), +[_简体中文_](README.zh-CN.md), +[_한국어_](README.ko-KR.md) + +## احصل على شارتك + +إذا كان repository الخاص بك يتبع أحدث مبادئ كود shitcode, فيمكنك استخدام شارة 'state-of-the-art shitcode' التالي: + +[![State-of-the-art Shitcode](https://img.shields.io/static/v1?label=State-of-the-art&message=Shitcode&color=7B5804)](https://github.com/trekhleb/state-of-the-art-shitcode) + +مصدر-الكود للشارة: + +``` +[![State-of-the-art Shitcode](https://img.shields.io/static/v1?label=State-of-the-art&message=Shitcode&color=7B5804)](https://github.com/trekhleb/state-of-the-art-shitcode) +``` + +## المبادئ + +### 💩 تسمية المتغيرات بطريقة كما لو كانت شفرتك غامضة بالفعل + +ضغطات أقل على المفاتيح, ووقت أكثر لك. + +_جيد 👍🏻_ + +```javascript +let a = 42; +``` + +_سيئ 👎🏻_ + +```javascript +let age = 42; +``` + +### 💩 امزج أسلوب تسمية المتغير / الوظائف + +احتفل بالفرق. + +_جيد 👍🏻_ + +```javascript +let wWidth = 640; +let w_height = 480; +``` + +_سيئ 👎🏻_ + +```javascript +let windowWidth = 640; +let windowHeight = 480; +``` + +### 💩 أبدًا لا تكتب تعليقات + +لن يقرأ أحد الكود الخاص بك على أي حال. + +_جيد 👍🏻_ + +```javascript +const cdr = 700; +``` + +_سيئ 👎🏻_ + +في كثير من الأحيان يجب أن تحتوي التعليقات على بعض 'لماذا' وليس 'ماذا'. إذا لم يكن 'ماذا' واضحًا في الكود, فمن المحتمل أن يكون الكود فوضويًا للغاية. + +```javascript +// The number of 700ms has been calculated empirically based on UX A/B test results. +// @see: +const callbackDebounceRate = 700; +``` + +### 💩 اكتب دائمًا التعليقات بلغتك الأم + +إذا انتهكت مبدأ 'لا تعليقات', فحاول على الأقل كتابة تعليقات بلغة مختلفة عن اللغة التي تستخدمها لكتابة الشفرة. إذا كانت لغتك الأم هي الإنجليزية, فقد تنتهك هذا المبدأ. + +_جيد 👍🏻_ + +```javascript +// Закриваємо модальне віконечко при виникненні помилки. +toggleModal(false); +``` + +_سيئ 👎🏻_ + +```javascript +// Hide modal window on error. +toggleModal(false); +``` + +### 💩 حاول مزج نمط التنسيق قدر الإمكان + +احتفل بالفرق. + +_جيد 👍🏻_ + +```javascript +let i = ["tomato", "onion", "mushrooms"]; +let d = ["ketchup", "mayonnaise"]; +``` + +_سيئ 👎🏻_ + +```javascript +let ingredients = ["tomato", "onion", "mushrooms"]; +let dressings = ["ketchup", "mayonnaise"]; +``` + +### 💩 ضع أكبر قدر ممكن من الكود في سطر واحد + +_جيد 👍🏻_ + +```javascript +document.location.search + .replace(/(^\?)/, "") + .split("&") + .reduce(function (o, n) { + n = n.split("="); + o[n[0]] = n[1]; + return o; + }, {}); +``` + +_سيئ 👎🏻_ + +```javascript +document.location.search + .replace(/(^\?)/, "") + .split("&") + .reduce((searchParams, keyValuePair) => { + keyValuePair = keyValuePair.split("="); + searchParams[keyValuePair[0]] = keyValuePair[1]; + return searchParams; + }, {}); +``` + +### 💩 افشل بصمت + +عند اكتشاف خطأ ما, ليس من الضروري أن يعرفه أحد. لا سجلات, لا أنماط الخطأ, استرخي. + +_جيد 👍🏻_ + +```javascript +try { + // Something unpredictable. +} catch (error) { + // tss... 🤫 +} +``` + +_سيئ 👎🏻_ + +```javascript +try { + // Something unpredictable. +} catch (error) { + setErrorMessage(error.message); + // and/or + logError(error); +} +``` + +### 💩 استخدام متغيرات global على نطاق واسع + +مبدأ العولمة. + +_جيد 👍🏻_ + +```javascript +let x = 5; + +function square() { + x = x ** 2; +} + +square(); // Now x is 25. +``` + +_سيئ 👎🏻_ + +```javascript +let x = 5; + +function square(num) { + return num ** 2; +} + +x = square(x); // Now x is 25. +``` + +### 💩 قم بإنشاء متغيرات لن تستخدمها. + +تحسبُاً. + +_جيد 👍🏻_ + +```javascript +function sum(a, b, c) { + const timeout = 1300; + const result = a + b; + return a + b; +} +``` + +_سيئ 👎🏻_ + +```javascript +function sum(a, b) { + return a + b; +} +``` + +### 💩 لا تحدد الأنواع و/أو لا تفعل عمليات التحقق من الكتابة إذا كانت اللغة تسمح لك بذلك. + +_جيد 👍🏻_ + +```javascript +function sum(a, b) { + return a + b; +} + +// Having untyped fun here. +const guessWhat = sum([], {}); // -> "[object Object]" +const guessWhatAgain = sum({}, []); // -> 0 +``` + +_سيئ 👎🏻_ + +```javascript +function sum(a: number, b: number): ?number { + // Covering the case when we don't do transpilation and/or Flow type checks in JS. + if (typeof a !== "number" && typeof b !== "number") { + return undefined; + } + return a + b; +} + +// This one should fail during the transpilation/compilation. +const guessWhat = sum([], {}); // -> undefined +``` + +### 💩 يجب أن يكون لديك جزء من الكود لا يمكن الوصول إليه + +هذه هي "خطتك ب". + +_جيد 👍🏻_ + +```javascript +function square(num) { + if (typeof num === "undefined") { + return undefined; + } else { + return num ** 2; + } + return null; // This is my "Plan B". +} +``` + +_سيئ 👎🏻_ + +```javascript +function square(num) { + if (typeof num === "undefined") { + return undefined; + } + return num ** 2; +} +``` + +### 💩 مبدأ المثلث + +كن مثل الطائر - nest, nest, nest. + +_جيد 👍🏻_ + +```javascript +function someFunction() { + if (condition1) { + if (condition2) { + asyncFunction(params, (result) => { + if (result) { + for (;;) { + if (condition3) { + } + } + } + }); + } + } +} +``` + +_سيئ 👎🏻_ + +```javascript +async function someFunction() { + if (!condition1 || !condition2) { + return; + } + + const result = await asyncFunction(params); + if (!result) { + return; + } + + for (;;) { + if (condition3) { + } + } +} +``` + +### 💩 العبث مع المسافات البادئة + +تجنب المسافات البادئة لأنها تجعل الكود معقد, يشغل مساحة أكبر في المحرر. إذا كنت لا ترغب في تجنبهم, فما عليك سوى العبث معهم. + +_جيد 👍🏻_ + +```javascript +const fruits = ["apple", "orange", "grape", "pineapple"]; +const toppings = ["syrup", "cream", "jam", "chocolate"]; +const desserts = []; +fruits.forEach((fruit) => { + toppings.forEach((topping) => { + desserts.push([fruit, topping]); + }); +}); +``` + +_سيئ 👎🏻_ + +```javascript +const fruits = ["apple", "orange", "grape", "pineapple"]; +const toppings = ["syrup", "cream", "jam", "chocolate"]; +const desserts = []; + +fruits.forEach((fruit) => { + toppings.forEach((topping) => { + desserts.push([fruit, topping]); + }); +}); +``` + +### 💩 لا تقفل dependencies الخاصة بك + +قم بتحديث تبعياتك على كل تثبيت جديد بطريقة غير خاضعة للرقابة. لماذا نتمسك بالماضي, دعنا نستخدم أحدث إصدارات المكتبات. + +_جيد 👍🏻_ + +``` +$ ls -la + +package.json +``` + +_سيئ 👎🏻_ + +``` +$ ls -la + +package.json +package-lock.json +``` + +### 💩 قم دائمًا بتسمية القيمة المنطقية بـ `flag` + +اترك مساحة لزملائك للتفكير في معنى القيمة المنطقية. + +_جيد 👍🏻_ + +```javascript +let flag = true; +``` + +_سيئ 👎🏻_ + +```javascript +let isDone = false; +let isEmpty = false; +``` + +### 💩 قرائة الوظائف الطويلة افضل من القصيرة + +لا تقسم منطق البرنامج إلى أجزاء يمكن قراءتها. ماذا لو تعطل بحث IDE الخاص بك ولم تتمكن من العثور على الملف أو الوظيفة اللازمة؟ + +- 10000 سطر من الكود في ملف واحد جيد. +- 1000 سطر من الكود في ملف واحد جيد. +- التعامل مع العديد من الخدمات (طرف ثالث وداخلي, أيضا, هناك بعض المساعدين, database hand-written ORM jQuery slider) في `service.js` واحد؟ جيد. + +### 💩 تجنب تغطية الكود الخاص بك بالاختبارات + +هذا هو كمية مكررة وغير ضرورية من العمل. + +### 💩 بأقصى ما يمكنك تجنب code linters + +اكتب الكود كما تريد, خاصة إذا كان هناك أكثر من مطور واحد في الفريق. هذا هو مبدأ "الحرية". + +### 💩 ابدأ مشروعك بدون ملف README. + +واحتفظ بها بهذه الطريقة في الوقت الحالي. + +### 💩 يجب أن يكون لديك كود غير ضروري + +لا تحذف الكود الذي لا يستخدمه تطبيقك. على الأكثر, قم بالتعليق عليه.