Dart: nedir, Flutter dilinin özellikleri ve programlama

Yazar: IT Sectr Yayınlanma: 2026-02-10 Okuma süresi: 12 dk

Dart, Google tarafından özellikle platformlar arası Flutter framework'ü için oluşturulmuş bir programlama dilidir. Yıldırım hızında sıcak yeniden yükleme için JIT derlemesini ve sürüm yapılarında native performans için AOT derlemesini birleştirir. Dart yalnızca mobil geliştirmede değil, aynı zamanda web uygulamaları (AngularDart) ve sunucu tarafı çözümleri için de kullanılır. Dilin yetenekleri hakkında daha fazla bilgi için resmi Dart dokümantasyonuna bakın.

Önemli noktalar

  • Dart — Google tarafından oluşturulan Flutter dili, JIT/AOT derlemesiyle
  • Null safety — Dart 2.12'den itibaren sound null safety, null hatalarını garanti eder
  • Isolate — paylaşımlı bellek olmadan izole iş parçacıklarıyla paralellik
  • Flutter — Widget'ları Skia/Impeller aracılığıyla render eden UI framework'ü
  • Pub.dev — Dart ve Flutter için 45.000'den fazla kütüphaneye sahip paket yöneticisi

Dart nedir?

Dart, C benzeri sözdizimine sahip, Google tarafından Lars Bak (öncüsü Eclipse'in yaratıcısı) öncülüğünde geliştirilmiş bir programlama dilidir. İlk sürüm 2011'de yayımlandı, ancak Dart asıl popülerliğini 2018'de Flutter 1.0'ın piyasaya sürülmesiyle kazandı. Dil, kullanıcı arayüzleri oluşturmak için tasarlanmıştır: stream'ler, future'lar ve reaktif desenler için yerleşik desteğe sahiptir.

Dart'ın felsefesi «performans ve üretkenlik dengesi»dir. Dil iki derleme stratejisini destekler: sıcak yeniden yükleme ile geliştirme için JIT (Just-In-Time) ve native performansla sürüm yapıları için AOT (Ahead-Of-Time). JIT derleyicisi, APK yeniden derlemesi gerektirmeden milisaniyeler içinde çalışan bir uygulamaya değiştirilmiş kod enjekte eder — mobil geliştirmede Dart'ın diğer dillere göre temel avantajı budur.

Dartın temel özelliği, Dart 2.12'de (2021) tanıtılan sound null safety'dir. Tür sistemi, bir değişkenin açık bildirim (int?) olmadan null olamayacağını garanti eder. Bu, derleme zamanında NullPointerException'ı ortadan kaldırır. Google'a göre, null safety benimsenmesi üretim ortamlarında Flutter uygulamalarındaki çökme oranlarını %30 azalttı.

Dart ekosistemi

Dart ekosistemi üç ana alanı içerir: Flutter (mobil ve masaüstü uygulamalar), AngularDart (web uygulamaları) ve Dart Server (sunucu tarafı çözümleri). Flutter baskın platformdur: Statista'ya (2025) göre Flutter, platformlar arası mobil projelerin %46'sında kullanılmakta olup React Native (%38) ve Xamarin'in (%8) önündedir.

Dart sözdizimi: türler, işlevler ve sınıflar

Dart sözdizimi Java ve JavaScript'e benzer ancak kendine özgü yapıları vardır. Dart'ta her şey bir nesnedir — int, double ve bool bile Object'ten miras alır. Tür belirtme isteğe bağlıdır: var olarak bildirilen bir değişken türü otomatik olarak çıkarır, ancak okunabilirlik ve performans için türlerin açıkça belirtilmesi önerilir.

Temel türler ve bildirimler

Dart int, double, String, bool, List, Set, Map, Record, Symbol ve Runes'u destekler. Nullable türü — ? sonekiyle herhangi bir tür (int?, String?). ?? operatörü (null-aware), sol taraftaki null ise sağdaki değeri döndürür. Basamaklı gösterim (..), referansı tekrarlamadan aynı nesne üzerinde birden çok metodu çağırmaya olanak tanır.

dart
// Dart'ta temel türler ve bildirimler
void main() {
  // Açık tür belirtme
  int age = 25;
  double price = 19.99;
  String name = 'Dart';
  bool isValid = true;

  // Null safety — değişken null olabilir
  int? nullableAge = null;
  int result = nullableAge ?? 0; // null-aware operatörü

  // Genel türlerle koleksiyonlar
  List<String> items = ['Dart', 'Flutter', 'Mobile'];
  Map<String, dynamic> config = {
    'version': '3.0',
    'mode': 'debug',
  };

  // Basamaklı gösterim
  final list = <String>[]
    ..add('one')
    ..add('two')
    ..sort();
}

// Record — anonim değişmez tür
(String, int) user = ('Alice', 30);
print(user.$1); // 'Alice'

dynamic türü tür denetimini devre dışı bırakır — yalnızca JSON veya dinamik verilerle çalışırken kullanın. Record, Dart 3.0'da ayrı bir sınıf oluşturmadan değerleri gruplamaya izin veren yeni bir türdür. Null-aware operatörü ??, uzun if-else denetimlerinin yerine geçerek nullable değerlerle çalışmanın standart yoludur.

Sınıflar ve mixin'ler

Dart'ta sınıflar — tekli kalıtım (extends), mixin'ler (mixin) aracılığıyla çoklu kalıtım. Dart, arayüzleri ayrı bir kavram olarak desteklemez — herhangi bir sınıf uygulanabilir (implements). Mixin, yapıcısı olmayan ve metotları ile alanları with anahtar sözcüğü kullanılarak herhangi bir sınıfa eklenebilen bir sınıftır.

dart
// Dart'ta sınıflar, kalıtım ve mixin'ler
abstract class Animal {
  void sound(); // soyut metot
}

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ış yapıcı
class Config {
  final String env;

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

Duck sınıfı, Animal'dan miras alır ve iki mixin kullanır — Swimmer ve Flyer. Bu, elmas problemi olmadan çoklu kalıtımı gösterir: mixin'ler doğrusal olarak çözülür (super chain). Adlandırılmış yapıcılar (Config.development), önceden ayarlanmış parametrelerle nesneler oluşturmak için statik fabrika metotlarına bir alternatiftir.

Dart'ta eşzamansızlık: Future, Stream ve async/await

Dart'ta eşzamansızlık, Future (tek değer), Stream (değer dizisi) ve async/await aracılığıyla uygulanır. Dart, JavaScript'e benzer bir olay döngüsüne sahip tek iş parçacıklı bir model kullanır, ancak önemli bir farkla: uzun hesaplamalar UI'yı engellemez çünkü Dart kodu bir Isolate'de — paylaşımlı bellek olmadan ayrı bir iş parçacığında çalışır.

Future, bir süre sonra tamamlanacak olan eşzamansız bir işlemi temsil eder. Bir Future beklemede, değerle tamamlanmış veya hatayla tamamlanmış durumda olabilir. .then().catchError() zinciri async/await'e bir alternatiftir, ancak okunabilirlik için await kullanılması önerilir.

dart
// Future ve Stream ile eşzamansız veri yükleme
import 'dart:convert';
import 'package:http/http.dart' as http;

class ApiService {
  final String baseUrl;

  ApiService(this.baseUrl);

  // Tek istek için 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}');
    }
  }

  // Veri dizisi için 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 kullanımı
  final user = await api.fetchUser(1);
  print('User: ${user['name']}');

  // await for ile Stream işleme
  await for (final count in api.countStream(5)) {
    print('Count: $count');
  }
}

ApiService sınıfı iki tür eşzamansızlığı gösterir: HTTP isteği için Future (tek yanıt) ve sıralı sayaç için Stream (async* ve yield ile üreteç). Stream, sensörler, coğrafi konum, Firebase Realtime Database ile çalışmak için etkilidir — verilerin sürekli olarak geldiği her yerde. Isolate ayrı bellek kullanır — veriler SendPort/ReceivePort aracılığıyla iletilir.

Dart ve Flutter: uygulama mimarisi

Dart ve Flutter tek bir yığın oluşturur: Flutter UI framework'üdür, Dart ise UI tanımlama dilidir. Flutter'da her şey bir widget'tır — bir düğmeden tüm bir uygulamaya kadar. Widget'lar stateful (değişebilir durumlu) ve stateless (değişmez) olabilir. Dart bildirimsel UI'yı tanımlar: build(), Flutter'ın Skia (veya iOS'ta Impeller) kullanarak render ettiği bir widget ağacı döndürür.

Flutter uygulama yapısı

Dart'ta Flutter uygulaması main() → runApp(MyApp()) → MaterialApp'ten oluşur. MaterialApp, yönlendirme (routes), tema (theme) ve yerelleştirmeyi içerir. Her ekran, AppBar, Body (genellikle Column/ListView) ve BottomNavigationBar içeren bir Scaffold'tur. Navigator.push/pop veya adlandırılmış route'lar aracılığıyla gezinme.

dart
// Dart'ta basit Flutter uygulaması
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 widget'ı, iç durumu _counter olan bir StatefulWidget'tır. setState() çağrısı, Flutter'a UI'yı yeniden oluşturmasını bildirir — Dart kodu build()'u yeniden çalıştırarak yeni bir widget ağacı oluşturur. Flutter, eski ve yeni ağacı verimli bir şekilde karşılaştırır (diff) ve ekranın yalnızca değişen kısımlarını günceller. Hot Reload, _counter durumunu sıfırlamadan build()'u değiştirir.

Dart derlemesi: JIT vs AOT

Dart derlemesi hibrittir: geliştirme için JIT ve üretim için AOT. Hata ayıklama modunda, Dart VM, kodun sıcak değişimi yeteneğiyle bayt kodunu yorumlayan bir JIT derleyicisi çalıştırır. Sürüm modunda, dart compile exe veya flutter build belirli bir mimari için (arm64, x86_64, armv7) native bir AOT ikili dosyası oluşturur.

ModDerlemeYürütme hızıİkili dosya boyutuSıcak yeniden yükleme
DebugJIT (VM)Orta~50 MBEvet
ReleaseAOT (Native)Maksimum~15-20 MBHayır
Webdart2jsTarayıcıya bağlıDeğişkenGeliştirme sunucusu

Hata ayıklama modunda Dart JIT derlemesi, yaklaşık 1 saniyede sıcak yeniden yükleme sağlar — geliştiriciler uygulama durumunu kaybetmeden UI değişikliklerini görür. AOT derlemesi, native Swift/Kotlin uygulamalarına yakın performans sunar. Google'a göre, Dart AOT üzerinde Flutter, orta segment cihazlarda bile 60 FPS animasyon elde eder.

Dart geliştirici araçları

Dart geliştirici araçları Dart SDK (dart derleyicisi, dartanalyzer, dartfmt, pub), Flutter SDK ve IDE eklentilerini içerir. Dart SDK, Flutter SDK ile birlikte flutter/bin/cache/dart-sdk klasörüne kurulur. Pub, pubspec.yaml dosyasını okuyan ve pub.dev'den bağımlılıkları indiren paket yöneticisidir.

Temel araçlar

dart analyze — türleri, kullanılmayan import'ları ve potansiyel hataları kontrol eden statik analizör. dart format — kodu otomatik olarak tutarlı bir stilde biçimlendiren biçimlendirici. dart doc — /// yorumlarından belge üreteci. Flutter DevTools — widget ağacı denetçisi, günlükler, bellek ve ağ ile profilleyici. Dart VM Service — WebSocket aracılığıyla çalışan uygulamanın hata ayıklaması.

yaml
# pubspec.yaml — Dart proje yapılandırması
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 dosyası, Dart projesinin bağımlılıklarını tanımlar. environment:sdk alanı, Dart sürümünü belirtir — mevcut kararlı sürüm 3.x'tir. Dependencies ana kütüphanelerdir, dev_dependencies test ve kod üretimi içindir. json_annotation + json_serializable, build_runner aracılığıyla JSON serileştirme kodu üretir. flutter_lints, analizör için bir kural kümesidir.

Sıkça sorulan sorular

Dart nedir?

Dart, Google'ın (2011) Flutter ile platformlar arası geliştirme için tasarladığı bir programlama dilidir. C benzeri sözdizimi, güçlü türleme, JIT ve AOT derlemesini destekler. Sound null safety (Dart 2.12'den itibaren) ve Future ile Stream aracılığıyla eşzamansızlık ile karakterize edilir. Mobil, web ve masaüstü uygulamalar için kullanılır.

Dart, JavaScript'ten nasıl farklıdır?

Dart native koda (AOT) veya JS'ye (dart2js) derlenir, JavaScript yorumlanır. Dart, sound null safety, yerleşik sınıflar ve mixin'ler ile güçlü türlemeye sahiptir. Dart'ın eşzamansızlığı Isolate (paylaşımlı bellek olmadan ayrı iş parçacıkları) üzerine kuruluyken, JS — Web Workers ile olay döngüsü üzerine kuruludur. Mobil senaryolarda Dart AOT performansı V8 JIT'ten %30-50 daha yüksektir.

Dart bir mobil uygulamaya nasıl derlenir?

Dart, Dart Native aracılığıyla AOT olarak native ARM koduna derlenir. Hata ayıklama modunda, Dart VM sıcak yeniden yükleme ile JIT kullanır. Flutter Engine (C++), UI'yı Skia/Impeller aracılığıyla render eder. Android için — flutter build apk, iOS için — flutter build ios. Web yapısı dart2js veya dart2wasm kullanır. Sürüm APK boyutu 15-20 MB'tır (AAB bölünmesi olmadan).

Dart hangi veri türlerini destekler?

Dart ilkel türleri destekler: int, double, String, bool. Koleksiyonlar: List, Set, Map, Record. Özel: Symbol, Runes, Null. İlkeller dahil her şey bir nesnedir. Null safety: int? null'a izin verir, int asla null değildir. ??, ??= operatörleri güvenli null işleme için. Genel türler: List<String>, Map<String, dynamic>.

Dart geliştirme için hangi araçlar gerekli?

Flutter SDK, Dart SDK, Flutter Engine ve widget kütüphanesini içerir. IDE — Flutter eklentisiyle Android Studio veya VS Code. DevTools — widget denetçisiyle profilleyici. Pub.dev — 45.000'den fazla kütüphaneye sahip paket yöneticisi. dart analyze ve dart format araçları kod kalitesini sağlar. JSON modellerinin kod üretimi için Build_runner.

Özet

  • Dart — Flutter için Google'ın dili, JIT geliştirme ve AOT performansını birleştirir
  • Sound null safety Dart 2.12 (+3.0)'den itibaren — tür düzeyinde zorunlu null koruması
  • Eşzamansızlık Future (tek sonuç), Stream (dizi), Isolate (paralellik) aracılığıyla
  • Flutter — her şeyin widget olduğu bildirimsel UI framework'ü (StatelessWidget / StatefulWidget)
  • Hot Reload — uygulama durumunu kaybetmeden yaklaşık 1 saniyede JIT kod yeniden yüklemesi
  • Pub.dev — pubspec.yaml aracılığıyla yönetilen paket ekosistemi (45.000'den fazla)
  • Flutter DevTools — widget denetçisi, bellek ve ağ ile profilleyici

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun