DEV Community

Cover image for Nesneye Yönelik (Object-Orientated) Dil Özellikleri 💫 🌌 ✨
Gülsen 🦋
Gülsen 🦋

Posted on

Nesneye Yönelik (Object-Orientated) Dil Özellikleri 💫 🌌 ✨

Modüller 🦋

Java ve C#'dan farklı olarak Dart, tek bir dosya içinde birden çok nesneyi bildirmenize izin verir.

Constructor'lar 🦋

Default Constructor

Constructor belirtmezseniz, sizin için bağımsız değişkenler (arguments) olmadan bir default constructor oluşturulacaktır.

Constructor belirtirseniz, default constructor sizin için oluşturulmaz.

Constructor Syntax Kısayolu

Bir constructor da bir örnek değişkenin (instance variable) değerini ayarlamak istiyorsanız, bunu constructor imzasında ayarlamak için 'this.[örnek değişken adı]' biçimlendirmesini kullanabilirsiniz.

Örnek kod:

class Name{
  String firstName;
  String lastName;
  Name(this.firstName, this.lastName);
}
main(){
  Name name = new Name('mark','smith'); //Unnecessary new keyword
  print(name.firstName);
  print(name.lastName);
}
Enter fullscreen mode Exit fullscreen mode

Çıktı:

mark
smith
Enter fullscreen mode Exit fullscreen mode

New Keyword

Dart'ta constructor'ları çağırırken 'new' anahtar kelimesini kullanmanıza gerek yoktur.

Örnek kod:

void main() {
  Car car = Car("BMW","M3");
  print(car.getBadge());
  Car car2 =  Car("BMW","M3");
  print(car2.getBadge());
}
class Car{
  final String _make;
  final String _model;
  Car(this._make, this._model);
  String getBadge(){
     return _make + " - " + _model;
  }
}
Enter fullscreen mode Exit fullscreen mode

Çıktı:

BMW - M3
BMW - M3
Enter fullscreen mode Exit fullscreen mode

Named Constructors
Dart named constructorlara izin verir. Aynı sınıfı farklı şekillerde başlatmak istiyorsanız named constructorları kullanabilirsiniz.

Örnek Kod:

class ProcessingResult{
  bool? _error;
  String? _errorMessage;
  ProcessingResult.success(){
    _error = false;
    _errorMessage = '';
  }
  ProcessingResult.failure(this._errorMessage){ //shortcut
    _error = true;
  }
  @override
  String toString(){
    return 'Error: ' + _error.toString() + ' Message: ' + 
   (_errorMessage ?? "");
  }
}
void main() {
  print(ProcessingResult.success().toString());
  print(ProcessingResult.failure('it broke').toString());
}

Enter fullscreen mode Exit fullscreen mode

Çıktı:

Error: false Message:
Error: true Message: it broke
Enter fullscreen mode Exit fullscreen mode

Required Constructor Parametereleri
Parametre isminin önüne 'required' anahtar kelimesi getirilerek yapılır.

Constructor Parametereleri

Constructorlar farklı parametreleri kabul edebilir:

Factory Constructors
Her zaman sınıfının yeni bir örneğini (instance) oluşturmayan bir constructor uygularken factory anahtar sözcüğünü kullanabilirsiniz.

Factory anahtar sözcüğü, constructor'ın sonunda bir değişken döndürmenize olanak tanır.

Bu, constructor'ın bir değişkenden veya önbellekten (cache) bir örnek(instance) döndürmesini istediğinizde kullanışlıdır.

Örnek kod:

class Printer{
  static final Printer _singleton = Printer._construct();
  factory Printer(){
   return _singleton;
 }

 Printer._construct(){
   print('private constructor');
 }

 printSomething(String text){
   print(text);
 }
}

void main() {
  Printer().printSomething("this");
  Printer().printSomething("and");
  Printer().printSomething("that");
}

Enter fullscreen mode Exit fullscreen mode

Çıktı:

private constructor
this
and
that
Enter fullscreen mode Exit fullscreen mode

Örnek değişkenler (Instance Variables) 🦋

Belirtilmemiş Görünürlük (Unspecified Visibility)

Değişkenlerin görünürlüğünü belirtmezseniz bunlar public hale gelir. (herkese açık)

class Name {
String? firstName;
String? lastName;
}
Enter fullscreen mode Exit fullscreen mode

Belirtilen Görünürlük (Specified Visibility)
Java'dan farklı olarak Dart, field veya özelliklerin (property) görünürlüğünü belirtmek için public, protected ve private anahtar sözcüklerine sahip değildir. Bir tanımlayıcı (identifier) alt çizgi ile başlıyorsa private'dır.(özel)

Diğer:

class ContactInfo {
  private String name;
  private String phone;
}
Enter fullscreen mode Exit fullscreen mode

Dart:

class ContactInfo {
  String? _name;
  String? _phone;
}
Enter fullscreen mode Exit fullscreen mode

Constructor ve Method Parametreleri

Flutter, constructor ve method parametreleri açısından çok esnektir.

Birkaç farklı türü vardır:
• Positional Required (Konumsal Gerekli)
• Positional Optional (Konumsal Opsiyonel)
• Named (Adlandırılmış)

1.) Positional Required

class Car{
  final String? _make;
  final String? _model;
  Car(this._make,this._model);
}
Enter fullscreen mode Exit fullscreen mode

2.) Positional Optional

Köşeli parantez '[]' kullanarak parametreleri isteğe bağlı yapabilirsiniz. Bu parametrelere bir değer atanmazsa, parametrenin değeri null olur.

void main() {
  Car car1 = Car("Nissan","350Z");
  Car car2 = Car("Nissan");
}


class Car{
 final String? _make;
 final String? _model;

 Car(this._make,[this._model]){
   print('$_make $_model');
 }
}
Enter fullscreen mode Exit fullscreen mode

Çıktı:

Nissan 350Z
Nissan null
Enter fullscreen mode Exit fullscreen mode

3.) Named

Tüm adlandırılmış (named) parametreler isteğe bağlıdır.

Süslü parantezleri '{}' kullanarak parametreleri adlandırabilirsiniz.

Adlandırılmış bir parametreye değer gönderilmezse, parametrenin değeri null olur.

Örnek kod:

void main() {
  Car car1 = Car("Nissan", model:"350Z", color: "yellow");
  Car car2 = Car("Nissan", color:"red");
  Car car3 = Car("Nissan");
}

class Car{
  String? make;
  String? model;
  String? color;
  Car(this.make,{this.model,this.color}){
  print('$make${getOptional(model)}${getOptional(color ?? "")}');
}

String getOptional(String? str) {
  return str != null ?" " + str : "";
 }
}

Enter fullscreen mode Exit fullscreen mode

Çıktı:

Nissan 350Z yellow
Nissan red
Nissan 
Enter fullscreen mode Exit fullscreen mode

Method Cascades

Örnek kod:

class Logger {
  void log(dynamic v){
    print(DateTime.now().toString() + ' ' + v);
  }
}
main(){
//method cascades olmadan
  Logger().log('program started');
  Logger().log('doing something');
  Logger().log('program finished');

// method cascades ile
  Logger()
 ..log('program started')
 ..log('going something')
 ..log('program finished');
}

Enter fullscreen mode Exit fullscreen mode

Çıktı:

2022-04-28 04:00:56.814 program started
2022-04-28 04:00:56.815 doing something
2022-04-28 04:00:56.815 program finished
2022-04-28 04:00:56.815 program started
2022-04-28 04:00:56.815 going something
2022-04-28 04:00:56.815 program finished
Enter fullscreen mode Exit fullscreen mode

Resource: Learn Google Flutter Fast- Mark Clow

Discussion (0)