زبان برنامه نویسی Dart

مرور کلی

Dart یک زبان برنامه‌نویسی چندمنظوره است که توسط گوگل توسعه یافته و برای ساخت برنامه‌های وب، سرور، دسکتاپ و موبایل طراحی شده است. Dart بر رویکرد برنامه‌نویسی ساختاری تأکید دارد و ویژگی‌هایی را ارائه می‌دهد که از هر دو نوع کامپایل زمان اجرا (JIT) و کامپایل پیش از اجرا (AOT) پشتیبانی می‌کند، که آن را برای محیط‌های توسعه و تولید کارآمد می‌سازد. نحو مدرن و ویژگی‌های همزمانی آن، مانند برنامه‌نویسی غیرهمزمان با Futures و Streams، باعث محبوبیت آن در توسعه رابط‌های کاربری با فریم‌ورک Flutter شده است که به توسعه‌دهندگان اجازه می‌دهد برنامه‌های کامپایل شده به صورت بومی بسازند.

جنبه‌های تاریخی

ایجاد و تکامل

Dart در سال 2011 به عنوان زبانی که هدف آن بهبود JavaScript، به ویژه برای برنامه‌های وب بود، معرفی شد. این زبان برای حل مشکلات رایج در JavaScript طراحی شده بود، مانند نوع‌گذاری پویا و عملکرد آن در برنامه‌های مقیاس بزرگ. نحو Dart شبیه به زبان‌هایی مانند Java و C# است و این امر باعث می‌شود که برای توسعه‌دهندگانی که با این زبان‌ها آشنا هستند، پذیرش آن نسبتاً آسان باشد.

ارتباط با زبان‌ها و پلتفرم‌های دیگر

طراحی Dart تحت تأثیر زبان‌های برنامه‌نویسی مختلفی از جمله Java، JavaScript، C# و Swift قرار گرفته است. این زبان ارتباط قوی با فریم‌ورک Flutter دارد که یکی از مهم‌ترین توسعه‌ها در اکوسیستم Dart است. معرفی Flutter در سال 2017 به عنوان یک ابزار UI موبایل چندسکویی، محبوبیت Dart را افزایش داد و منجر به افزایش پذیرش آن برای توسعه برنامه‌های موبایل شد.

وضعیت کنونی

از سال 2023، Dart به تکامل خود ادامه می‌دهد و به‌روزرسانی‌های منظم دریافت می‌کند. این زبان نه تنها برای برنامه‌های موبایل از طریق Flutter بلکه برای توسعه وب با فریم‌ورک‌هایی مانند AngularDart نیز مورد توجه قرار گرفته است. جامعه حول Dart نیز رشد کرده و توسط گوگل و منابع، آموزش‌ها و کتابخانه‌های مختلف پشتیبانی می‌شود.

ویژگی‌های نحو

نوع‌گذاری قوی و استنتاج نوع

Dart از نوع‌گذاری قوی پشتیبانی می‌کند، به این معنی که نوع متغیرها در زمان کامپایل بررسی می‌شود، اما همچنین استنتاج نوع را ارائه می‌دهد که به کامپایلر اجازه می‌دهد نوع‌ها را استنباط کند.

var name = "Dart"; // نوع به عنوان String استنباط شده است
String greeting = "Hello, $name";

برنامه‌نویسی غیرهمزمان

Dart از برنامه‌نویسی غیرهمزمان از طریق async و await پشتیبانی داخلی دارد که به توسعه‌دهندگان اجازه می‌دهد کد غیرمسدودکننده را به راحتی بنویسند.

Future<String> fetchData() async {
  return await Future.delayed(Duration(seconds: 2), () => 'Data fetched');
}

ایمنی نال

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

String? nullableName; // می‌تواند نال باشد
String nonNullableName = "Non-Nullable"; // نمی‌تواند نال باشد

میکسین‌ها

Dart اجازه استفاده از میکسین‌ها را می‌دهد که به کلاس‌ها اجازه می‌دهد از چندین منبع پیاده‌سازی را به ارث ببرند.

mixin CanRun {
  void run() {
    print('Running');
  }
}

class Animal with CanRun {}

متدهای گسترش

متدهای گسترش به توسعه‌دهندگان اجازه می‌دهند تا عملکرد جدیدی به کتابخانه‌ها یا کلاس‌های موجود اضافه کنند بدون اینکه آنها را تغییر دهند.

extension StringExtensions on String {
  bool get isEmptyOrNull => this == null || this.isEmpty;
}

سازنده‌های کارخانه‌ای

Dart اجازه می‌دهد تا سازنده‌های کارخانه‌ای که می‌توانند یک نمونه از یک کلاس یا یک زیرنوع را برگردانند، ایجاد شوند و این امر انعطاف‌پذیری در فرآیند ایجاد شیء را فراهم می‌کند.

class Point {
  final num x, y;
  Point(this.x, this.y);

  factory Point.origin() {
    return Point(0, 0);
  }
}

شمارش‌ها

Dart از شمارش‌ها پشتیبانی می‌کند و به توسعه‌دهندگان اجازه می‌دهد مجموعه‌ای محدود از مقادیر ثابت را تعریف کنند.

enum Color { red, green, blue }

متدها و ویژگی‌های استاتیک

Dart اجازه تعریف متدها و ویژگی‌های استاتیک در کلاس‌ها را می‌دهد که می‌توانند بدون ایجاد یک نمونه از کلاس به آنها دسترسی پیدا کرد.

class MathUtils {
  static int add(int a, int b) => a + b;
}

جنریک‌ها

جنریک‌ها امکان ایجاد کلاس‌ها، متدها و رابط‌هایی را که با هر نوع داده‌ای کار می‌کنند، فراهم می‌کنند.

class Box<T> {
  T value;
  Box(this.value);
}

پارامترهای اختیاری

Dart از پارامترهای اختیاری هم موقعیتی و هم نام‌دار پشتیبانی می‌کند که امضای توابع را انعطاف‌پذیرتر می‌کند.

void greet(String name, [String title = 'Mr.']) {
  print('Hello, $title $name');
}

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

IDEها و کامپایلرها

Dart عمدتاً از SDK Dart استفاده می‌کند و می‌توان آن را با استفاده از IDEهای مختلف توسعه داد. IDEهای محبوب برای Dart شامل:

ساخت یک پروژه

SDK Dart شامل یک ابزار خط فرمان به نام dart است که می‌توان از آن برای ایجاد، اجرا و ساخت برنامه‌های Dart استفاده کرد. یک پروژه معمولی می‌تواند با استفاده از:

dart create my_project

مقداردهی شود. برای اجرای برنامه‌های Dart، می‌توان از دستور زیر استفاده کرد:

dart run

کاربردهای Dart

Dart به طور معمول برای:

مقایسه با زبان‌های مشابه

Dart در مقابل JavaScript

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

Dart در مقابل C#

Dart و C# عناصر نحوی مشابهی دارند، اما اکوسیستم Dart عمدتاً بر توسعه سمت کاربر با Flutter متمرکز است، در حالی که C# به طور گسترده‌ای در برنامه‌های سازمانی و خدمات سمت سرور با فریم‌ورک‌هایی مانند ASP.NET استفاده می‌شود.

Dart در مقابل Java

هر دو زبان دارای نحو و اصول شیء‌گرایی مشابهی هستند. با این حال، تمرکز Dart بر روی پارادایم‌های توسعه مدرن، به ویژه برنامه‌نویسی غیرهمزمان و فریم‌ورک‌های متمرکز بر UI مانند Flutter، به آن برتری در برنامه‌های موبایل و وب نسبت به Java می‌دهد.

Dart در مقابل Python

در حالی که Python به شدت برای علم داده و برنامه‌نویسی عمومی محبوب است، Dart تمرکز خاصی بر توسعه موبایل و وب دارد. مزایای عملکرد Dart به دلیل کامپایل AOT می‌تواند منجر به اجرای سریع‌تر نسبت به طبیعت تفسیر شده Python شود.

Dart در مقابل Go

هر دو Dart و Go برای برنامه‌نویسی انعطاف‌پذیر و کارآمد طراحی شده‌اند. با این حال، Dart در توسعه UI با Flutter برجسته است، در حالی که Go به دلیل مدل همزمانی و سادگی‌اش برای سیستم‌های سمت سرور و میکروسرویس‌ها ترجیح داده می‌شود.

نکات ترجمه منبع به منبع

برای ترجمه کد Dart به زبان‌های دیگر، به ابزارهای موجود مانند dart2js برای تبدیل Dart به JavaScript یا Dart's Fiddle برای آزمایش قطعات کد که می‌توانند پیشنهاداتی برای ترجمه ارائه دهند، توجه کنید. برای ترجمه به زبان‌هایی مانند Java یا C#، به دنبال ساختارهای زبانی باشید که به ویژگی‌های Dart نزدیک باشند، به ویژه در ساختارهای شیء‌گرا، عملیات غیرهمزمان و مجموعه‌ها.

ابزارهایی مانند DartPad نیز به آزمایش و درک قطعات کد Dart کمک می‌کنند که می‌توانند سپس با عملکردهای زبان‌های برنامه‌نویسی دیگر مقایسه و تطبیق داده شوند. در حالی که هیچ مترجم منبع به منبع جهانی برای Dart وجود ندارد، کتابخانه‌ها و فریم‌ورک‌های خاص می‌توانند در سازگاری کد Dart برای اجرا در محیط‌ها یا پلتفرم‌های مختلف کمک کنند، مانند تبدیل آن به Node.js یا ادغام با سیستم‌های موجود C#.