Dart: bu nədir, Flutter dilinin xüsusiyyətləri və proqramlaşdırma

Müəllif: IT Sectr Dərc olunub: 2026-02-10 Oxuma vaxtı: 12 dəq

Dart — Google tərəfindən yaradılmış, xüsusilə çoxplatformalı Flutter freymvorku üçün nəzərdə tutulmuş proqramlaşdırma dilidir. O, sürətli isti yenidən yükləmə üçün JIT-kompilyasiya və release versiyalarında native performans üçün AOT-kompilyasiyanı birləşdirir. Dart təkcə mobil inkişafda deyil, həm də veb-tətbiqlərdə (AngularDart) və server həllərində istifadə olunur. Dilin imkanları haqqında daha ətraflı rəsmi Dart sənədləşməsində oxuyun.

Əsas məqamlar

  • Dart — Google tərəfindən yaradılmış Flutter dili, JIT/AOT kompilyasiyası ilə
  • Null safety — Dart 2.12-dən etibarən sound null safety null xətalarının olmamasını təmin edir
  • Isolate — paylaşılan yaddaş olmadan izolə edilmiş axınlar vasitəsilə paralellik
  • Flutter — vidjetləri Skia/Impeller vasitəsilə render edən UI freymvorku
  • Pub.dev — Dart və Flutter üçün 45 000+ kitabxanası olan paket meneceri

Dart nədir?

Dart — C-bənzər sintaksisə malik, Google şirkəti tərəfindən Lars Bakkın (Eclipse yaradıcısı) rəhbərliyi altında hazırlanmış proqramlaşdırma dilidir. İlk buraxılış 2011-ci ildə baş tutdu, lakin Dart əsl populyarlığı 2018-ci ildə Flutter 1.0-ın çıxması ilə qazandı. Dil istifadəçi interfeyslərinin yaradılması üçün nəzərdə tutulub: o, stream-lər, future-lar və reaktiv nümunələr üçün daxili dəstəyə malikdir.

Dart fəlsəfəsi — "performans və məhsuldarlıq balansı". Dil iki kompilyasiya strategiyasını dəstəkləyir: isti yenidən yükləmə ilə inkişaf üçün JIT (Just-In-Time) və native performansla release versiyaları üçün AOT (Ahead-Of-Time). JIT-kompilyator dəyişdirilmiş kodu işləyən tətbiqə millisaniyələr ərzində yerləşdirir, APK-nın yenidən kompilyasiyasını tələb etmir — bu, Dart-ın mobil inkişaf kontekstində digər dillərə nisbətən əsas üstünlüyüdür.

Dart-ın əsas xüsusiyyəti — Dart 2.12-də (2021) tətbiq edilmiş sound null safety-dir. Tip sistemi zəmanət verir ki, dəyişən açıq göstəriş olmadan (int?) null ola bilməz. Bu, NullPointerException-ı kompilyasiya mərhələsində aradan qaldırır. Google məlumatlarına görə, null safety-nin tətbiqi Flutter tətbiqlərində qəzaların sayını production mühitində 30% azaldıb.

Dart ekosistemi

Dart ekosistemi üç əsas istiqaməti əhatə edir: Flutter (mobil və masaüstü tətbiqlər), AngularDart (veb-tətbiqlər) və Dart Server (server həlləri). Flutter — dominant platformadır: Statista (2025) məlumatlarına görə, Flutter çoxplatformalı mobil layihələrin 46%-də istifadə olunur, React Native (38%) və Xamarin-i (8%) qabaqlayır.

Dart sintaksisi: tiplər, funksiyalar və siniflər

Dart sintaksisi Java və JavaScript-i xatırladır, lakin özünəməxsus konstruksiyalara malikdir. Dart-da hər şey obyektdir — hətta int, double və bool Object-dən miras alır. Tipləmə isteğe bağlıdır: var kimi elan edilmiş dəyişən tipi avtomatik çıxarır, lakin oxunaqlılıq və performans üçün tipləri açıq göstərmək tövsiyə olunur.

Əsas tiplər və elanlar

Dart int, double, String, bool, List, Set, Map, Record, Symbol və Runes-i dəstəkləyir. Nullable tip — ? suffiksi olan istənilən tip (int?, String?). ?? operatoru (null-aware) solda null olarsa sağdakı dəyəri qaytarır. Kaskad notasiyası (..) bir obyektdə referansı təkrarlamadan bir neçə metodu çağırmağa imkan verir.

dart
// Dart-da əsas tiplər və elanlar
void main() {
  // Açıq tipləmə
  int age = 25;
  double price = 19.99;
  String name = 'Dart';
  bool isValid = true;

  // Null safety — dəyişən null ola bilər
  int? nullableAge = null;
  int result = nullableAge ?? 0; // Null-aware operatoru

  // Generiklərlə kolleksiyalar
  List<String> items = ['Dart', 'Flutter', 'Mobile'];
  Map<String, dynamic> config = {
    'version': '3.0',
    'mode': 'debug',
  };

  // Kaskad notasiyası
  final list = <String>[]
    ..add('one')
    ..add('two')
    ..sort();
}

// Record — anonim dəyişməz tip
(String, int) user = ('Alice', 30);
print(user.$1); // 'Alice'

dynamic tipi tip yoxlamasını söndürür — onu yalnız JSON və ya dinamik məlumatlarla işləyərkən istifadə edin. Record — Dart 3.0-da yeni tip, ayrıca sinif yaratmadan dəyərləri qruplaşdırmağa imkan verir. Null-aware operator ?? — nullable dəyərlərlə işləməyin standart üsulu, uzun if-else yoxlamalarını əvəz edir.

Siniflər və miksinlər

Dart-da siniflər — tək irs (extends), miksinlər vasitəsilə çoxsaylı (mixin). Dart interfeysləri ayrıca konsepsiya kimi dəstəkləmir — istənilən sinif implementasiya edilə bilər (implements). Miksin — konstruktoru olmayan sinif, metodları və sahələri with açar sözü vasitəsilə istənilən sinifə əlavə edilə bilər.

dart
// Dart-da siniflər, irs və miksinlər
abstract class Animal {
  void sound(); // abstrakt metod
}

mixin Swimmer {
  void swim() => print('Swimming...');
}

mixin Flyer {
  void fly() => print('Flying...');
}

class Duck extends Animal with Swimmer, Flyer {
  @override
  void sound() => print('Quack!');
}

void main() {
  final duck = Duck();
  duck.sound(); // Quack!
  duck.swim();  // Swimming...
  duck.fly();   // Flying...
}

// Adlandırılmış konstruktor
class Config {
  final String env;

  Config.development() : env = 'dev';
  Config.production()  : env = 'prod';
}

Duck sinifi Animal-dan miras alır və iki miksin — Swimmer və Flyer istifadə edir. Bu, rombvari struktur problemləri olmadan çoxsaylı irsi nümayiş etdirir: miksinlər xətti şəkildə həll olunur (super chain). Adlandırılmış konstruktorlar (Config.development) — əvvəlcədən təyin edilmiş parametrlərlə obyektlər yaratmaq üçün statik fabrik metodlarına alternativdir.

Dart-da asinxronluq: Future, Stream və async/await

Dart-da asinxronluq Future (tək dəyər), Stream (dəyərlər ardıcıllığı) və async/await vasitəsilə həyata keçirilir. Dart JavaScript-ə bənzər tək axınlı event loop modelindən istifadə edir, lakin vacib fərqlə: uzunmüddətli hesablamalar UI-ni bloklamır, çünki Dart kodu Isolate-də — paylaşılan yaddaş olmadan ayrıca axında icra olunur.

Future bir müddətdən sonra tamamlanacaq asinxron əməliyyatı təmsil edir. Future pending (gözləmə), completed with value (uğur) və ya completed with error (xəta) vəziyyətində ola bilər. .then().catchError() zənciri — async/await-a alternativdir, lakin oxunaqlılıq üçün await istifadə etmək tövsiyə olunur.

dart
// Future və Stream ilə asinxron məlumat yükləmə
import 'dart:convert';
import 'package:http/http.dart' as http;

class ApiService {
  final String baseUrl;

  ApiService(this.baseUrl);

  // Tək sorğu üçün Future
  Future<Map<String, dynamic>> fetchUser(int id) async {
    final response = await http.get(
      Uri.parse('$baseUrl/users/$id'),
    );

    if (response.statusCode == 200) {
      return jsonDecode(response.body);
    } else {
      throw Exception('Failed to load user: ${response.statusCode}');
    }
  }

  // Məlumat ardıcıllığı üçün Stream
  Stream<int> countStream(int max) async* {
    for (var i = 1; i <= max; i++) {
      await Future.delayed(Duration(seconds: 1));
      yield i;
    }
  }
}

void main() async {
  final api = ApiService('https://api.example.com');

  // await istifadəsi
  final user = await api.fetchUser(1);
  print('User: ${user['name']}');

  // Stream-in await for ilə işlənməsi
  await for (final count in api.countStream(5)) {
    print('Count: $count');
  }
}

ApiService sinifi iki növ asinxronluğu nümayiş etdirir: HTTP sorğusu üçün Future (bir cavab) və ardıcıl sayğac üçün Stream (async* və yield ilə generator). Stream sensorlar, geolokasiya, Firebase Realtime Database ilə işləmək üçün effektivdir — məlumatların fasiləsiz daxil olduğu hər yerdə. Isolate ayrıca yaddaşdan istifadə edir — məlumatlar SendPort/ReceivePort vasitəsilə ötürülür.

Dart və Flutter: tətbiq arxitekturası

Dart və Flutter vahid stack təşkil edir: Flutter — UI freymvorku, Dart — UI təsviri dili. Flutter-də hər şey vidjetdir (Widget) — düymədən tutmuş bütün tətbiqə qədər. Vidjetlər stateful (dəyişən vəziyyətli) və stateless (dəyişməz) olur. Dart deklarativ UI-ni təsvir edir: build() Flutter-in Skia (və ya iOS-da Impeller) vasitəsilə render etdiyi vidjet ağacını qaytarır.

Flutter tətbiqinin strukturu

Flutter tətbiqi Dart-da main() → runApp(MyApp()) → MaterialApp-dən ibarətdir. MaterialApp marşrutlaşdırma (routes), mövzu (theme) və lokalizasiyanı əhatə edir. Hər ekran — AppBar, Body (adətən Column/ListView) və BottomNavigationBar olan Scaffold-dur. Navigator.push/pop və ya adlandırılmış marşrutlar vasitəsilə naviqasiya.

dart
// Dart-da sadə Flutter tətbiqi
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Dart Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int _counter = 0;

  void _increment() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Dart + Flutter')),
      body: Center(
        child: Text('Counter: $_counter'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _increment,
        child: Icon(Icons.add),
      ),
    );
  }
}

HomeScreen vidjeti — daxili _counter vəziyyəti olan StatefulWidget. setState() çağırışı Flutter-ə UI-ni yenidən qurmaq zərurəti barədə məlumat verir — Dart kodu build()-i yenidən işə salır, yeni vidjet ağacı yaradır. Flutter köhnə və yeni ağacı effektiv müqayisə edir (diff), ekranın yalnız dəyişmiş hissələrini yeniləyir. Hot Reload _counter vəziyyətini sıfırlamadan build()-i əvəz edir.

Dart kompilyasiyası: JIT vs AOT

Dart kompilyasiyası — hibrid: inkişaf üçün JIT və istehsal üçün AOT. Debug rejimində Dart VM kodu isti dəyişdirmə imkanı ilə bayt-kodu şərh edən JIT-kompilyatoru işə salır. Release-də dart compile exe və ya flutter build müəyyən arxitektura (arm64, x86_64, armv7) üçün native AOT binar faylı yaradır.

RejimKompilyasiyaİcra sürətiBinar ölçüsüHot Reload
DebugJIT (VM)Orta~50 MBBəli
ReleaseAOT (Native)Maksimal~15-20 MBXeyr
Webdart2jsBrauzerdən asılıdırDəyişkənDev-server

Dart-ın debug rejimində JIT-kompilyasiyası ~1 saniyə ərzində isti yenidən yükləməni təmin edir — tərtibatçı tətbiqin vəziyyətini itirmədən UI dəyişikliklərini görür. AOT-kompilyasiyası native Swift/Kotlin tətbiqlərinə yaxın performans verir. Google məlumatlarına görə, Dart AOT-da Flutter orta seqment cihazlarında belə 60 FPS animasiyaya nail olur.

Dart tərtibatçısının alətləri

Dart tərtibatçısının alətləri Dart SDK (dart kompilyatoru, dartanalyzer, dartfmt, pub), Flutter SDK və IDE plaginlərini əhatə edir. Dart SDK Flutter SDK ilə birlikdə flutter/bin/cache/dart-sdk qovluğunda quraşdırılır. Pub — paket meneceri, pubspec.yaml faylını oxuyur və asılılıqları pub.dev-dən endirir.

Əsas alətlər

dart analyze — tipləri, istifadə olunmayan importları və potensial xətaları yoxlayan statik analizator. dart format — kodu vahid stilə avtomatik uyğunlaşdıran formatlayıcı. dart doc — /// şərhlərindən sənədləşmə generatoru. Flutter DevTools — vidjet ağacına, loglara, yaddaşa və şəbəkəyə baxış imkanı olan profiler. Dart VM Service — WebSocket vasitəsilə işləyən tətbiqin debug edilməsi.

yaml
# pubspec.yaml — Dart layihəsinin konfiqurasiyası
name: my_flutter_app
description: A new Flutter project.
version: 1.0.0

environment:
  sdk: '>=3.0.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0
  provider: ^6.1.0
  shared_preferences: ^2.2.0
  json_annotation: ^4.8.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.0
  json_serializable: ^6.7.0
  flutter_lints: ^3.0.0

pubspec.yaml faylı Dart layihəsinin asılılıqlarını təsvir edir. environment:sdk sahəsi Dart versiyasını təyin edir — cari stabil 3.x. Dependencies — əsas kitabxanalar, dev_dependencies — test və kod generasiyası üçün. json_annotation + json_serializable build_runner vasitəsilə JSON serializasiyası üçün kod yaradır. flutter_lints — analizator üçün qaydalar dəsti.

Tez-tez verilən suallar

Dart nədir?

Dart — Google tərəfindən (2011) Flutter-də çoxplatformalı inkişaf üçün hazırlanmış proqramlaşdırma dilidir. C-bənzər sintaksisi, sərt tipləmə, JIT və AOT kompilyasiyasını dəstəkləyir. Sound null safety (Dart 2.12-dən) və Future və Stream vasitəsilə asinxronluq ilə fərqlənir. Mobil, veb və masaüstü tətbiqlər üçün istifadə olunur.

Dart JavaScript-dən nə ilə fərqlənir?

Dart native koda (AOT) və ya JS-ə (dart2js) kompilyasiya olunur, JavaScript isə interpretasiya olunur. Dart sound null safety ilə sərt tipləməyə, daxili siniflərə və miksinlərə malikdir. Dart-ın asinxronluğu Isolate-ə (paylaşılan yaddaşsız ayrıca axınlar) əsaslanır, JS — Web Workers ilə event loop-a. Dart AOT performansı mobil ssenarilərdə V8 JIT-dən 30-50% yüksəkdir.

Dart mobil tətbiqə necə kompilyasiya olunur?

Dart Dart Native vasitəsilə AOT ilə native ARM koduna kompilyasiya olunur. Debug rejimində Dart VM isti yenidən yükləmə ilə JIT istifadə edir. Flutter Engine (C++) UI-ni Skia/Impeller vasitəsilə render edir. Android üçün — flutter build apk, iOS üçün — flutter build ios. Veb yığması dart2js və ya dart2wasm istifadə edir. Release APK ölçüsü — 15-20 MB (AAB bölgüsü olmadan).

Dart hansı məlumat tiplərini dəstəkləyir?

Dart primitiv tipləri dəstəkləyir: int, double, String, bool. Koleksiyalar: List, Set, Map, Record. Xüsusi: Symbol, Runes, Null. Hər şey obyektdir, o cümlədən primitivlər. Null safety: int? tipi null-a icazə verir, int — heç vaxt null. ??, ??= operatorları null ilə təhlükəsiz iş üçün. Generiklər: List<String>, Map<String, dynamic>.

Dart inkişafı üçün hansı alətlər lazımdır?

Flutter SDK Dart SDK, Flutter Engine və vidjet kitabxanasını əhatə edir. IDE — Flutter plaginli Android Studio və ya VS Code. DevTools — vidjet inspektoru olan profiler. Pub.dev — 45 000+ kitabxanası olan paket meneceri. dart analyze analizatoru və dart format formatlayıcısı — kod keyfiyyəti üçün. Build_runner — JSON modellərinin generasiyası üçün.

Nəticə

  • Dart — JIT inkişafı və AOT performansını birləşdirən Google-un Flutter üçün dili
  • Sound null safety Dart 2.12-dən (+3.0) — tip səviyyəsində null-dan məcburi qorunma
  • Asinxronluq Future (tək nəticə), Stream (ardıcıllıq), Isolate (paralellik) vasitəsilə
  • Flutter — hər şeyin vidjet olduğu deklarativ UI freymvorku (StatelessWidget / StatefulWidget)
  • Hot Reload — tətbiq vəziyyətini itirmədən ~1 saniyədə JIT yenidən yükləmə
  • Pub.dev — pubspec.yaml vasitəsilə idarə olunan paket ekosistemi (45 000+)
  • Flutter DevTools — vidjet, yaddaş və şəbəkə inspektoru olan profiler

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun