آموزش دارت

آنچه در این صفحه می خوانید :

معرفی زبان دارت (Dart)

یک زبان برنامه نویسی بهینه شده برای کلاینت جهت ایجاد برنامه های سریع در سیستم عامل های مختلف است. دارت توسط گوگل توسعه یافته و برای ساختن برنامه های موبایل، دسکتاپ و وب مورد استفاده قرار می گیرد. شرکت گوگل زبان برنامه نویسی دارت (Dart) را طراحی کرد تا جاوااسکریپت که زبان داخلی مرورگرهای وب است را توسط کامپایلر dart2js با آن جایگزین کند. کد نوشته شده در Dart می تواند در بعضی موارد سریعتر از کد معادل نوشته شده با اسکریپت های جاوااسکریپت اجرا شود. نحو Dart براساس جاوااسکریپت است که شبیه زبان سی (C) می باشد.

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

تاریخچه دارت (Dart)

دارت در کنفرانس GOTO در آرهوس دانمارک، 10 تا 12 اکتبر 2011 رونمایی شد. این پروژه توسط Lars Bak و Kasper Lund تأسیس شد. Dart 1.0 در 14 نوامبر 2013 منتشر شد. دارت در ابتدا به دلیل اینکه برنامه برای قرارگیری در Chrome به Dart VM نیاز داشت و باعث قطعه قطعه شدن وب می شد، مورد انتقاد قرار گرفت. این برنامه ها در سال 2015 با انتشار 1.9 نسخه از دارت حذف شدند تا در عوض بر کامپایل کردن Dart به JavaScript تمرکز کنند.

Dart 2.6 که اخیراً منتشر شده است با پسوند جدید dart2native همراه است. این ویژگی توسعه نیتیو را روی سیستم عامل های لینوکس، مک او اس (MacOS) و ویندوز گسترش می دهد. توسعه دهندگان اولیه قادر به ایجاد ابزارهای جدید فقط با استفاده از دستگاه های Android یا iOS بودند. علاوه بر این، با استفاده از این برنامه افزودنی، می توان برنامه Dart را در قسمت اجرایی خود محصور کرد. بنابراین، به گفته نمایندگان شرکت، اکنون نصب Dart SDK الزامی نیست، مجریان اجرایی موجود در حال حاضر می توانند در عرض چند ثانیه شروع به کار کنند. پسوند جدید همچنین با ابزار Flutter یکپارچه شده است، بنابراین امکان استفاده از کامپایلر در سرویس های کوچک را فراهم می کند (مثلاً پشتیبانی از بک اند).

Ecma International کمیته فنی TC52 را برای کار در استاندارد سازی Dart تشکیل داده است و از آنجا که Dart می تواند به JavaScript استاندارد وارد شود، در هر مرورگر مدرن به طور مؤثر کار می کند.

چه ادیتور هایی از دارت (Dart) پشتیبانی می کنند؟

در آوریل 2015، گوگل اعلام کرد که Dart Editor به نفع محیط توسعه یکپارچه JetBrains (IDE) کنار می رود، که اکنون IDE پیشنهادی برای این زبان است. افزونه Dart برای IntelliJ IDEA، PyCharm، PhpStorm و وب استرم (WebStorm) در دسترس است. این افزونه از بسیاری از ویژگی ها مانند هایلایت سینتکس، تکمیل کد، تجزیه و تحلیل، تغییر کاربری، اشکال زدایی و موارد دیگر پشتیبانی می کند. افزونه های دیگر برای ویرایشگرانی مانند Sublime Text، Atom، اماکس (Emacs)، ویم (Vim) و ویژوال استودیو کد در دسترس است.

دارت پد (DartPad)

تیم دارت در ابتدای سال 2015 DartPad را ایجاد کرد تا راهی ساده برای شروع استفاده از Dart فراهم کند. DartPad ویرایشگر کاملاً آنلاین است که از آن کاربران می توانند با رابط های برنامه نویسی برنامه Dart (API) آزمایش کرده و کد Dart را اجرا کنند. DartPad هایلایت سینتکس، تجزیه و تحلیل کد، تکمیل کد، داکیومنت اچ تی ام ال (HTML) و ویرایش سی اس اس (CSS) را ارائه می دهد.

معماری دارت (Dart)

معماری دارت

تکنولوژی انعطاف پذیر کامپایلر شما را قادر می سازد تا کدهای Dart را بسته به پلتفرم و اهداف خود به روش های مختلف اجرا کنید:

  • Dart Native: برای برنامه هایی که دستگاه های (موبایل، دسکتاپ، سرور و ...) را هدف قرار می دهند شامل هر دو کامپایلر با JIT (فقط در زمان) و AOT (پیش از زمان) برای تولید کد ماشین استفاده میشود.
  • Dart Web: برای برنامه هایی که وب را هدف قرار می دهند، Dart Web شامل کامپایلر زمان توسعه (dartdevc) و کامپایلر زمان تولید (dart2js) می باشد.
  • Dart Native (VM JIT و AOT) Dart Native امکان اجرای کد DART را برای ARM یا X64 بومی برای برنامه های تلفن همراه، دسکتاپ و سرور را کامپایل می کند. فریمورک Flutter یک ابزار محبوب UI چندپخشی است که توسط Dart Native طراحی شده است و دستگاه های تلفن همراه یا دسکتاپ را هدف قرار داده است.
  • جریان کار توسعه سریع (DART VM JIT) Dart VM دارای کامپایلر فقط در زمان (JIT) است که از هر دو تفسیر خالص استفاده می کند. به عنوان مثال در دستگاه های( iOS) و بهینه سازی زمان اجرا پشتیبانی می کند.
  • کد تولید بهینه شده (Dart AOT) هنگامی که برنامه ها آماده هستند تا در مرحله تولید قرار گیرند می توانید از کامپایلر DART AOT پیش نویس برنامه خود را به کد محلی ماشین ARM یا X64 کامپایل کنید. کد کامپایل شده AOT در داخل Dart به طور موثر کار می کند که یک نوع سیستم Dart را اجرا و حافظه را با استفاده از تخصیص سریع و یک جمع کننده زباله مدیریت می کند.
  • Dart Web می تواند کد های Dart را در سیستم عامل های وب مبتنی بر جاوااسکریپت اجرا کند. با Dart Web، کد Dart را به کد جاوااسکریپت وارد می کنید، که به نوبه خود در یک مرورگر اجرا می شود - به عنوان مثال، V8 در داخل Chrome.
  • کد تولید بهینه شده (کامپایلر Dart JS) ابزار dart2js کد جاوااسکریپت را برای اسکریپت سریع، جمع و جور و قابل استفاده، کامپایل می کند. این ابزار تکنیک هایی مانند حذف کد مرده را به کار می گیرد.

ویژگی های دارت (Dart)

برنامه های موبایلی که در Dart با فلاتر نوشته شده اند، برنامه های مرسوم کراس پلتفرم هستند؛ بنابراین می توانند بر روی هر دو سیستم عامل Android و iOS (مانند ری اکت نیتیو، زامارین و غیره) اجرا شوند. از دید توسعه دهنده، انعطاف پذیری و قابلیت انتقال زبان بسیار مهم است.

دارت پشتیبانی قوی ابزار را دارد. تقریبا هر ویرایشگر متن اصلی و IDE ها، پشتیبانی گسترده ای از زبان Dart دارد. شما می توانید IDE های سنگین مانند Webstorm، IntelliJ IDEA و اندروید استودیو را استفاده کنید یا از ادیتور های ساده مانند VS Code، Sublime text، VIM، Emacs، Atom، و غیره استفاده کنید. بنابراین شما می توانید هر ویرایشگری را که دوست دارید انتخاب کنید.

Dart یکی از سریع ترین زبان های در حال رشد در گوگل است و توسط محصولات داخلی آن مانند Adwords، Flutter، Fuchsia، AngularDart و غیره استفاده می شود. در خارج از Google، شرکت هایی مانند Alibaba، Adobe MailChimp، JetBrains از این زبان در تولید استفاده می کنند.اغلب دیده می شود که شرکت ها محصولاتشان را با زبان های جدید عرضه می کنند، اما آنها را اختصاصی می کند. از آنجایی که Dart اوپن سورس است، توسعه دهندگان هرگز نباید نگران مسائل صدور مجوز باشند.

چه کسانی از دارت (Dart) استفاده می کنند؟

جعبه ابزار محبوب Flutter به زبان Dart متکی است، بنابراین توسعه دهندگان از زبان Dart استفاده می کنند. مهندسان Google از Dart برای ایجاد برنامه های زیادی استفاده می کنند. به عنوان مثال، اگر از وب یا برنامه تلفن همراه Google Ads استفاده می کنید، از یک برنامه Dart استفاده می کنید که بخش عمده ای از درآمد Google را پشتیبانی می کند. همچنین، تیم دستیار در گوگل از دارت برای ویژگی های Smart Displays استفاده می کند.

استفاده های زیادی از دارت وجود دارد. می توانید آن را در سرور، در دستگاه های تعبیه شده، در برنامه های موبایل استفاده کنید و آن را در JavaScript کامپایل کنید. دارت یک زبان برنامه نویسی مدرن، مقیاس پذیر و عمومی است.

  • Google از Dart برای ساختن برنامه های وب مهم و حیاتی مانند ابزار فروش داخلی، UI TV Google Fiber، نسخه های جدید AdWords و موارد دیگر استفاده می کند.
  • Google از Dart به عنوان یک ران تایم تعبیه شده، مانند جعبه های تنظیم شده Google Fiber استفاده می کند.
  • Google همچنین از Dart برای به کار گرفتن در Flutter، یک برنامه تلفن همراه cross-platform SDK استفاده می کند.

دارت (Dart) و فلاتر (Flutter)

فلاتر (Flutter) یک کیت توسعه نرم افزار UI اوپن سورس است که توسط گوگل ساخته شده است. فلاتر جهت توسعه برنامه های کاربردی برای سیستم عامل های Android، iOS، Windows، Mac، Linux، Google Fuchsia و وب استفاده می شود. همچنین فلاتر (Flutter) یک فریمورک اوپن است که در سال 2017 توسط گوگل معرفی شد و به کمک آن می توانید اپلیکیشن های نیتیو (Native) برای اندروید و iOS بسازید. شما به کمک فلاتر می توانید با یک بار کدنویسی یک اپلیکیشن زیبا و نیتیو طراحی کنید که روی اندروید و آی او اس (iOS) قابل اجرا است. همچنین شما میتوانید طراحی رابط کاربری اپلیکیشن های Native که با کاتلین، جاوا و یا سوئیفت می نویسید را نیز با Flutter انجام دهید. فایل های دارت مورد استفاده در برنامه های Flutter در یک فایل باینری (apk. یا ipa.) جمع آوری و بسته بندی می شوند و در فروشگاه های برنامه آپلود می شوند.

Flutter دارای کتابخانه های مخصوص برنامه است، بیشتر در مورد عناصر رابط کاربری مانند:

  • ویجت: عناصر برنامه مشترک، مانند متن یا ListView.
  • متریال: حاوی عناصری از طراحی متریال، مانند FloatingActionButton.
  • Cupertino: حاوی عناصری از طرح های فعلی iOS مانند CupertinoButton.

مقایسه دارت (Dart) و جاوااسکریپت (Javascript)

مقایسه دارت و جاوااسکریپت

جاوااسکریپت (Javascript)

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

مقایسه دارت و جاوااسکریپت:

راحتی در استفاده

جاوااسکریپت تقریباً طولانی تر در این صنعت بوده و زبانی بالغ و پایدار است. استفاده از JavaScript بسیار آسان است. این فریمورک ها و کتابخانه های بی شماری به صورت آنلاین در دسترس است، بنابراین توسعه دهندگان می توانند از کد موجود برای رشد سریع برنامه ها استفاده کنند. با این حال، برای یادگیری نحو JavaScript، به طور کلی باید دانش فنی اساسی در مورد برنامه نویسی داشته باشیم.

Dart برای بسیاری از توسعه دهندگان خارج از Google زبان نسبتاً جدیدی است. اگرچه گوگل تلاش زیادی را برای مستند سازی زبان برنامه نویسی Dart کرده است، اما هنوز هم برای توسعه دهندگان سخت است که راه حل هایی را برای مشکلات خاص پیدا کنند. از لحاظ سبک برنامه نویسی و نحو، دارای نحو جاوا مانند است، بنابراین توسعه دهندگان با پس زمینه OOPS می توانند به محض یادگیری اصول اولیه، به راحتی تسلط کرده و از Dart استفاده کنند.

محبوبیت

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

قبل از اینکه گوگل Flutter را اعلام کند، دارت جایی پیدا نشد. با این حال، از زمان اعلام Flutter در Google I / O، دارت به عنوان جایگزینی برای React Native به شدت در بین توسعه دهندگان تلفن همراه جلب شده است. توسعه دهندگان که جاوااسکریپت را به عنوان زبان برنامه نویسی دوست ندارند، دارت را به عنوان گزینه دیگری یافتند. به عنوان شرکت های بزرگی مانند Google، و غیره، فلاتر را پذیرفت، محبوبیت دارت به میزان قابل توجهی افزایش یافت، اما به اندازه JavaScript محبوب نیست.

بهره وری

جاوااسکریپت تقریباً هر سال دارای فریمورک های بی شماری و فریمورک های جدید JavaScript در بازار است. از آنجا که نیاز به توسعه دهندگان برای به اشتراک گذاری و توزیع کد وجود دارد، هزاران بسته JS بصورت آنلاین در دسترس است. با استفاده از یک بسته و تجربه موجود از توسعه دهندگان، یادگیری و اتخاذ زبان برنامه نویسی JavaScript برای توسعه دهندگان آسان است. از آنجا که JavaScript یک زبان برنامه نویسی سریع، سبک و پویا است، باعث افزایش بهره وری توسعه دهنده می شود.

راه حل های مربوط به مشکلات رایج را می توان به راحتی آنلاین یافت، که دلیل دیگری این است که توسعه دهندگان JavaScript را بر سایر زبان های برنامه نویسی ترجیح می دهند. اگرچه جاوااسکریپت دارای کتابخانه ها و فریمورک های بی شماری در دسترس است، اما همه آنها به همان اندازه خوب نیستند. همچنین فریمورک های جدید JavaScript پس از یک بازه معمولی منتشر می شوند، بنابراین توسعه دهندگان دائماً نیاز به یادگیری فریمورک های جدید دارند که این امر مانع بهره وری آنها می شود.

دارت عالی است، اما توسعه دهندگان جدید یا حتی با تجربه می توانند در ویژگی های زبان Dart سردرگم شوند. نحو Dart تمیز است و بیشتر شبیه Java است، بنابراین توسعه دهندگان با پس زمینه جاوا می توانند نحو کد را به راحتی انتخاب کنند. با این حال، توسعه دهندگان ممکن است تلاش زیادی برای یافتن راه حل برای مشکلات در دارت کنند.

منحنی یادگیری

یادگیری JavaScript کار سختی برای افراد غیر برنامه نویس نیست، اما دانستن مفاهیم اساسی برنامه نویسی باعث می شود جاوااسکریپت آسان شود. دوره هایی و آموزش های آنلاین زیادی برای توسعه دهندگان که مایل به یادگیری JavaScript هستند وجود دارد.

یادگیری Dart می تواند برای مبتدیان یک کار دلهره آور باشد زیرا Dart یک زبان برنامه نویسی رایج نیست و دوره ها یا کتاب های بسیار محدودی برای زبان برنامه نویسی Dart وجود دارد. با این حال، گوگل اسناد گسترده ای از Dart را در وب سایت رسمی خود دارد که به برنامه نویسان سایر زبان های OOPS کمک می کند تا مفاهیم Dart را به راحتی انتخاب کنند. برخی از نحوهای آن ممکن است غیرمعمول و عجیب به نظر برسند، اما با کمی تمرین، توسعه دهندگان به زودی با دارت احساس راحتی می کنند.

سرعت

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

دارت را می توان در هر دو AOT و JIT کامپایل کرد و به ساختن برنامه ها از چندین طریق کمک می کند زیرا استفاده از تلفیق JIT می تواند پیشرفت را سرعت ببخشد و از تلفیق AOT می توان در طی مراحل انتشار برای بهینه سازی بهتر استفاده کرد. این روش در توسعه برنامه Flutter استفاده شده است.

Frontend در مقابل Backend

در ابتدا JavaScript برای توسعه وب فرانت اند با HTML و CSS مورد استفاده قرار گرفت. با این حال، با ظهور نود جی اس (Node.js) اکنون JavaScript به طور گسترده ای برای توسعه سمت سرور نیز مورد استفاده قرار می گیرد.

دارت در حال حاضر به طور فعال با Flutter برای توسعه ظاهر برنامه های تلفن همراه کراس پلتفرم استفاده می شود. دارت را نیز می توان برای توسعه وب استفاده کرد اما هیچ اشاره ای به استفاده از دارت برای توسعه بک اند نشده است.

ایمنی نوع

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

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

توسعه وب در مقابل توسعه موبایل

JavaScript بر فریمورک های مختلف بر توسعه برنامه های تلفن همراه و وب حاکم است. در یک مقطع، با انتشار React و React Native از فیس بوک، جاوااسکریپت به هیچ وجه در ایجاد برنامه های وب و موبایل برای مبتدیان و مشاغل کوچک تبدیل نمی شود. تعداد زیادی فریمورک JavaScript برای توسعه برنامه های وب، برنامه های وب مترقی و برنامه های همراه ترکیبی، در بازار موجود است، به عنوان مثال Angular، vue.js و غیره.

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

استفاده تجاری

جاوااسکریپت به طور گسترده در شرکت های بزرگ برای توسعه برنامه های تلفن همراه وب و کراس پلتفرم مورد استفاده قرار می گیرد. فیس بوک پیشگام در نوشتن فریمورک React و React Native است که در داخل آنها استفاده شده، اما بسیاری از شرکت های بزرگ دیگر نیز وجود دارند که از JavaScript استفاده می کنند، از جمله اینستاگرام، Reddit، eBay، Slack، Airbnb و غیره.

دارت در گوگل متولد شده است، بنابراین بدیهی است که از آن در Google استفاده می شود، اما برخی از مارک های بزرگ مانند Alibaba نیز وجود دارند که Flutter و Dart را نیز برای توسعه برنامه های تلفن همراه کراس پلتفرم پذیرفته اند. برخی شرکت های بزرگ دیگر نیز وجود دارند که از دارت استفاده می کنند، از جمله Blossom، WorkTrails و غیره.

مثال های دارت (Dart)

نمایش !Hello World

main() {
  print('Hello World!');
}

تابع برای محاسبه سری n فیبوناچی:

int fib(int n) => (n > 2) ? (fib(n - 1) + fib(n - 2)) : 1;
// this is a fibonacci function implementation with a ternary operator in Dart
// this code shall be read as:
// If int n > 2, return fib(n - 1) + fib(n - 2); 
// otherwise, return int 1 as result

void main() { print('fib(20) = ${fib(20)}'); }

یک کلاس ساده:

// Import the math library to get access to the sqrt function.
import 'dart:math' as math;

// Create a class for Point. class Point {

// Final variables cannot be changed once they are assigned. // Create two instance variables. final num x, y;

// A constructor, with syntactic sugar for setting instance variables. // The constructor has two mandatory parameters Point(this.x, this.y);

// A named constructor with an initializer list. Point.origin() : x = 0, y = 0;

// A method. num distanceTo(Point other) { var dx = x - other.x; var dy = y - other.y; return math.sqrt(dx * dx + dy * dy); }

// Example of Operator Overloading Point operator +(Point other) => Point(x + other.x, y + other.y); // When you Instantiating a class such as Point, in Dart 2+, new is // an optional word }

// All Dart programs start with main(). void main() { // Instantiate point objects. var p1 = Point(10, 10); var p2 = Point.origin(); var distance = p1.distanceTo(p2); print(distance); }

نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود