Dart 2: نسخهٔ دوم زبان برنامه‌نویسی دارت بهینه برای کلاینت‌ساید

Dart 2: نسخهٔ دوم زبان برنامه‌نویسی دارت بهینه برای کلاینت‌ساید

نسخهٔ دوم زبان برنامه‌نویسی Dart با تغییرات و ویژگی‌های جدیدی ‌همراه است و با توجه به این تغییرات، می‌توانیم این زبان را منحصراً از دیدِ کلاینت‌ساید (بخشی از برنامه که مستقیماً به تعامل با کاربر می‌پردازد) بررسی کنیم که باعث توسعهٔ بهتر اپلیکیشن‌ برای وب و موبایل شده است.

Dart در دومین نسخه‌اش به‌ طور چشمگیری به تقویت و ساده شدن تایپ سیستم و سینتکس این زبان پرداخته است. بازطراحی ابزار‌های توسعه هم باعث آسان‌تر و جذاب‌تر شدن پروسهٔ کدنویسی برای موبایل و وب شده‌اند. همچنین نسخهٔ دوم زبان برنامه‌نویسی دارت شامل قابلیت‌هایی است که تماماً بر پایهٔ فیدبک‌ کاربران‌ بوده و درس‌هایی که دارت از Flutter ،AdWords و AdSense گرفته نیز در آپدیت‌ها اعمال شده‌اند.

هستهٔ اصلی Dart
قبل از اینکه راجع‌ به ویژگی‌های پیچیدهٔ دارت صحبت کنیم، دلایل مناسب بودن دارت برای کلاینت‌ساید را بازگو می‌کنیم. در واقع، علاوه بر ویژگی‌هایی که برای یک زبان مدرن و هدفمند ضروری است، یک زبان مناسب برای کلاینت‌ساید باید از قابلیت‌هایی همچون موارد زیر بهره‌ ببرد:

ساختار: سینتکس زبان باید تمیز و مختصر باشد، ابزارها باید ساده باشند و توسعه باید با سرعت بالا صورت گیرد. این قابلیت نیز باید فراهم باشد که برنامه بر روی دیوایس (موبایل) بتواند به سادگی اجرا و کامپایل شود.

سرعت بالا: امروزه توسعه‌دهندگان کلاینت‌ساید باید به فکر حداقل سه پلتفرم مختلف باشند که عبارتند از اندروید، آی‌اواس و وب که زبان مورد نظر باید برای هر سه پاسخگو باشد.

قابل دسترسی برای دولوپرها: اگر زبانی می‌خواهد توسط میلیون‌ها توسعه‌دهنده استفاده‌ شود، باید تا حد امکان برای آن‌‌‌ها آشنا و بروز باشد.

واکنش‌پذیر بودن: زبان‌ برنامه‌نویسی باید به‌ نوعی ری‌اکتیو یا واکنش‌گرا باشد (واکنش‌گرایی روشی است که سایت یا صفحات وب نسبت به دیوایس کاربر چون گوشی تلفن هوشمند، آی‌پد، لپ‌تاپ، انواع مانیتور کامپیوتر خانگی و تلویزیون‌ها واکنش نشان داده و خود را بر مبنای اندازهٔ صفحه و اسکرین نمایش می‌دهند).

لازم به ذکر است که از دارت در پروژه‌های مهم زیادی برای توسعهٔ اپ اندروید، آی‌او‌اس و وب‌سایت توسط گوگل و شرکت‌های بزرگ دیگر استفاده شده است. در واقع، دارت به‌ خاطر سینتکس تمیز و مختصرش و اینکه می‌تواند در VM به‌ همراه مفسر JIT اجرا شود، سرعت دولوپر را افزایش داده است. قابلیت دوم هم این است که با Hot Reload می‌توان هنگامی که کدها در دیوایسی همانند موبایل در حال اجرا شدن است، اقدام به ریفکتور کردن کدها نمود. با این قابلیت که دارت کدها را به‌ صورت لوکال کامپایل می‌کند، برنامه‌ها با سرعت بسیار بالاتری نسبت به قبل اجرا می‌شوند.

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

با توجه به شیی‌‌ٔگرایی و سینتکس مشابه دارت نسبت به عموم زبان‌های برنامه‌نویسی، یادگیری دارت برای دولوپرها آسان است و باتوجه به فیدبک کاربران، توسعه‌دهندگان زبان‌هایی همچون C++ ،C# ،Objective-C و Java می‌توانند به‌ راحتی این زبان را فرا بگیرند.

دارت به‌ دلیل لایبرری‌های خاصی که دارد،‌ به‌ صورت واکنش‌گرا عمل می‌کند و نیز به‌ دلیل برخورداری از قابلیتی تحت عنوان Garbage Collector که در زبان‌هایی همچون جاوا وجود دارد، می‌تواند آبجکت‌ها را به‌ خوبی مدیریت کند (Garbage Collector قابلیتی است که مموری را در هنگام ساخت یک آبجکت مدیریت می‌کند و از پر شدن آن جلوگیری می‌کند).

دارت 2: توسعهٔ کلاینت‌ساید بهتر
در دارت 2، قدم‌های محکمی برداشته شده است تا این زبان برای کلاینت‌ساید مناسب‌تر گردد. به‌‌ طور خاص، قابلیت‌های جدیدی اضافه شده‌اند از جمله Type System بهتر و کنترل UI با کدنویسی دارت بدون نیاز به یک زبان نشانه‌گذاری جداگانه همچون XML که در ادامه بیشتر پیرامون قابلیت‌های جدید دارت بحث خواهیم کرد.

تایپ سیستم بهتر
تیم‌های پشت پروژه‌های AdWords و AdSense، بسیاری از پروژه‌های مهم گوگل که از طریق تبلیغات کسب درآمد می‌کنند را توسط زبان دارت توسعه داده‌اند و با همکاری با این گروه‌ها، شانس بزرگی برای قوی‌تر کردن تایپ سیستم زبان برنامه‌نویسی دارت مهیا شده است. تایپ سیستم جدید این زبان، این امکان را برای دولوپرها فراهم می‌کند تا باگ‌ها را زودتر شناسایی کنند که برای تیم‌های بزرگ توسعهٔ اپلیکیشن، می‌تواند باعث پیشرفت شود و کیفیت کدنویسی ایشان را به مراتب بالاتر ببرد.

البته این قابلیت تنها منحصر به این زبان نیست. در اکوسیستم گسترده‌ٔ وب، توجه‌ها به سمت جاوااسکریپت که همچنین قابلیتی دارا است نیز معطوف شده است. برای‌ مثال، زبان‌های TypeScript و Flow قابلیت‌هایی برای اجرای بهتر در کنار جاوااسکریپت دارند که کمک شایانی به آنالیز و بررسی کدها می‌کنند.

به طور مثال، در نمونه کد کوچک زیر، قابلیت Type Inference، باعث شناسایی باگ‌ها و ارورهای نامحسوس شده و این می‌تواند کیفیت کدنویسی را افزایش دهد:

void main() {
  List prices = ['99', '27', '10000', '20000000'];
  
  // Sort in place from smallest to largest
  prices.sort();
  
  print('Lowest price is ${prices[0]}!');
}

در این نمونه کد، انتظار می‌رود تا برنامه عدد 27 را پرینت کند، ولی اگر این قابلیت فعال نباشد، به دلیل ترتیب‌بندی اعداد به‌ صورت اشتباه، عدد 1000 به نمایش درمی‌آید و دارت 2 می‌تواند این ارور را به خوبی تشخیص دهد.

کنترل رابط‌ کاربری توسط کد
در زمان طراحی رابط‌ کاربری، سوئیچ کردن پیاپی در بین زبانی که با آن برنامه را می‌نویسید با یک زبان نشانه‌گذاری (مارکاپ)، می‌تواند گاهاً خسته‌کننده و آزاردهنده باشد. تیم توسعهٔ زبان برنامه‌نویسی دارت برآنند تا طراحی UI را جذاب‌تر کنند و دیگر نیازی به سوئیچ پی‌درپی در بین زبان‌های مختلف نباشد. در همین راستا، در نسخهٔ دوم زبان Dart دو قابلیت new و const وجود دارند. این قابلیت‌ها که توسط دولوپرهای این زبان نیز درخواست شده بودند، مسیر را برای قابلیت‌های جدید باز می‌کنند. برای مثال، با این دو قابلیت تعریف ما از مفهوم Widget در یوآی را عوض می‌کنند:

// Before Dart 2
Widget build(BuildContext context) {
  return new Container(
    height: 56.0,
    padding: const EdgeInsets.symmetric(horizontal: 8.0),
    decoration: new BoxDecoration(color: Colors.blue[500]),
    child: new Row(
      ...
    ),
  );
}

// After Dart 2
Widget build(BuildContext context) =>
  Container(
    height: 56.0,
    padding: EdgeInsets.symmetric(horizontal: 8.0),
    decoration: BoxDecoration(color: Colors.blue[500]),
    child: Row(
      ...
    ),
  );

کاربرد‌های کلاینت‌سایدِ دارت
یکی از مهم‌ترین کاربردهای دارت در Flutter می‌باشد (Flutter فریمورک طراحی رابط‌ کاربری گوگل است که برای بالا بردن کیفیت طراحی رابط‌ کاربری در توسعهٔ اپ برای اندروید و آی‌اواس به‌ کار می‌رود). Flutter از یک استایل واکنش‌گرا برای طراحی رابط‌ کاربری استفاده می‌کند و رابط‌ کاربری را پیکسل به پیکسل کنترل می‌کند. دارت با یادگیری آسان، برنامه‌نویسی واکنش‌گرا، سرعت توسعهٔ بالا و قابلیت اجرای قوی هنگام اجرا و گاربج کالکتور قوی، گزینهٔ مناسبی برای توسعه در کنار فریمورک فلاتر است.

علاوه بر کاربرد در حوزهٔ توسعهٔ اپ موبایل، دارت در پروژه‌های مهم وب نیز تأثیرات مثبت زیادی می‌تواند داشته باشد. این زبان لایبرری‌های مخصوص وب همانند dart:html و فریمورک‌های اختصاصی زیادی دارا است. تیم‌هایی که از دارت برای توسعه استفاده می‌کنند، از سرعت بالای این زبان در توسعه متحیر شده‌اند. در همین راستا، Manish Gupta، سرپرست بخش مهندسان AdWords گوگل می‌گوید:

فرانت‌اند AdWords خیلی عظیم و پیچیده هست و بخش زیادی از درآمد گوگل روی همین بخش می‌چرخه. ما Dart رو به دلیل ترکیبی عالی از قابل پیش‌بینی بودن، سهولت یادگیری، سیستم تایپ قوی و پشتیبانی از وب و تلفن‌ همراه انتخاب کردیم. مهندسین ما دو یا سه برابر مفیدتر از گذشته شدن و از اینکه به این زبان روی آوردن هم خیلی راضی و خوشحالن.

پیشرفت و آیندهٔ دارت
با Flutter و Dart، دولوپرها بالاخره می‌توانند تنها با یک کدبیس مشترک، برنامه‌هایی باکیفیت و خلاقانه برای اندروید، آی‌اواس و وب بنویسند (کدبیس مجموعه‌ای از کدهایی است که در چند پلتفرم استفاده و اجرا می‌شوند). در نتیجه، اعضای تیم می‌توانند به‌ راحتی بین پلتفرم‌های مختلف سوئیچ کنند. 

دارت یک پروژه‌ٔ #اپن‌سورس و طبق استاندارد ECMA است و توسعه‌دهندگان این زبان از مشارکت افراد در توسعهٔ هستهٔ این زبان و ساخت پکیج‌ها در دارت حمایت می‌کنند (مشاهدهٔ ریپازیتوری زبان برنامه‌نویسی دارت در گیت‌هاب). همچنین شما می‌توانید از Dart SDK و Flutter در کامندلاین نیز استفاده کنید. 

با این پیشرفت‌ها، دارت 2 یک زبان کاربردی، تمیز و آماده برای رقابت با زبان‌های دیگر است که زبان‌‌های برنامه‌نویسی دیگر را در توسعهٔ اپ‌های مدرن به چالش می‌کشد و این در حالی است که تعداد دولوپرهایی که از سراسر دنیا مهر تأیید روی این زبان می‌زنند، رو به افزایش است.

حال نوبت به نظرات شما می‌رسد. آیا تجربهٔ کدنویسی با زبان دارت را دارید و آیا ادعاهایی که گوگل در مورد قابلیت‌های منحصربه‌فرد این زبان دارا است را قبول می‌کنید؟ نظرات، دیدگاه‌ها و تجربیات خود را با دیگر کاربران سکان آکادمی به اشتراک بگذارید.

منبع


کیان فلاحی