آیا باید به سراغ کاتلین برویم؟

این روزها در دنیای اندروید، کاتلین (Kotlin) همه جا به چشم می‌خورد. به ندرت پیش می‌آید که در کنفرانسی شرکت کنید یا وبلاگی را بخوانید و در آن از کاتلین سخنی گفته نشود. کنفرانس سال گذشته Droidcon برلین را به خاطر دارم. بیشتر افرادی که در آنجا با آن‌ها صحبت کردم الان از کاتلین در محصولات خود استفاده می‌کنند (خود من اولین بروزرسانی برنامه که در آن از کاتلین استفاده کرده بودم را دو ماه بعد منتشر کردم). در اصل تأثیر کاتلین بر جامعه توسعه‌دهندگان اندروید بیشتر از جامعه جاوا بوده است. من مطمئنم که خود شرکت JetBrains هم از این موضوع شگفت زده شده است.

از آغاز اندروید ما برنامه‌نویسان اندروید مجبور به استفاده از یک نسخه قدیمی شده یک زبان قدیمی بودیم در حالی که بقیه محیط‌ها و زبان‌ها رشد می‌کردند. کاتلین دوباره ما را به صحنه رقابت آورد!

علامت ایست

اما بعضی وقت‌ها ذی‌نفعان اشتیاق توسعه‌دهندگان را مهار می‌کنند. با وجود همه مزایای بزرگ کاتلین برای کدهای برنامه و شتاب روزافزون آن، احتمال دارد که برای استفاده از کاتلین جواب «نه» بشنوید. بسیاری از دلایل آن‌ها را به سادگی می‌توان رد کرد، اما بعضی از آن‌ها رنگی از واقعیت دارند.

بیایید به بعضی از آن‌ها نگاهی بیاندازیم:

همه آدم‌های تیم باید یک زبان جدید یاد بگیرند

این انتقاد وارد است. اما خبر خوب این که یادگیری کاتلین بسیار ساده است. برای مثال یادگیری RxJava بسیار سخت‌تر از یادگیری کاتلین است.

در آغاز کار با کاتلین به سبک برنامه‌های جاوا برنامه می‌نویسید که به خوبی کار می‌کند و مشکلی ندارد و اگر هنوز هم شک دارید، می‌توانید کد را کپی کرده و به کمک مبدل IDE آن را تبدیل کنید.

البته باید راهی پیدا کنید تا دیگران را با خود هم عقیده کنید و این یعنی زمان و زمان یعنی هزینه برای ذی‌نفعان.

راهی عالی برای شروع کار بدون هیچ ریسکی، تست‌های برنامه است. تست محیط امنی برای تست کردن ابزارهای جدید است. برای شروع تست‌ها را به کاتلین تبدیل کنید یا حتا فقط تست‌های جدید را با کاتلین بنویسید. در حقیقت کاتلین ویژگی‌های عالی‌ای دارد که حتا تست‌ها را هم ارتقا می‌دهد. بعد از مدتی همه چگونگی کار کاتلین را یاد می‌گیرند و می‌توانند قدم‌های بعدی را بردارند.

از همه این‌ها که بگذریم، یاد گرفتن یک زبان جدید برای تیم چیز خوبی است.

پیدا کردن توسعه‌دهندگانی که تجربه کاتلین داشته باشند سخت است

در حقیقت بیشتر توسعه‌دهندگان حریص چیزهای جدید هستند و آن‌هایی که چنین اشتیاقی ندارند، آن‌هایی هستند که نباید استخدام کنید. بنابراین اگر به کاندیداهای استخدام این فرصت را بدهید که از کاتلین استفاده کنند، احتمال این که بتوانید برنامه‌نویسان خوب را استخدام کنید بیشتر می‌شود. ما این مسأله را در زبان سوئیفت (Swift) دیدیم؛ امروزه پیدا کردن کسی که از کار کردن با Objective-C لذت می‌برد بسیار سخت شده است و جالب اینجا است که سوئیفت فقط سه سال است که عرضه شده است. این یک مشکل واقعی است. دنیایی که در آن زندگی می‌کنیم را ببینید: در این دنیا ما به استخدام کننده‌ها نیاز داریم تا بهترین افراد را برای ما پیدا کنند. موقعیت‌های استخدامی از تعداد افرادی که کاندیدا می‌شوند بیشتر است. ایجاد چالش با فناوری‌های نو برای کاندیداها، راه مناسبی است تا آن‌هایی که به این موضوعات اهمیت می‌دهند را پیدا کنیم و این راهی است که محصول را به پیش می‌راند.

گوگل از کاتلین پشتیبانی نمی‌کند

درست است ولی اندروید متکی به بایت‌کد جاوا است. بایت‌کدهای تولیدی کاتلین و جاوا در انتها یکی هستند. موضوع ما فقط زبانی است که با آن کد می‌نویسیم. گوگل به تازگی زنجیره ابزار Jack را کنار گذاشته و اعلام کرده است که از کامپایلر جاوا (Javac) استفاده خواهد کرد تا بتوان از ویژگی‌های جاوای ۸ در برنامه‌ها استفاده کرد. بنابراین الان بهترین زمان برای استفاده از کاتلین است.

سوالی که اینجا باید بپرسید این است که آیا JetBrain از کاتلین برای اندروید پشتیبانی می‌کند؟ خوشبختانه آن‌ها کاملاً متعهد به این مسأله هستند. کاتلین یک موفقیت بزرگ است و تلاش‌های بسیار زیادی مصروف آن می‌شود. آخرین باری که یک بیلد کاناری اندروید استودیو باعث اختلال در عملکرد کاتلین شد، روز بعد راه‌حل آن در پلاگین کاتلین ارائه شد.

ویرایش: در حقیقت خود گوگل در حال حاضر از کاتلین استفاده می‌کند. نگاهی به databinding compiler برای اندروید بیاندازید. از Ľuboš Mudrák برای اشاره به این موضوع تشکر می‌کنم.

بسیار خطرناک است که در برنامه عرضه شده از کاتلین استفاده کنیم

هیچ خطری از جانب کاتلین نسخه اجرایی برنامه را تهدید نمی‌کند. همانطور که پیش از این گفتم برنامه نوشته شده با این زبان در انتها به بایت‌کد جاوا تبدیل می‌شود. احتمالاً هر بار که کتابخانه‌های خود را بروزرسانی می‌کنید، خطر بیشتری از کاتلین متوجه برنامه شما می‌شود. بعضی از ویژگی‌های کاتلین مثل امنیت در برابر Null یا Null Safety حتا کد را امن‌تر هم می‌کنند.

البته این را هم در نظر داشته باشید که کاتلین دیگر یک زبان جدید محسوب نمی‌شود. مدت‌ها از عرضه آن گذشته و پایدار شده است. فقط یک بروزرسانی ویژگی‌ها (Feature Release) داشته است.

شرکت‌هایی با تعداد بسیار زیاد کاربر به طور کامل یا جزئی به کاتلین روی آورده‌اند. اگر آن‌ها این «ریسک» را پذیرفته‌اند، احتمالاً شما هم می‌توانید.

کاتلین هم یک زبان مبتنی بر JVM مثل بقیه است

پیش از این هم می‌شد برنامه‌های اندروید را با هر زبان دیگری که روی JVM اجرا می‌شود نوشت اما هیچ کس این کار را نکرده است. چرا حالا باید این کار کرد؟ به خاطر می‌آورم که برخی تلاش می‌کردند با اسکالا (Scala) برای اندروید برنامه بنویسند، اما واقعاً کاری زجرآور بود چون باید کتابخانه‌های زمان اجرا را هم با برنامه عرضه می‌کردید.

کاتلین با نگاه به اندروید ساخته شده است و اجراکننده (runtime) آن بسیار کوچک است. بسیاری از کتابخانه‌هایی که در برنامه استفاده می‌کنید بزرگ‌تر از آن هستند. تفاوت اینجا است!

ما زمان برای بازنویسی اپ نداریم

البته به این کار نیاز نیست! کاتلین و جاوا بسیار عالی با هم کار می‌کنند. می‌توانید به صورت کاملاً طبیعی جاوا را از کاتلین صدا بزنید و برعکس. برخلاف Objective-C و سوئیفت به هیچ واسطه‌ای نیاز نیست. پس می‌توانید تصمیم بگیرید که برای یک کلاس خاص کدام زبان بهتر است و با هر کدام که خواستید کلاس را بنویسید.

یک زبان جدید سرعت ما را کند می‌کند

آنکل باب خیلی وقت پیش در این باره نوشت: هر زبان جدید ما را به گذشته‌ای پرتاب می‌کند که باید کل زنجیره ابزار را از ابتدا می‌نوشتیم. سوئیفت را ببینید، حتا امروزه هم پشتیبانی از آن در XCode به خوبی Objective-C نیست. یک مزیت عالی کاتلین این است که محل تولد آن یک شرکت تولید کننده ابزارهای برنامه‌نویسی است (JetBrains)، همان شرکتی که IntelliJ، پایه اندروید استودیو را ساخته است. پشتیبانی ابزار از کاتلین به خوبی جاوا است. در اصل این پشتیبانی به قدری خوب است که Gradleware پشتیبانی از نوشتن اسکریپت‌های گریدل با کاتلین را آغاز کرده است. دلیلش هم این پشتیبانی خوب ابزار است. Groovy زبان فعلی‌ای که برای این کار استفاده می‌شود، با این که سال‌ها است وجود دارد هیچگاه به اندازه الان کاتلین پشتیبانی ابزار را نداشته است.

تمام ابزارهای چک کردن کد که با بایت‌کد کار می‌کنند، به خوبی به کارشان ادامه خواهند داد. تنها چیزی که می‌ماند چک‌های ایستایی است که مستقیماً خود کد را بررسی می‌کنند (مانند Lint). این مسأله هم به زودی با کمک اجتماع برنامه‌نویسان حل خواهد شد. علی‌الحساب تا آن زمان ما برای اطمینان از کیفیت کد و به عنوان یک جایگزین، Klint را داریم.

پس چرا ذی‌نفعان هنوز مرددند؟

موبایل هسته اصلی کسب و کار بیشتر شرکت‌ها شده است. در هر زمینه‌ای که کار می‌کنید، احتمال این که بیشتر مشتری‌ها شما را از طریق اپ پیدا کنند بسیار زیاد است. اما در زمینه هسته اصلی کسب و کار باید محتاط باشید و این کاملاً درست است.

تغییر ذات بنیادین موبایل است

این را هم به خاطر داشته باشید: توسعه موبایل با تغییر تعریف شده است. برخلاف دنیای سمت سرور، اینجا همه چیز با سرعت در حال تغییر است.

در این چند سالی که اندروید به وجود آمده است، حداقل سه تغییر عمده در طراحی رابط کاربری را دیده‌ایم: قبل از Holo، خود Holo و طراحی متریال. برای ارسال پوش نوتیفیکیشن سه API مختلف داشته‌ایم: C2DM و GCM و فایربیس. چند سال پیش معماری اپی که رواج داشت «عرضه کننده محتوا» یا Content Provider بود که درخواست‌های HTTP را پنهان می‌کرد. حالا همه از REST استفاده می‌کنیم و نتایج را مستقیماً در اسکیولایت ذخیره می‌کنیم. چند سال قبل «تزریق وابستگی» به دلیل مسائل مرتبط با کارایی، یک ضدالگو بود؛ هنوز ReactiveX وجود نداشت و برنامه‌نویسی کارکردی فقط در سمت سرور بود یا احتمالاً دانشگاه‌ها.

اگر ما توسعه‌دهندگان موبایل فقط یک چیز یاد گرفته باشیم این است که تغییر تنها چیز ثابت است. قطعات پیش‌ساخته دیگر به کار نمی‌آیند. اگر اپی سه سال دست نخورده باقی مانده باشد، باید آن را دور انداخت. همه این‌ها درباره اندروید هم صادق است. سعی کنید برنامه‌نویسی را استخدام کنید تا بر روی اپی کار کند که هنوز از اندروید ۲ یا از «عرضه‌کنندگان محتوا» استفاده می‌کند، موفق باشید!

عقب نمانید

کاتلین هم یکی از آن تغییرات است. فرصت تغییر را از دست ندهید. چه کسی می‌داند، شاید کدی که امروز از آن محافظت می‌کنید، روزی به عنوان «سیستم قدیمی» از آن یاد شود.

منبع: Hacker Noon

در اسمارت‌لب بخش جدیدی باز کرده‌ام برای آموزش کاتلین و مطالب آموزشی کاتلین را در آنجا دسته‌بندی می‌کنم. از منوی سایت گزینه آموزش‌های کاتلین را انتخاب کنید و به روز باشید!

مطالبی که تاکنون در این بخش آمده:

  1. آیا باید به سراغ کاتلین برویم؟ (همین مطلب)

  2. برنامه‌نویسی اندروید با کاتلین

  3. معرفی زبان برنامه‌نویسی کاتلین در Google IO 2017

  4. شروع برنامه‌نویسی کاتلین با IntelliJIDEA

  5. آموزش زبان کاتلین: دستور زبان کاتلین

  6. آموزش برنامه‌نویسی کاتلین: مثال‌هایی از شیوه برنامه‌نویسی کاتلین

7 فکر می‌کنند “آیا باید به سراغ کاتلین برویم؟

  1. abbasalim

    سلام مقالتون عالی بود ولی این رو باید خط بزنید:
    گوگل از کاتلین پشتیبانی نمی‌کند
    چون تو اندروید استودیو ۳ کاتلین اضافه شده

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      آخرین نسخه اندروید استودیو الان ۲/۳ است. منظورتون همین نسخه است؟ در این نسخه هنوز به طور رسمی از کاتلین پشتیبانی نمی‌شه.

      پاسخ
      1. Farzad

        اندروید استودیو ۳ نسخه Canary 4 منتشر شده است و بزودی نسخه نهایی Android Studio 3.0 منتشر خواهد شد که زبان کاتلین را بصورت پیش فرض پشتیبانی می کند.

        پاسخ
  2. احسان

    سلام
    من هم نظر دوست بالاییمون رو دارم و ویرایش مقاله
    چون کاتلین جدیدا به طور رسمی زبان رسمی اندروید اعلام شد

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      کاتلین زبان رسمی نیست بلکه در کنار جاوا از کاتلین هم پشتیبانی خواهد شد. خبری که چند روز پیش خواندم اینه که گوگل و جت برینز مشترکا بر روی اندروید استودیو دارن کار می‌کنن تا پشتیبانی از کاتلین تجربه خوشایندی برای برنامه نویسان اندروید باشه.

      پاسخ
  3. سورن

    درود بر شما جناب بهزادیان عزیز
    سوالی که دارم اینه که برای فردی که تا به حال کدنویسی نداشته یادگیری زبان کاتلین چگونه است؟
    آیا برای فراگیری این زبان پیش نیازی وجود داره؟ و یا اینکه لازمه قبل از این زبان جاوا رو یاد گرفت؟
    با تشکر

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      جاوا پیش نیاز کاتلین نیست و می‌تونید از ابتدا با کاتلین شروع کنید. اما چون تقریبا همه کتابخونه‌هایی که ازشون برای برنامه‌نویسی اندروید استفاده می‌کنید با جاوا هستن و مستندات و آموزش‌های اونها هم اغلب فقط با جاوا نوشته شدن بهتره که با جاوا هم آشنا باشید.

      پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *