مبادئ التعليمات البرمجية النظيفة تحول برمجتك

كيف تعمل مبادئ التعليمات البرمجية النظيفة على تحويل تجربة البرمجة الخاصة بك

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

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

جدول المحتويات

مبادئ الكود النظيف

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

1. سهولة القراءة

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

2. بساطة

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

3. بساطتها

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

4. الاستمرارية

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

5. فصل الاهتمامات

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

6. تجنب الازدواجية

يعد DRY (لا تكرر نفسك) مبدأ أساسيًا في التعليمات البرمجية النظيفة. يؤدي التكرار إلى عدم الاتساق، وزيادة جهد الصيانة، وزيادة احتمال حدوث الأخطاء. يضمن الكود النظيف كتابة المنطق مرة واحدة وإعادة استخدامه عند الضرورة.

7. التغليف

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

كيفية كتابة التعليمات البرمجية النظيفة

تتطلب كتابة التعليمات البرمجية النظيفة الانضباط واتباع نهج مدروس في البرمجة. فيما يلي بعض الخطوات العملية لتحقيق كود أنظف.

1. استخدم أسماء ذات معنى

تعد التسمية أحد أهم جوانب التعليمات البرمجية النظيفة. يجب أن يكون للمتغيرات والوظائف والفئات والمعرفات الأخرى أسماء ذات معنى تنقل الغرض منها بوضوح. تجنب استخدام الأسماء العامة مثل temp أو data أو obj. بدلاً من ذلك، استخدم الأسماء التي تصف الدور أو الهدف، مثل userList، أو countTotal، أو isLoggedIn.

2. اكتب وظائف صغيرة

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

3. الحد من استخدام المتغيرات العالمية

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

4. كتابة الاختبارات

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

5. إعادة البناء بانتظام

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

ممارسات البرمجة الجيدة

يتم دعم التعليمات البرمجية النظيفة من خلال مجموعة من ممارسات البرمجة الجيدة التي تضمن بقاء التعليمات البرمجية قابلة للصيانة وقابلة للتطوير.

1. اعتماد معايير ترميز متسقة

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

2. استخدم التحكم في الإصدار

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

3. أتمتة المهام المتكررة

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

4. قم بمراجعة الكود بانتظام

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

تعليقات البرمجة

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

1. اكتب التعليقات باعتدال

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

2. حافظ على التعليقات محدثة

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

3. تجنب التعليقات الزائدة عن الحاجة

تجنب التعليقات التي تعيد صياغة ما تفعله التعليمات البرمجية ببساطة. على سبيل المثال، تعليق مثل // أضف 1 إلى i قبل السطر i += 1; زائدة عن الحاجة وغير ضرورية. يجب أن تضيف التعليقات قيمة من خلال شرح لماذا بدلا من ماذا.

كود نظيف في C#

C# هي لغة حديثة موجهة للكائنات تشجع ممارسات البرمجة النظيفة. تتضمن كتابة تعليمات برمجية نظيفة في C# الاستفادة من ميزات اللغة والالتزام بأفضل الممارسات.

1. استخدم الخصائص بدلاً من الحقول العامة

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

2. الاستفادة من LINQ للحصول على كود التنظيف

يعد الاستعلام اللغوي المتكامل (LINQ) ميزة قوية في لغة C# والتي تتيح تعليمات برمجية موجزة وقابلة للقراءة عند العمل مع المجموعات. بدلاً من كتابة حلقات مطولة، يمكّنك LINQ من التعبير عن الاستعلامات بطريقة أكثر تعريفية، مما يؤدي إلى تحسين إمكانية القراءة وتقليل احتمالية حدوث أخطاء.

3. تجنب الأرقام السحرية

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

كود نظيف في جافا سكريبت

JavaScript هي لغة مرنة قد يكون من الصعب إدارتها في المشاريع الكبيرة. تعد ممارسات الترميز النظيفة في JavaScript ضرورية للحفاظ على التعليمات البرمجية القابلة للقراءة والصيانة.

1. استعمال اسمحوا و CONST بدلا من فار

يوفر إدخال Let وconst في ECMAScript 6 (ES6) تحكمًا أفضل في النطاق المتغير. على عكس var، الذي هو ذو نطاق وظيفي، فإن Let و const هما ذوا نطاق كتلة، مما يقلل من احتمالية تعارضات المتغيرات والسلوك غير المقصود.

2. اكتب وظائف نقية

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

3. قم بتعديل التعليمات البرمجية الخاصة بك

يسمح لك نظام وحدات JavaScript، الذي تم تقديمه في ES6، بتقسيم التعليمات البرمجية الخاصة بك إلى مكونات أصغر قابلة لإعادة الاستخدام. يعزز هذا النهج المعياري فصل الاهتمامات ويجعل إدارة قاعدة التعليمات البرمجية واختبارها أسهل.

كود نظيف في بايثون

تؤكد فلسفة تصميم بايثون على سهولة القراءة والبساطة، مما يجعلها مناسبة بشكل طبيعي لممارسات التعليمات البرمجية النظيفة.

1. اتبع إرشادات PEP 8

PEP 8 هو دليل الأسلوب الرسمي لكود Python. ويقدم توصيات بشأن اصطلاحات التسمية والمسافات البادئة وجوانب التنسيق الأخرى. يضمن الالتزام بـ PEP 8 الاتساق عبر قاعدة التعليمات البرمجية ويجعل الوصول إلى التعليمات البرمجية أكثر سهولة للمطورين الآخرين.

2. استخدم قائمة الفهم

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

3. تعامل مع الاستثناءات بلطف

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

رمز نظيف في جافا

تستفيد Java، باعتبارها لغة مكتوبة بشكل ثابت وموجهة للكائنات، بشكل كبير من مبادئ التعليمات البرمجية النظيفة.

1. تفضيل التكوين على الميراث

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

2. استخدم التدفقات لمعالجة البيانات بشكل أنظف

قدمت Java 8 واجهة برمجة التطبيقات Stream API، والتي تسمح بمعالجة بيانات أكثر تعريفية. تمكنك التدفقات من تنفيذ عمليات مثل التصفية، ورسم الخرائط، والتقليل بطريقة موجزة وسهلة القراءة، مما يجعل التعليمات البرمجية أكثر تعبيرًا وأقل عرضة للخطأ.

3. الاستفادة من التعليقات التوضيحية لجافا

يمكن استخدام تعليقات Java التوضيحية لتقليل التعليمات البرمجية المعيارية وتحسين إمكانية القراءة. على سبيل المثال، تساعد التعليقات التوضيحية مثل @Override في توصيل النية، بينما يمكن استخدام التعليقات التوضيحية المخصصة لتغليف الأنماط المتكررة.

الكود النظيف والأداء

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

1. تجنب التحسين المبكر

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

2. تحقيق التوازن بين سهولة القراءة والكفاءة

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

3. استخدم هياكل البيانات المناسبة

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

اقتباسات التعليمات البرمجية النظيفة من الخبراء أو الكتب

في الختام، إليك بعض الاقتباسات الثاقبة من الخبراء والكتب المؤثرة حول أهمية الكود النظيف:

  • "يبدو الكود النظيف دائمًا وكأنه مكتوب بواسطة شخص يهتم." — روبرت سي مارتن، كود النظيفة: دليل من براعة البرمجيات الرشيقة
  • "يمكن لأي أحمق أن يكتب تعليمات برمجية يمكن للكمبيوتر أن يفهمها. المبرمجون الجيدون يكتبون تعليمات برمجية يمكن للبشر فهمها." — مارتن فاولر، إعادة الهيكلة: تحسين تصميم الكود الحالي
  • "يجب أن تُكتب البرامج ليقرأها الناس، وبالصدفة فقط لكي تنفذها الآلات." — هارولد أبيلسون وجيرالد جاي سوسمان، هيكل وتفسير برامج الكمبيوتر
  • "البرمجة النظيفة ليست مجموعة من القواعد، بل هي نظام للتفكير والاستدلال والتنفيذ." — ستيف فريمان ونات برايس، تزايد البرامج الموجهة للكائنات، مسترشدة بالاختبارات
  • "البساطة هي روح الكفاءة." - أوستن فريمان

قم برفع معايير الترميز الخاصة بك باستخدام Smart TS XL

يشتمل Smart TS XL على العديد من الميزات التي تجعله أداة أساسية للمطورين الملتزمين بالترميز النظيف. إليك كيف يساعدك في تحقيق ترميز أكثر نظافة وقابلية للصيانة:

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

لا يضمن Smart TS XL أن الكود الخاص بك نظيف فحسب، بل إنه يعزز أيضًا سير عمل التطوير، مما يسهل الحفاظ على معايير عالية عبر قاعدة التعليمات البرمجية بأكملها.

خاتمة

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

توفر كل من لغات البرمجة مثل C# وJavaScript وPython وJava ميزات فريدة تؤدي، عند دمجها مع ممارسات البرمجة النظيفة، إلى برامج قوية وقابلة للتطوير. لا يمكن المبالغة في أهمية ممارسات البرمجة الجيدة، مثل معايير الترميز المتسقة، والتحكم في الإصدار، ومراجعة التعليمات البرمجية، لأنها تضمن بقاء التعليمات البرمجية مفهومة وفعالة طوال دورة حياتها.

تعمل أدوات مثل Smart TS XL على رفع معايير برمجة الكود النظيف من خلال توفير التحليل في الوقت الفعلي، وتطبيق معايير الترميز، وتقديم اقتراحات إعادة الهيكلة. تعد هذه الأدوات ضرورية للحفاظ على قاعدة كود نظيفة، مما يتيح للمطورين كتابة كود ليس وظيفيًا فحسب، بل أنيقًا وقابلًا للصيانة أيضًا.

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

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