# Mencoba Bahasa Pemograman Dart

beberapa minggu ini saya tertarik dengan [**Dart**](https://dart.dev). 

belajar dart menurut saya tidak terlalu sulit. mungkin karena sebelum-nya saya udah terbiasa dengan OOP di [**PHP**](https://php.net).

### Kenapa saya belajar Dart ?
alasan saya belajar Dart adalah 

- Pertama, saya adalah orang yang suka penasaran terhadap hal hal baru.
- Kedua, saya tertarik dengan Mobile Development.
- Ketiga, saya ingin membuat aplikasi mobile dengan flutter.

ketiga poin di atas adalah alasan saya mengapa tertarik belajar dart.

nah pada tulisan ini juga saya akan sharing pemahaman saya tentang dart.

### Object Oriented Programming Language (OOP)
dart memang  sejak awal di relase itu di desain untuk menjadi pemograman  berorientasi objek atau OOP.
seperti pemograman OOP lainnya.
dart juga mendukung 4 pliar OOP seperti Inheritance, Encapsulation, Abstraction, Polymorphism

> Di dalam tidak terdapat access modifier public , private dan protected.
> sebagai gantinya, dart menggunakan syntax _ (underscore) untuk membuat sebuah method bersifat private dan itu pun berbasis file bukan berbasis class.

### Fitur Extension
di dalam dart terdapat fitur extension. fitur extension ini berguna ketika kita ingin menambahkan fungsionalitas sebuah class tanpa perlu merubah struktur class.

sebagai contoh. 
misalnya saya mempunya class Person.  
```dart
  class Person {
    String? message;
    int? age; 
    Person(this.message, this.age); 
}
```
misalnya dengan class person tersebut. saya ingin menambahkan method _getPerson()_.
nah dengan fitur extension ini kita bisa menambahkan method _getPerson()_ tanpa merubah class Person tersebut.

```dart
 class Person {
    String? name;
    int? age; 
    Person(this.name, this.age); 
}

extension GetPerson on Person {
 String getPerson(){
  return 'my name: $name, age: $age';
  }
}
```

### Mixin ala Trait di PHP
fitur menarik lainnya adalah mixin. apa itu mixin? 
mixin ini sama seperti Trait di PHP.
dengan mixin kita bisa membuat kode lebih reusable (dapat di gunakan kembali).

untuk membuat mixin kita bisa menggunakan keyword mixin 

```dart
mixin Greeting {
  String getPerson(){
    return 'name: $name age: $age';
  }
}
```

untuk menggunkan mixin kita bisa menggunakan keyword with pada saat membuat class.

```dart
class Person with Greeting {
 String? name;
 int? age;

Person(this.name, this.age);
}
``` 
dengan adanya mixin, class Person sekarang mempunyai method _getPerson()_ .

oh ya kita dapat menggunakan mixin sebanyak mungkin dengan memisahkan mixin dengan coma.

```dart
class Person with Greeting, OtherMixin {}
```

### Cascade Notation
Fitur ini sangat bermanfaat banget. karena fitur ini dapat menyingkat kode.
sebagai contoh saya mempunyai class _Person_. 
```dart
class Person {
 String? name;
 int? age;

void setName(String name){
  this.name = name;
  }

void setAge(int name){
  this.age = age;
  }

 String getPerson(){
    return 'name: $name age: $age';
  }
}
```
tanpa menggunakan cascade notation, untuk memanggil method _getPerson()_ agak sedikit panjang.

```dart
var person = Person();
person.setName('Tony Stark');
person.setAge(30);
print(person.getPerson());
```

dengan cascade notation kita bisa mempersingkat penulisan tersebut seperti ini.

```dart
var person = Person().setName('Tony Stark')
  ..setAge(30);
  ..getPerson());
print(person);
```

coba perhatikan kode di atas. cukup simple bukan. 
jadi untuk menggunakan cascade notation kita gunakan operator .. (titik dua).

oke mungkin itu saja yang dapat saya sharing soal dart. semoga bermanfaat.
