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

let و apply دالتان مفيدتان جدًا في Kotlin، وقد تغيّران طريقة كتابتكم للكود مقارنة بما اعتدتم عليه في Java. أود في هذا المقال أن أشارككم كيف تجعلون كودكم أبسط باستخدام let و apply. وأفترض أن لديكم معرفة أساسية بلغة Kotlin.
ماذا تستطيع let أن تفعل؟
أود أن أسلط الضوء على استخدامين رئيسيين للدالة let
- تحديد النطاق (Scoping Function): يمكن استخدام let لجعل الكود مستقلًا داخل كتلة let وإبقاء المنطق منفصلًا. ويمكن الإشارة إلى المتغير الذي يسبق let باسم it. انظروا إلى الكود التالي كمثال.
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.
if(user != null) {
Info info = user.getInfo();
if (info != null) {
String email = info.getEmail();
if(email != null) {
sendEmailToUser(email)
}
}
}
وفي Kotlin :)
user?.info?.email?.let? {
sendEmailToUser(it)
}
كما ترون، الكود في Kotlin أقصر وأنظف بكثير.
كيف نستخدم apply؟
قد تساعدكم apply على كتابة الكود بأسلوب مختلف قليلًا
يمكن استخدام apply كدالة امتداد (extension) لجميع أنواع المتغيرات. وهي تُرجع الكائن نفسه بعد تطبيق ما بداخل كتلة apply عليه (فهي تعمل كما يوحي اسمها). لنرَ ذلك عمليًا لتتضح الصورة.
إليكم بعض الأمثلة:
- في Java، عندما نهيّئ RecyclerView قد نكتب شيئًا كهذا.
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new YourRecyclerViewAdapter(this));
recyclerView.setHasFixedSize(true)
أما مع apply في Kotlin فيمكننا كتابته بهذه الطريقة.
recyclerView.apply {
layoutManager = LinearLayoutManager(this@YourActivity)
setHasFixedSize(true)
adapter = YourRecyclerViewAdapter(this@YourActivity)
}
- إنشاء كائن عبر دوال setter في Java قد يتطلب شيئًا مثل
User user = new User();
user.setFirstName = "John";
user.setLastName = "Doe";
user.setGender = "Male";
user.setProfileUrl = "...";
user.setPhoneNumber = "...";
ومع apply يمكننا تحسين الأمر قليلًا
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/


