Menu
CoddyTech

Getter dan Setter

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 21 dari 110.

Getter dan setter menyediakan cara untuk mengakses dan mengubah field class melalui method khusus yang terlihat seperti property biasa. Alih-alih menampilkan field secara langsung, kamu dapat mengatur cara nilai dibaca dan ditulis.

Getter didefinisikan menggunakan kata kunci get dan mengembalikan nilai yang dihitung atau disimpan:

class Rectangle {
  double width;
  double height;
  
  Rectangle(this.width, this.height);
  
  double get area => width * height;
  double get perimeter => 2 * (width + height);
}

Rectangle rect = Rectangle(5, 3);
print(rect.area);      // 15.0
print(rect.perimeter); // 16.0

Perhatikan bahwa area dan perimeter diakses seperti field, tetapi keduanya dihitung setiap kali. Tidak perlu tanda kurung.

Setter menggunakan kata kunci set dan memungkinkan kamu mengontrol cara nilai ditetapkan:

class Temperature {
  double _celsius;
  
  Temperature(this._celsius);
  
  double get celsius => _celsius;
  set celsius(double value) {
    if (value >= -273.15) {
      _celsius = value;
    }
  }
  
  double get fahrenheit => _celsius * 9 / 5 + 32;
  set fahrenheit(double value) {
    celsius = (value - 32) * 5 / 9;
  }
}

Temperature temp = Temperature(25);
print(temp.fahrenheit);  // 77.0
temp.fahrenheit = 100;
print(temp.celsius);     // 37.78

Setter memvalidasi input sebelum menyimpannya dan bahkan dapat mengonversi antar satuan. Ini memberimu kendali atas datamu sekaligus menjaga sintaks yang rapi seperti property bagi pengguna class-mu.

challenge icon

Tantangan

Mudah

Mari buat pelacak skor untuk game yang menggunakan getter dan setter untuk mengelola statistik pemain dengan validasi dan nilai hasil perhitungan.

Kamu akan mengatur kodemu ke dalam dua file:

  • player.dart: Definisikan class Player yang melacak performa pemain dalam game. Class-mu harus memiliki:
    • Field String name untuk nama pemain
    • Field privat int _score yang dimulai dari 0
    • Field privat int _lives yang dimulai dari 3
    • Konstruktor yang menerima nama pemain
    • Getter score yang mengembalikan skor saat ini
    • Setter score yang hanya menerima nilai 0 atau lebih (abaikan nilai negatif)
    • Getter lives yang mengembalikan jumlah nyawa saat ini
    • Setter lives yang hanya menerima nilai antara 0 dan 5, termasuk keduanya (abaikan nilai di luar rentang ini)
    • Getter level yang menghitung level pemain berdasarkan skor: skor dibagi 100 (pembagian bilangan bulat), lalu ditambah 1
    • Getter isAlive yang mengembalikan true jika jumlah nyawa lebih dari 0
    • Method displayStatus() yang mencetak status pemain saat ini
  • main.dart: Impor class pemainmu dan tunjukkan getter dan setter:
    • Buat pemain bernama 'Alex'
    • Atur skor ke 250 dan panggil displayStatus()
    • Coba atur skor ke -50 (seharusnya diabaikan), lalu panggil displayStatus()
    • Atur jumlah nyawa ke 1 dan panggil displayStatus()
    • Coba atur jumlah nyawa ke 10 (seharusnya diabaikan), lalu panggil displayStatus()

Method displayStatus() harus mencetak dengan format persis seperti ini:

[name] | Score: [score] | Level: [level] | Lives: [lives] | Alive: [isAlive]

Output yang diharapkan:

Alex | Score: 250 | Level: 3 | Lives: 3 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 3 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 1 | Alive: true
Alex | Score: 250 | Level: 3 | Lives: 1 | Alive: true

Coba sendiri

import 'player.dart';

void main() {
  // TODO: Buat pemain bernama 'Alex'

  // TODO: Atur skor menjadi 250 dan panggil displayStatus()

  // TODO: Coba atur skor menjadi -50 (seharusnya diabaikan) dan panggil displayStatus()

  // TODO: Atur lives menjadi 1 dan panggil displayStatus()

  // TODO: Coba atur lives menjadi 10 (seharusnya diabaikan) dan panggil displayStatus()
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online