---
title: "تبسيط الكود على Android باستخدام let وapply"
description: "let وapply دالتان مفيدتان جدًا في Kotlin، وقد تغيّران طريقة كتابتكم للكود مقارنة بما اعتدتم عليه في Java"
canonical: https://oozou.com/ar/blog/make-things-easier-on-android-with-let-and-apply-12
locale: ar
date: 2017-07-21
author: "OOZOU Team"
---

# تبسيط الكود على Android باستخدام let وapply

> let وapply دالتان مفيدتان جدًا في Kotlin، وقد تغيّران طريقة كتابتكم للكود مقارنة بما اعتدتم عليه في Java

Published: 2017-07-21 · Author: OOZOU Team (Engineering) · 3 min read

**let** و **apply** دالتان مفيدتان جدًا في Kotlin، وقد تغيّران طريقة كتابتكم للكود مقارنة بما اعتدتم عليه في Java. أود في هذا المقال أن أشارككم كيف تجعلون كودكم أبسط باستخدام **let** و **apply.** وأفترض أن لديكم معرفة أساسية بلغة Kotlin.

# ماذا تستطيع **let** أن تفعل؟

أود أن أسلط الضوء على استخدامين رئيسيين للدالة **let**

1. **تحديد النطاق (Scoping Function):** يمكن استخدام **let** لجعل الكود مستقلًا داخل كتلة **let** وإبقاء المنطق منفصلًا. ويمكن الإشارة إلى المتغير الذي يسبق **let** باسم **it.** انظروا إلى الكود التالي كمثال.

```kotlin
File("dummy.txt").let {
  print(it.toString())
}
//File "dummy.txt" is not visible here
```

كما ترون، الكائن **File("dummy.txt")** مرئي داخل كتلة **let** فقط.
2. **التحقق من القيم الفارغة (null):** في Java، ولكي نتجنب صديقنا العزيز **NullPointerException**، علينا أن نتحقق من **null** مرارًا وتكرارًا في الكود. لحسن الحظ يمكننا تبسيط ذلك باستخدام **let.** إذ يمكننا جعل كتلة **let** تُنفَّذ فقط عندما لا يكون المتغير **null**. لنرَ مثالًا.

لنفترض أن لدينا كائنًا بهذا الشكل
**user** \-(hold)-> **info** \-(hold)-> **email** وقد يكون كل من **user** و **info** بقيمة **null.** هكذا سنكتب الكود في Java.

```kotlin
if(user != null) {
  Info info = user.getInfo();
  if (info != null) {
    String email = info.getEmail();
    if(email != null) {
        sendEmailToUser(email)
    }
  }
}
```

وفي Kotlin :)

```kotlin
user?.info?.email?.let? {
    sendEmailToUser(it)
}
```

كما ترون، الكود في Kotlin أقصر وأنظف بكثير.

# كيف نستخدم apply؟

قد تساعدكم **apply** على كتابة الكود بأسلوب مختلف قليلًا

يمكن استخدام **apply** كدالة امتداد (extension) لجميع أنواع المتغيرات. وهي **تُرجع** الكائن نفسه بعد تطبيق ما بداخل كتلة **apply** عليه (فهي تعمل كما يوحي اسمها). لنرَ ذلك عمليًا لتتضح الصورة.

إليكم بعض الأمثلة:

1. في Java، عندما نهيّئ **RecyclerView** قد نكتب شيئًا كهذا.

```kotlin
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new YourRecyclerViewAdapter(this));
recyclerView.setHasFixedSize(true)
```

أما مع **apply** في Kotlin فيمكننا كتابته بهذه الطريقة.

```kotlin
recyclerView.apply {
  layoutManager = LinearLayoutManager(this@YourActivity)
  setHasFixedSize(true)
  adapter = YourRecyclerViewAdapter(this@YourActivity)
}
```

2. إنشاء كائن عبر دوال setter في Java قد يتطلب شيئًا مثل

```kotlin
User user = new User();
user.setFirstName = "John";
user.setLastName = "Doe";
user.setGender = "Male";
user.setProfileUrl = "...";
user.setPhoneNumber = "...";
```

ومع **apply** يمكننا تحسين الأمر قليلًا

```kotlin
User user = User().apply {
  firstName = "John"
  lastName = "Doe"
  gender = "male"
  profileUrl = "..."
  phoneNumber = "..."
}
```

داخل كتلة **apply** يمكننا الوصول إلى خصائص (properties) المتغير الذي استدعى **apply** أو دواله (methods) مباشرة، دون الحاجة إلى ذكر اسم المتغير مرة أخرى.

# الخلاصة
في رأيي، تجعل **let** الكود أقصر وأنظف، خصوصًا بفضل قدرتها على **التحقق من null.** فنحن مطوّرو Android اضطررنا جميعًا إلى كتابة أسطر كثيرة في Java للتحقق من قيم **null** وتجنب **NullPointerException**، و **let** تريحنا من هذا العناء. أما **apply** فأرى أنها تجنّبنا تكرار ذكر المتغير نفسه، وتجعل الكود أسهل قراءة بعض الشيء.

# المرجع

[http://beust.com/weblog/2015/10/30/exploring-the-kotlin-standard-library/](http://beust.com/weblog/2015/10/30/exploring-the-kotlin-standard-library/)

---

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"
