Dart چیست؟ آموزش کامل و جامع Dart
فهرست مطالب
Dart چیست؟
Dart یک زبان برنامهنویسی چندمنظوره، شیگرا و منبعباز است که توسط Google توسعه داده شده است. این زبان بهویژه برای ساخت اپلیکیشنهای موبایل، وب و دسکتاپ با استفاده از فریمورک Flutter طراحی شده است.
void main() {
String name = 'دارت';
print('سلام $name!');
// تعریف یک کلاس ساده
class Person {
String name;
int age;
Person(this.name, this.age);
void introduce() {
print('من $name هستم و $age سال دارم.');
}
}
}
تاریخچه Dart
Dart در سال 2011 توسط Google معرفی شد. هدف اصلی از توسعه این زبان، ارائه جایگزینی مدرن برای JavaScript بود. اما با گذر زمان، Dart به یک زبان همهکاره تبدیل شد که بیشترین کاربرد آن در توسعه اپلیکیشنهای موبایل با Flutter است.
ساختار پایه Dart
هر برنامه Dart از یک یا چند فایل با پسوند .dart تشکیل شده است. هر فایل Dart شامل تعاریف کلاسها، توابع، متغیرها و یک تابع main() است که نقطه شروع برنامه میباشد.
// تعریف متغیرهای سراسری
const String appName = 'My Dart App';
// تعریف یک کلاس
class User {
final String name;
final int age;
User(this.name, this.age);
}
// تابع اصلی برنامه
void main() {
var user = User('علی', 25);
print('برنامه $appName');
print('کاربر: ${user.name}');
}
ویژگیهای اصلی Dart
سیستم تایپ قوی
Dart دارای سیستم تایپ قوی است که هم از type inference و هم از type annotation پشتیبانی میکند.
// Type inference
var name = 'علی'; // String
var age = 25; // int
// Type annotation
String title = 'مهندس';
int score = 100;
// Generic types
List names = ['علی', 'مریم', 'رضا'];
Map scores = {'علی': 95, 'مریم': 98};
Null Safety
از نسخه 2.12، Dart از sound null safety پشتیبانی میکند که به جلوگیری از خطاهای null reference کمک میکند.
// متغیر non-nullable
String name = 'علی';
// name = null; // خطا
// متغیر nullable
String? nullableName;
nullableName = null; // مجاز
// استفاده از عملگر ?
print(nullableName?.length); // null اگر nullableName برابر با null باشد
نحو و دستورات پایه Dart
متغیرها و انواع داده
// انواع اصلی داده
int age = 25;
double height = 1.75;
String name = 'علی';
bool isStudent = true;
// لیستها
List numbers = [1, 2, 3, 4, 5];
// مپها
Map info = {
'name': 'علی',
'city': 'تهران'
};
کنترل جریان برنامه
// if else
if (age >= 18) {
print('بزرگسال');
} else {
print('کودک');
}
// for loop
for (var i = 0; i < 5; i++) {
print(i);
}
// while loop
while (condition) {
// کد
}
// switch case
switch (grade) {
case 'A':
print('عالی');
break;
case 'B':
print('خوب');
break;
default:
print('نامشخص');
}
شیگرایی در Dart
Dart یک زبان شیگرا است که از تمام ویژگیهای اصلی برنامهنویسی شیگرا پشتیبانی میکند.
// تعریف یک کلاس پایه
abstract class Animal {
String name;
Animal(this.name);
void makeSound();
}
// کلاس مشتق شده
class Cat extends Animal {
Cat(String name) : super(name);
@override
void makeSound() {
print('میو میو');
}
}
// استفاده از interface
class Flyable {
void fly() {
print('در حال پرواز');
}
}
// میکسین
mixin Swimming {
void swim() {
print('در حال شنا');
}
}
برنامهنویسی ناهمگام در Dart
Dart از برنامهنویسی ناهمگام با استفاده از Future و async/await پشتیبانی میکند.
// تعریف یک تابع ناهمگام
Future fetchUserData() async {
// شبیهسازی درخواست شبکه
await Future.delayed(Duration(seconds: 2));
return 'دادههای کاربر';
}
// استفاده از تابع ناهمگام
void main() async {
print('در حال دریافت داده...');
String data = await fetchUserData();
print('داده دریافت شد: $data');
}
// کار با Stream
Stream countStream() async* {
for (int i = 1; i <= 5; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
Dart و Flutter
Flutter فریمورک اصلی برای توسعه اپلیکیشن با Dart است که امکان ساخت اپلیکیشنهای موبایل، وب و دسکتاپ را فراهم میکند.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('برنامه من'),
),
body: Center(
child: Text('سلام دنیا!'),
),
),
);
}
}
مدیریت پکیجها در Dart
Dart از سیستم مدیریت پکیج قدرتمندی به نام pub استفاده میکند. pub.dev مخزن رسمی پکیجهای Dart و Flutter است.
name: my_app
description: A new Flutter project
version: 1.0.0
dependencies:
flutter:
sdk: flutter
http: ^0.13.0
shared_preferences: ^2.0.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
دستورات مهم pub
- pub get: نصب همه وابستگیها
- pub upgrade: بهروزرسانی پکیجها
- pub outdated: نمایش پکیجهای قدیمی
- pub publish: انتشار پکیج در pub.dev
بهترین شیوههای کدنویسی Dart
قواعد نامگذاری
// نام کلاسها: PascalCase
class UserAccount { }
// نام متغیرها و توابع: camelCase
String userName = 'علی';
void calculateTotal() { }
// نام ثابتها: SCREAMING_SNAKE_CASE
const int MAX_LOGIN_ATTEMPTS = 3;
// نام فایلها: snake_case
// user_account.dart
ساختار کد
- استفاده از effective_dart برای پیروی از قواعد استاندارد
- جداسازی منطق کسبوکار از رابط کاربری
- استفاده از کامنتهای مناسب برای مستندسازی کد
- رعایت اصل SOLID در برنامهنویسی شیگرا
ابزارهای مفید برای کار با Dart
محیطهای توسعه (IDE)
- Android Studio با پلاگین Dart و Flutter
- VS Code با افزونههای Dart و Flutter
- IntelliJ IDEA با پلاگین Dart
ابزارهای تحلیل کد
- dart analyze: تحلیل استاتیک کد
- dart fix: اصلاح خودکار مشکلات کد
- dart format: فرمتدهی خودکار کد
- dartdoc: تولید مستندات API
منابع یادگیری Dart
منابع رسمی
- مستندات رسمی Dart
- کدلبهای رسمی Dart
- مخزن پکیجهای Dart
دورههای آنلاین
- دورههای Dart در Udemy
- دورههای Dart در Coursera
- دورههای Dart در Pluralsight
کتابهای مفید
- Dart Apprentice
- Programming in Dart
- Dart in Action