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);
}
Çıktı:
mark
smith
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;
}
}
Çıktı:
BMW - M3
BMW - M3
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());
}
Çıktı:
Error: false Message:
Error: true Message: it broke
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");
}
Çıktı:
private constructor
this
and
that
Ö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;
}
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;
}
Dart:
class ContactInfo {
String? _name;
String? _phone;
}
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);
}
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');
}
}
Çıktı:
Nissan 350Z
Nissan null
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 : "";
}
}
Çıktı:
Nissan 350Z yellow
Nissan red
Nissan
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');
}
Çı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
Resource: Learn Google Flutter Fast- Mark Clow
Latest comments (0)