---
title: "قوة الفصل والترتيب"
description: "معايير شخصية جدًا نابعة من أسلوب عمل مطوّر JavaScript ودود. أمور بسيطة نغفل عنها كثيرًا، لكنها تجعل عملنا اليومي في التطوير أسهل وأكثر كفاءة."
canonical: https://oozou.com/ar/blog/the-power-of-separation-and-sorting-212
locale: ar
date: 2022-11-08
author: "OOZOU Team"
---

# قوة الفصل والترتيب

> معايير شخصية جدًا نابعة من أسلوب عمل مطوّر JavaScript ودود. أمور بسيطة نغفل عنها كثيرًا، لكنها تجعل عملنا اليومي في التطوير أسهل وأكثر كفاءة.

Published: 2022-11-08 · Author: OOZOU Team (Engineering) · 5 min read

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

# فصل الـ imports وترتيبها

أحب أن أرتّب الـ imports وأفصل بينها بأسطر فارغة لأميّز نوع كل import. وهذا مفيد جدًا حين تريدون معرفة الملفات التي تنتمي إلى الـ module الحالي وتلك المأخوذة من أماكن أخرى.
كما أن ترتيب الـ imports يساعد على التنقل بينها بسرعة ومعرفة المكان الذي جاء منه كل import.
بالنسبة إلى الـ imports القادمة من **node_modules**، يمكننا ترتيبها كلها باستثناء import الخاص بـ react. لكن بما أننا نادرًا ما نحتاج إلى تتبّع الـ imports القادمة من **node_modules**، فلا تحظى بالأولوية نفسها في الترتيب مثل غيرها.
مثال:

```javascript
import React from "react";
import moment from "moment";

// Absolute imports after the imports from node_modules
import Button from "src/views/atoms/buttons";
import Label from "src/views/atoms/label";
import Placeholder from "src/views/atoms/placeholder";
import TextInput from "src/views/atoms/text-input";

// Relative imports after the absolute imports
import Button from "../atoms/buttons";
import TextInput from "../atoms/text-input";
```

# ترتيب الـ props

هذا الجزء سيكون مزعجًا بعض الشيء. فاكتساب هذه العادة يستغرق وقتًا طويلًا، لكن صدّقوني، حين ترون component يحمل عددًا لا يُحصى من الـ props وكلها مرتّبة، ستشعرون كأنكم تبرمجون في الجنة. فتتبّع الـ props أسهل وأسرع بكثير حين تكون مرتّبة. والدماغ بارع جدًا في إيجاد العناصر المرتّبة، وحين تكون الـ props مرتّبة لا يستغرق العثور على الـ prop الذي تبحثون عنه عند استخدام Component سوى ثوانٍ معدودة.
على سبيل المثال:
هذا component بـ props غير مرتّبة:
حاولوا إيجاد الـ prop المسمّى **deadpool**

```javascript
import React from "react";

export const ComponentWithoutSortedProps = () => {
  // I have unsorted props
  return <DummyComponent
      ironMan={ironMan}
      thor={thor}
      blackPanther={blackPanther}
      wasp={wasp}
      antMan={antMan}
      hulk={hulk}
      hawkEye={hawkEye}
      quickSilver={quickSilver}
      scarletWitch={scarletWitch}
      blackWidow={blackWidow}
      warMachine={warMachine}
      moonKnight={moonKnight}
      spiderMan={spiderMan}
      doctorStrange={doctorStrange}
      deadpool={deadpool}
      yondu={yondu}
      loki={loki}
      captainAmerica={captainAmerica}
      winterSoldier={winterSoldier}
   />;
}
```

والآن إليكم component بـ props مرتّبة. حاولوا إيجاد **deadpool** مرة أخرى:

```javascript
import React from "react";

export const ComponentWithSortedProps = () => {
  // I have sorted props
  return <DummyComponent
      antMan={antMan}
      blackPanther={blackPanther}
      blackWidow={blackWidow}
      captainAmerica={captainAmerica}
      deadpool={deadpool}
      doctorStrange={doctorStrange}
      hawkEye={hawkEye}
      hulk={hulk}
      ironMan={ironMan}
      loki={loki}
      moonKnight={moonKnight}
      quickSilver={quickSilver}
      scarletWitch={scarletWitch}
      spiderMan={spiderMan}
      thor={thor}
      warMachine={warMachine}
      wasp={wasp}
      winterSoldier={winterSoldier}
      yondu={yondu}
   />;
}
```

أتمنى أنكم لاحظتم كم كان تتبّعه سهلًا. والآن تخيّلوا أنكم تقرؤون كودًا فيه مئات الـ components كل يوم، وكم من الوقت تقضون في البحث عن prop واحد. قد يستغرق هذا الأسلوب وقتًا في البداية، لكنه يؤتي ثمارًا كبيرة لاحقًا حين تكبر قاعدة الكود.
_ملاحظة: إذا وجدتم الترتيب مهمة صعبة جدًا، فهناك دائمًا extensions جاهزة لتقوم بذلك عنكم. شخصيًا أستخدم أمر sort lines المدمج في vscode لترتيبها تصاعديًا. حدّدوا الأسطر، ثم اضغطوا_ **_ctrl+shift+p_** _واكتبوا_ **_sort lines_** _لاستخدامه._

# فصل جمل return

القاعدة واضحة من العنوان نفسه. حاولوا فصل **جملة return** عن بقية جمل الكود. والسبب أن ذلك يسهّل كثيرًا معرفة مواضع جمل return في أي دالة داخل الملف، فيساعدنا على تتبّع كل القيم المتوقع أن تعيدها الدالة بشكل مميّز عن بقية الكود.
هذا مثال على كود لم تُفصَل فيه جمل return:

```javascript
export const doVeryLongTaskWithMultipleReturns = (v1, v2) => {
  const x = 'something great';
  const y = 'another thing that is great';

  if(x === v1) {
    return x;
  }
  if (y === v2) {
    const thing1 = 'hello world';
    const thing2 = 'world hello';
    const joinedThing = thing1 + thing2;
    return joinedThing;
  } else {
    if (v1 === v2) {
      const gettingOverIt = 'impossible';
      const gettingBelowIt = 'impossible';
      const joined = gettingOverIt + gettingBelowIt;
      return joined;
    }
  }
  return y;
};
```

وهذا مثال فُصلت فيه جمل return بسطر فارغ:

```javascript
export const doVeryLongTaskWithMultipleReturns = (v1, v2) => {
  const x = 'something great';
  const y = 'another thing that is great';

  if(x === v1) {
    return x;
  }

  if (y === v2) {
    const thing1 = 'hello world';
    const thing2 = 'world hello';
    const joinedThing = thing1 + thing2;

    return joinedThing;
  } else {
    if (v1 === v2) {
      const gettingOverIt = 'impossible';
      const gettingBelowIt = 'impossible';
      const joined = gettingOverIt + gettingBelowIt;

      return joined;
    }
  }

  return y;
};
```

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

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/ar/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
