Mutlu Tekin
Mutlu Tekin
← Yazılar

Bölüm 1 — Konu 3: İlk Program (`main()`, `print()`, Dosya Yapısı)

2 dk okuma #dart

main() Fonksiyonu — Programın Giriş Kapısı

Her Dart programının tek bir zorunlu unsuru vardır: main() fonksiyonu. Dart çalışma zamanı (runtime), bir dosyayı çalıştırırken önce main() fonksiyonunu arar ve programı oradan başlatır.

dart
void main() {
  print("Merhaba Dart!");
}

Bunu parça parça açalım:

  • void — bu fonksiyonun geri değer döndürmediğini belirtir. main() fonksiyonu bir şey hesaplayıp döndürmez, sadece programı çalıştırır.
  • main — fonksiyonun adı. Bu isim sabittir, değiştirilemez — Dart runtime'ı özellikle bu isimde bir fonksiyon arar.
  • () — parantezler, fonksiyonun parametre almadığını gösteriyor (aslında main komut satırı argümanlarını List<String> args olarak da alabilir, buna birazdan değineceğiz).
  • { } — süslü parantezler, fonksiyonun gövdesini (body) yani çalıştırılacak kod bloğunu belirtir.

print(), Dart'ın standart kütüphanesinde (dart:core içinde, otomatik olarak her yerde erişilebilir) tanımlı bir fonksiyondur. Görevi basittir: verdiğin değeri konsola (terminale veya DartPad çıktı paneline) yazdırmak.

dart
void main() {
  print("Bu bir metin");
  print(42);
  print(3.14);
  print(true);
}

Çıktı:

metin
Bu bir metin
42
3.14
true

Dikkat et — print() sadece string değil, herhangi bir değeri yazdırabilir. Arka planda Dart, verdiğin değeri otomatik olarak string'e çevirir (bu, her nesnenin sahip olduğu toString() metodu sayesinde olur — bunu Bölüm 6'da sınıflar konusunda detaylı göreceğiz).

Komut Satırı Argümanları (args) — Şimdilik Kısa Bir Bakış

main() fonksiyonu isteğe bağlı olarak bir parametre alabilir:

dart
void main(List<String> args) {
  print("Aldığım argümanlar: $args");
}

Bu programı terminalden şöyle çalıştırırsan:

bash
dart run merhaba.dart selam dunya

Çıktı:

metin
Aldığım argümanlar: [selam, dunya]

Bu konuyu şimdi derinlemesine işlemiyoruz (koleksiyonları henüz görmedik), ama main()'in bu şekilde de kullanılabildiğini bilmen yeterli — ileride CLI araçları yazarken (Bölüm 13) bu önemli olacak.

Dosya Yapısı — Bir Dart Dosyası Nasıl Görünür?

Basit bir .dart dosyası genelde şu sırayı takip eder:

dart
// 1. Import ifadeleri (varsa) - dışarıdan kütüphane/paket dahil etme
import 'dart:math';

// 2. Üst seviye değişkenler/sabitler (varsa)
const String uygulamaAdi = "İlk Programım";

// 3. Fonksiyonlar (main dahil, başka yardımcı fonksiyonlar da olabilir)
void main() {
  print(uygulamaAdi);
  selamVer();
}

void selamVer() {
  print("Merhaba!");
}

Şu an import satırını detaylı açmıyoruz (Bölüm 12'de kütüphaneler konusunda işleyeceğiz), sadece dosyanın genel iskeletini tanıman için gösteriyorum. Önemli olan şu: Dart dosyaları yukarıdan aşağıya okunur ama main() her zaman programın gerçek başlangıç noktasıdır — dosyanın neresinde tanımlanırsa tanımlansın.

Bölüm 2'de string interpolation'ı detaylı göreceğiz ama şimdiden küçük bir örnek görmen faydalı:

dart
void main() {
  String isim = "Ayşe";
  print("Merhaba, " + isim + "!");   // klasik birleştirme (+)
  print("Merhaba, $isim!");          // Dart'a özgü, daha temiz yöntem
}

İkisi de aynı çıktıyı verir: Merhaba, Ayşe! — ama $isim kullanımı Dart'ta çok daha yaygın ve idiomatic'tir. Bunu bir sonraki bölümde detaylandıracağız.

Sık Yapılan Başlangıç Hataları

dart
void main() {
  print("Merhaba")   // ❌ noktalı virgül unutuldu
}

Dart'ta her ifade (statement) noktalı virgülle (;) biter. Bunu unutmak en yaygın başlangıç hatasıdır — derleyici sana açık bir hata mesajıyla bunu bildirecektir.

dart
void Main() {   // ❌ büyük harfle "Main" yazıldı
  print("Hata verir");
}

Dart case-sensitive (büyük/küçük harf duyarlı) bir dildir. main ile Main tamamen farklı isimlerdir, runtime sadece küçük harfle yazılan main'i tanır.


🎯 Bu Dersten Çıkarılması Gerekenler

  • main() her Dart programının zorunlu giriş noktasıdır, ismi değiştirilemez.
  • print() herhangi bir değeri konsola yazdırır, arka planda toString() kullanır.
  • main(List<String> args) ile komut satırı argümanları alınabilir (ileride kullanılacak).
  • Dart case-sensitive'dir ve her ifade noktalı virgülle biter.

📝 Ödevler

  • [ ] main() fonksiyonu içinde kendi adını, en sevdiğin sayıyı ve bugünün doğru/yanlış bir ifadesini (örn. "bugün pazartesi mi") 3 ayrı print() ile yazdır.
  • [ ] main(List<String> args) kullanarak terminalden verdiğin isim argümanını "Merhaba, [isim]!" şeklinde yazdıran bir program yaz.
  • [ ] Bilerek noktalı virgülü unutarak bir hata oluştur, derleyicinin verdiği hata mesajını oku ve ne anlama geldiğini yorumla.
  • [ ] selamVer() gibi kendi yazdığın ayrı bir fonksiyonu main() içinden çağıran bir örnek yaz (fonksiyonları detaylı işlemedik ama bu basit çağrıyı deneyerek görmen faydalı).

Sıradaki konu: Bölüm 1 — Konu 4: Yorum Satırları, Temel Sözdizimi Kuralları