مقدمه دارت برای توسعه دهندگان جاوا

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

1. مقدمه

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

این نرم افزار کد دارت را با تمرکز بر ویژگی هایی که توسعه دهندگان جاوا انتظار ندارند، به شما معرفی می کند. شما می توانید توابع دارت را در 1 دقیقه، اسکریپت ها را در 5 دقیقه و برنامه ها را در 10 دقیقه بنویسید!

چیزی که یاد خواهید گرفت

  • نحوه ایجاد سازنده
  • روش های مختلف برای تعیین پارامترها
  • زمان و نحوه ایجاد گیرنده و ستتر
  • چگونه دارت حریم خصوصی را کنترل می کند
  • نحوه ایجاد کارخانه ها
  • نحوه عملکرد برنامه نویسی تابعی در دارت
  • سایر مفاهیم اصلی دارت

آنچه شما نیاز دارید

برای تکمیل این کد لبه، تنها چیزی که نیاز دارید یک مرورگر است!

همه نمونه ها را در DartPad می نویسید و اجرا می کنید، یک ابزار تعاملی مبتنی بر مرورگر که به شما امکان می دهد با ویژگی های زبان دارت و کتابخانه های اصلی بازی کنید. اگر ترجیح می دهید، می توانید به جای آن از یک IDE مانند WebStorm، IntelliJ با افزونه Dart یا کد ویژوال استودیو با پسوند Dart Code استفاده کنید.

دوست دارید از این کد لبه چه چیزی یاد بگیرید؟

من با موضوع جدید هستم و می خواهم یک مرور کلی خوب داشته باشم. من چیزی در مورد این موضوع می دانم، اما می خواهم یک تجدید نظر کنم. من به دنبال کد مثال برای استفاده در پروژه خود هستم. من به دنبال توضیح یک چیز خاص هستم.

2. یک کلاس دارت ساده ایجاد کنید

شما با ساختن یک کلاس دارت ساده با عملکردی مشابه کلاس Bicycle از آموزش جاوا شروع خواهید کرد. کلاس Bicycle شامل برخی از متغیرهای نمونه خصوصی با گیرنده و تنظیم کننده است. یک متد main() یک Bicycle را نمونه‌سازی می‌کند و آن را در کنسول چاپ می‌کند.

99c813a1913dcc42.pngc97a12197358d545.png

DartPad را راه اندازی کنید

این نرم افزار کد یک نمونه دارت پد جدید را برای هر مجموعه تمرین ارائه می دهد. پیوند زیر یک نمونه جدید را باز می کند که شامل یک مثال پیش فرض "Hello" است. می‌توانید به استفاده از همان DartPad در سراسر کد لبه ادامه دهید، اما اگر روی Reset کلیک کنید، DartPad شما را به مثال پیش‌فرض برمی‌گرداند و کارتان را از دست می‌دهید.

b2f84ff91b0e1396.png دارت پد را باز کنید

کلاس دوچرخه را تعریف کنید

b2f84ff91b0e1396.png بالای تابع main() یک کلاس Bicycle با سه متغیر نمونه اضافه کنید. همچنین محتویات را از main() حذف کنید، همانطور که در قطعه کد زیر نشان داده شده است:

class Bicycle {
  int cadence;
  int speed;
  int gear;
}

void main() {
}

cf1e10b838bf60ee.png مشاهدات

  • با این مثال، تحلیلگر Dart خطایی ایجاد می‌کند که به شما اطلاع می‌دهد که متغیرها باید مقداردهی اولیه شوند زیرا غیر قابل تهی هستند. در بخش بعدی آن را برطرف خواهید کرد.
  • متد اصلی دارت main() نام دارد. اگر نیاز به دسترسی به آرگومان های خط فرمان دارید، می توانید آنها را اضافه کنید: main(List<String> args) .
  • متد main() در سطح بالا زندگی می کند. در Dart می توانید کدهای خارج از کلاس ها را تعریف کنید. متغیرها، توابع، دریافت‌کننده‌ها و تنظیم‌کننده‌ها همگی می‌توانند خارج از کلاس‌ها زندگی کنند.
  • مثال اصلی جاوا، متغیرهای نمونه خصوصی را با استفاده از تگ private ، که دارت از آن استفاده نمی‌کند، اعلام می‌کند. کمی بعد در «افزودن یک متغیر فقط خواندنی» درباره حریم خصوصی اطلاعات بیشتری کسب خواهید کرد.
  • نه main() و نه Bicycle به عنوان public اعلام نمی شوند، زیرا همه شناسه ها به طور پیش فرض عمومی هستند. دارت کلمات کلیدی public ، private یا protected ندارد.
  • دارت از تورفتگی دو کاراکتری بر اساس قرارداد به جای چهار کاراکتر استفاده می کند. به لطف ابزار مفیدی به نام قالب دارت ، نیازی به نگرانی در مورد قراردادهای فضای خالی Dart ندارید. همانطور که قراردادهای کد دارت ( دارت موثر ) می‌گویند، "قوانین رسمی مدیریت فضای خالی برای دارت، هر فرمت دارت تولید می‌کند ."

سازنده دوچرخه را تعریف کنید

b2f84ff91b0e1396.png سازنده زیر را به کلاس Bicycle اضافه کنید:

Bicycle(this.cadence, this.speed, this.gear);

cf1e10b838bf60ee.png مشاهدات

  • این سازنده بدنه ندارد که در دارت معتبر است.
  • اگر نقطه ویرگول ( ; ) در انتهای یک سازنده بدون بدنه را فراموش کنید، DartPad خطای زیر را نمایش می دهد: "یک بدنه تابع باید ارائه شود."
  • استفاده از this در لیست پارامترهای سازنده یک میانبر مفید برای تخصیص مقادیر به متغیرهای نمونه است.
  • کد بالا معادل کد زیر است که از یک لیست اولیه استفاده می کند:
Bicycle(int cadence, int speed, int gear)
      : this.cadence = cadence,
        this.speed = speed,
        this.gear = gear;

کد را فرمت کنید

در هر زمان که بخواهید با کلیک بر روی Format در بالای رابط کاربری DartPad، کد Dart را دوباره فرمت کنید. فرمت مجدد به ویژه زمانی مفید است که کد را در DartPad قرار می دهید و توجیه خاموش است.

b2f84ff91b0e1396.png روی Format کلیک کنید.

نمونه‌سازی و چاپ یک نمونه دوچرخه

b2f84ff91b0e1396.png کد زیر را به تابع main() اضافه کنید:

void main() {
  var bike = new Bicycle(2, 0, 1);
  print(bike);
}

b2f84ff91b0e1396.png کلمه کلیدی new اختیاری را حذف کنید:

var bike = Bicycle(2, 0, 1);

cf1e10b838bf60ee.png مشاهده

  • کلمه کلیدی new در Dart 2 اختیاری شد.
  • اگر می دانید که مقدار متغیر تغییر نمی کند، می توانید از final به جای var استفاده کنید.
  • تابع print() هر شی (نه فقط رشته ها) را می پذیرد. با استفاده از toString() شی، آن را به یک String تبدیل می کند.

مثال را اجرا کنید

b2f84ff91b0e1396.png مثال را با کلیک روی Run در بالای پنجره DartPad اجرا کنید. اگر Run فعال نیست، بخش مشکلات را بعداً در این صفحه ببینید.

شما باید خروجی زیر را ببینید:

Instance of 'Bicycle'

cf1e10b838bf60ee.png مشاهده

  • هیچ خطا یا اخطاری نباید ظاهر شود، که نشان می دهد استنتاج نوع کار می کند، و تحلیلگر استنباط می کند که عبارتی که با var bike = شروع می شود، یک نمونه Bicycle را تعریف می کند.

خروجی را بهبود بخشید

اگرچه خروجی "نمونه "دوچرخه" درست است، اما چندان آموزنده نیست. همه کلاس‌های دارت دارای یک toString() هستند که می‌توانید برای ارائه خروجی مفیدتر آن را لغو کنید.

b2f84ff91b0e1396.png toString() زیر را در هر جایی از کلاس Bicycle اضافه کنید:

@override
String toString() => 'Bicycle: $speed mph';

cf1e10b838bf60ee.png مشاهدات

  • حاشیه نویسی @override به تحلیلگر می گوید که شما عمداً یک عضو را لغو می کنید. اگر نتوانید به درستی نادیده گرفتن را انجام دهید، آنالیزور با خطا مواجه می شود.
  • Dart هنگام تعیین رشته ها از نقل قول های تک یا دوتایی پشتیبانی می کند.
  • از درون یابی رشته ای برای قرار دادن مقدار یک عبارت در یک رشته واقعی استفاده کنید: ${expression} . اگر عبارت یک شناسه است، می‌توانید از پرانتزها بگذرید: $variableName .
  • توابع یا روش های یک خطی را با استفاده از علامت پیکان چربی ( => ) کوتاه کنید.

مثال را اجرا کنید

b2f84ff91b0e1396.png روی Run کلیک کنید.

شما باید خروجی زیر را ببینید:

Bicycle: 0 mph

چالش ها و مسائل؟ کد خود را بررسی کنید .

یک متغیر فقط خواندنی اضافه کنید

مثال اصلی جاوا speed را به عنوان یک متغیر فقط خواندنی تعریف می کند - آن را به عنوان خصوصی اعلام می کند و فقط یک گیرنده ارائه می دهد. در مرحله بعد، همان عملکرد را در Dart ارائه خواهید کرد.

b2f84ff91b0e1396.png bicycle.dart را در bicycle.dart باز کنید (یا به استفاده از کپی خود ادامه دهید).

برای علامت گذاری یک شناسه دارت به عنوان خصوصی در کتابخانه آن، نام آن را با زیرخط ( _ ) شروع کنید. می‌توانید با تغییر نام و اضافه کردن یک گیرنده، speed را به فقط خواندنی تبدیل کنید.

سرعت را به یک متغیر نمونه خصوصی و فقط خواندنی تبدیل کنید

b2f84ff91b0e1396.png در سازنده Bicycle ، پارامتر speed را حذف کنید:

Bicycle(this.cadence, this.gear);

b2f84ff91b0e1396.png در main() ) پارامتر دوم ( speed ) را از فراخوانی سازنده Bicycle حذف کنید:

var bike = Bicycle(2, 1);

b2f84ff91b0e1396.png موارد باقیمانده از speed را به _speed . (دو مکان)

b2f84ff91b0e1396.png Initialize _speed به 0:

int _speed = 0;

b2f84ff91b0e1396.png گیرنده زیر را به کلاس Bicycle اضافه کنید:

int get speed => _speed;

cf1e10b838bf60ee.png مشاهدات

  • هر متغیر (حتی اگر یک عدد باشد) یا باید مقداردهی اولیه شود یا با اضافه کردن ? به اعلان نوع آن
  • کامپایلر دارت حریم خصوصی کتابخانه را برای هر شناسه‌ای که پیشوند آن زیرخط باشد، اعمال می‌کند. حریم خصوصی کتابخانه به طور کلی به این معنی است که شناسه فقط در داخل فایل (نه فقط کلاس) که شناسه در آن تعریف شده است قابل مشاهده است.
  • به طور پیش فرض، دارت گیرنده ها و تنظیم کننده های ضمنی را برای همه متغیرهای نمونه عمومی فراهم می کند. شما نیازی به تعریف گیرنده یا تنظیم کننده خود ندارید، مگر اینکه بخواهید متغیرهای فقط خواندنی یا فقط نوشتنی را اعمال کنید، یک مقدار را محاسبه یا تأیید کنید، یا یک مقدار را در جای دیگری به روز کنید.
  • نمونه اصلی جاوا گیرنده ها و تنظیم کننده ها را برای cadence و gear ارائه می کرد. نمونه دارت به گیرنده‌ها و تنظیم‌کننده‌های واضح برای آن‌ها نیاز ندارد، بنابراین فقط از متغیرهای نمونه استفاده می‌کند.
  • می‌توانید با یک فیلد ساده مانند bike.cadence و بعداً آن را برای استفاده از گیرنده‌ها و تنظیم‌کننده‌ها تغییر دهید. API ثابت می ماند. به عبارت دیگر، رفتن از یک میدان به یک گیرنده و تنظیم کننده یک تغییر شکستن در دارت نیست.

اجرای سرعت را به عنوان یک متغیر نمونه فقط خواندنی به پایان برسانید

b2f84ff91b0e1396.png متدهای زیر را به کلاس Bicycle اضافه کنید:

void applyBrake(int decrement) {
  _speed -= decrement;
}

void speedUp(int increment) {
  _speed += increment;
}

نمونه نهایی Dart شبیه جاوا اصلی به نظر می رسد، اما در 23 خط به جای 40 فشرده تر است:

class Bicycle {
  int cadence;
  int _speed = 0;
  int get speed => _speed;
  int gear;

  Bicycle(this.cadence, this.gear);

  void applyBrake(int decrement) {
    _speed -= decrement;
  }

  void speedUp(int increment) {
    _speed += increment;
  }

  @override
  String toString() => 'Bicycle: $_speed mph';
}

void main() {
  var bike = Bicycle(2, 1);
  print(bike);
}

چالش ها و مسائل؟ کد خود را بررسی کنید .

3. از پارامترهای اختیاری استفاده کنید (به جای اضافه بار)

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

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

b2f84ff91b0e1396.png مثال Rectangle را در DartPad باز کنید.

یک سازنده مستطیل اضافه کنید

b2f84ff91b0e1396.png یک سازنده خالی و منفرد اضافه کنید که جایگزین هر چهار سازنده در مثال جاوا شود:

Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});

این سازنده از پارامترهای اختیاری با نام استفاده می کند .

cf1e10b838bf60ee.png مشاهدات

  • this.origin ، this.width ، و this.height از ترفند کوتاه نویسی برای تخصیص متغیرهای نمونه در داخل اعلان سازنده استفاده می کنند.
  • this.origin ، this.width ، و this.height پارامترهای نامگذاری شده اختیاری هستند. پارامترهای نامگذاری شده در پرانتزهای فرفری ( {} ) قرار می گیرند.
  • this.origin = const Point(0, 0) مقدار پیش فرض Point(0,0) را برای متغیر نمونه origin می کند. پیش فرض مشخص شده باید یک ثابت زمان کامپایل باشد. این سازنده مقادیر پیش فرض را برای هر سه متغیر نمونه ارائه می کند.

خروجی را بهبود بخشید

b2f84ff91b0e1396.png تابع toString() زیر را به کلاس Rectangle اضافه کنید:

@override
String toString() =>
      'Origin: (${origin.x}, ${origin.y}), width: $width, height: $height';

از سازنده استفاده کنید

b2f84ff91b0e1396.png main() با کد زیر جایگزین کنید تا مطمئن شوید که می توانید Rectangle را تنها با استفاده از پارامترهای مورد نیاز خود نمونه سازی کنید:

main() {
  print(Rectangle(origin: const Point(10, 20), width: 100, height: 200));
  print(Rectangle(origin: const Point(10, 10)));
  print(Rectangle(width: 200));
  print(Rectangle());
}

cf1e10b838bf60ee.png مشاهده

  • سازنده Dart برای Rectangle یک خط کد است، در مقایسه با 16 خط کد برای سازنده های معادل در نسخه جاوا.

مثال را اجرا کنید

شما باید خروجی زیر را ببینید:

Origin: (10, 20), width: 100, height: 200
Origin: (10, 10), width: 0, height: 0
Origin: (0, 0), width: 200, height: 0
Origin: (0, 0), width: 0, height: 0

چالش ها و مسائل؟ کد خود را بررسی کنید .

4. یک کارخانه ایجاد کنید

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

این مرحله دو راه را برای اجرای یک کارخانه ایجاد شکل نشان می دهد:

  • گزینه 1: یک تابع سطح بالا ایجاد کنید.
  • گزینه 2: یک سازنده کارخانه ایجاد کنید.

برای این تمرین، از مثال Shapes استفاده خواهید کرد که شکل ها را نمونه می کند و ناحیه محاسبه شده آنها را چاپ می کند:

import 'dart:math';

abstract class Shape {
  num get area;
}

class Circle implements Shape {
  final num radius;
  Circle(this.radius);
  num get area => pi * pow(radius, 2);
}

class Square implements Shape {
  final num side;
  Square(this.side);
  num get area => pow(side, 2);
}

main() {
  final circle = Circle(2);
  final square = Square(2);
  print(circle.area);
  print(square.area);
}

b2f84ff91b0e1396.png مثال Shapes را در DartPad باز کنید.

در قسمت کنسول، باید ناحیه های محاسبه شده یک دایره و یک مربع را ببینید:

12.566370614359172
4

cf1e10b838bf60ee.png مشاهدات

  • دارت از کلاس های انتزاعی پشتیبانی می کند.
  • شما می توانید چندین کلاس را در یک فایل تعریف کنید.
  • dart:math یکی از کتابخانه های اصلی دارت است. دیگر کتابخانه‌های اصلی عبارتند از dart:core ، dart:async ، dart:convert و dart:collection .
  • طبق قرارداد، ثابت‌های کتابخانه دارت lowerCamelCase هستند (برای مثال، pi به جای PI) . اگر در مورد استدلال کنجکاو هستید، به دستورالعمل سبک PREFER با استفاده از LowCamelCase برای نام های ثابت مراجعه کنید.
  • کد زیر دو گیرنده را نشان می دهد که یک مقدار را محاسبه می کنند: num get area => pi * pow(radius, 2); // Circle num get area => pow(side, 2); // Square

گزینه 1: یک تابع سطح بالا ایجاد کنید

b2f84ff91b0e1396.png با افزودن تابع زیر در بالاترین سطح (خارج از هر کلاس) یک کارخانه را به عنوان یک تابع سطح بالا پیاده کنید:

Shape shapeFactory(String type) {
  if (type == 'circle') return Circle(2);
  if (type == 'square') return Square(2);
  throw 'Can\'t create $type.';
}

b2f84ff91b0e1396.png با جایگزین کردن دو خط اول در متد main() تابع کارخانه را فراخوانی کنید:

  final circle = shapeFactory('circle');
  final square = shapeFactory('square');

مثال را اجرا کنید

خروجی باید مانند قبل باشد.

cf1e10b838bf60ee.png مشاهدات

  • اگر تابع با هر رشته ای غیر از 'circle' یا 'square' فراخوانی شود، یک استثنا ایجاد می کند.
  • Dart SDK کلاس‌هایی را برای بسیاری از استثناهای رایج تعریف می‌کند، یا می‌توانید کلاس Exception را برای ایجاد استثناهای خاص‌تر پیاده‌سازی کنید یا (مانند این مثال) می‌توانید رشته‌ای را پرتاب کنید که مشکل پیش‌آمده را توصیف می‌کند.
  • هنگامی که با یک استثنا مواجه می شوید، DartPad Uncaught را گزارش می کند. برای مشاهده اطلاعات مفیدتر، کد را در یک دستور try-catch بپیچید و استثنا را چاپ کنید. به عنوان یک تمرین اختیاری، این مثال DartPad را بررسی کنید.
  • برای استفاده از یک نقل قول منفرد در داخل یک رشته، یا با استفاده از اسلش از نقل قول جاسازی شده فرار کنید ( 'Can\'t create $type.' ) یا رشته را با دو گیومه مشخص کنید ( "Can't create $type." ).

چالش ها و مسائل؟ کد خود را بررسی کنید .

گزینه 2: یک سازنده کارخانه ایجاد کنید

از کلمه کلیدی factory دارت برای ایجاد یک سازنده کارخانه استفاده کنید.

b2f84ff91b0e1396.png یک سازنده کارخانه به کلاس Shape انتزاعی اضافه کنید:

abstract class Shape {
  factory Shape(String type) {
    if (type == 'circle') return Circle(2);
    if (type == 'square') return Square(2);
    throw 'Can\'t create $type.';
  }
  num get area;
}

b2f84ff91b0e1396.png برای نمونه سازی اشکال، دو خط اول main() را با کد زیر جایگزین کنید:

  final circle = Shape('circle');
  final square = Shape('square');

b2f84ff91b0e1396.png تابع shapeFactory() را که قبلا اضافه کرده اید حذف کنید.

cf1e10b838bf60ee.png مشاهده

  • کد موجود در سازنده کارخانه با کد استفاده شده در تابع shapeFactory() یکسان است.

چالش ها و مسائل؟ کد خود را بررسی کنید .

5. یک رابط پیاده سازی کنید

زبان دارت یک کلمه کلیدی interface را شامل نمی شود زیرا هر کلاس یک رابط را تعریف می کند .

b2f84ff91b0e1396.png مثال Shapes را در DartPad باز کنید (یا به استفاده از کپی خود ادامه دهید).

b2f84ff91b0e1396.png یک کلاس CircleMock اضافه کنید که رابط Circle را پیاده سازی می کند:

class CircleMock implements Circle {}

b2f84ff91b0e1396.png شما باید یک خطای "Missing konkret implements" را ببینید زیرا CircleMock اجرای Circle را به ارث نمی برد - فقط از رابط آن استفاده می کند. این خطا را با تعریف متغیرهای نمونه area و radius برطرف کنید:

class CircleMock implements Circle {
  num area = 0;
  num radius = 0;
}

cf1e10b838bf60ee.png مشاهده

  • حتی اگر کلاس CircleMock هیچ رفتاری را تعریف نمی کند، دارت معتبر است - تحلیلگر هیچ خطایی ایجاد نمی کند.
  • متغیر نمونه area CircleMock گیرنده area Circle را پیاده سازی می کند.

چالش ها و مسائل؟ کد خود را بررسی کنید .

6. از Dart برای برنامه نویسی کاربردی استفاده کنید

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

  • پاس توابع به عنوان آرگومان.
  • یک تابع به یک متغیر اختصاص دهید.
  • تابعی را که چندین آرگومان را به دنباله‌ای از توابع می‌برد که هر کدام یک آرگومان واحد را می‌گیرند (که به آن currying نیز می‌گویند) واسازی کنید.
  • یک تابع بی نام ایجاد کنید که می تواند به عنوان یک مقدار ثابت استفاده شود (که عبارت lambda نیز نامیده می شود؛ عبارات لامبدا در نسخه JDK 8 به جاوا اضافه شدند).

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

مثال زیر از کد امری (نه به سبک عملکردی) استفاده می کند:

String scream(int length) => "A${'a' * length}h!";

main() {
  final values = [1, 2, 3, 5, 10, 50];
  for (var length in values) {
    print(scream(length));
  }
}

b2f84ff91b0e1396.png مثال Scream را در DartPad باز کنید.

خروجی باید به شکل زیر باشد:

Aah!
Aaah!
Aaaah!
Aaaaaah!
Aaaaaaaaaaah!
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!

cf1e10b838bf60ee.png مشاهده

  • هنگام استفاده از درون یابی رشته ای، رشته ${'a' * length} به "کاراکتر 'a' بارهای length تکرار شده ارزیابی می شود.

کد دستوری را به تابعی تبدیل کنید

b2f84ff91b0e1396.png حلقه اجباری for() {...} را در main() حذف کنید و آن را با یک خط کد که از زنجیره متد استفاده می کند جایگزین کنید:

  values.map(scream).forEach(print);

مثال را اجرا کنید

رویکرد کاربردی همان شش فریاد را به عنوان مثال ضروری چاپ می کند.

چالش ها و مسائل؟ کد خود را بررسی کنید .

از ویژگی های تکرارپذیر بیشتری استفاده کنید

کلاس های اصلی List و Iterable از fold() ، where() ، join() ، skip() و موارد دیگر پشتیبانی می کنند. دارت همچنین دارای پشتیبانی داخلی برای نقشه ها و مجموعه ها است.

b2f84ff91b0e1396.png خط values.map() را در main() با زیر جایگزین کنید:

  values.skip(1).take(3).map(scream).forEach(print);

مثال را اجرا کنید

خروجی باید به شکل زیر باشد:

Aaah!
Aaaah!
Aaaaaah!

cf1e10b838bf60ee.png مشاهدات

  • skip(1) از اولین مقدار، 1، در لیست values به معنای واقعی کلمه عبور می کند.
  • take(3) 3 مقدار بعدی 2، 3 و 5 را در لیست values تحت اللفظی دریافت می کند.
  • مقادیر باقیمانده نادیده گرفته می شوند.

چالش ها و مسائل؟ کد خود را بررسی کنید .

7. تبریک می گویم!

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

مراحل بعدی

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

اگر می‌خواهید فن‌آوری‌های Dart را در عمل ببینید، کدهای Flutter را امتحان کنید.

بیشتر بدانید

با مقالات، منابع و وب سایت های زیر می توانید اطلاعات بیشتری در مورد دارت بیاموزید.

مقالات

منابع

وب سایت ها