Menu
CoddyTech

Fungsi Konstruktor

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 10 dari 107.

Go tidak memiliki constructor seperti bahasa lain. Sebagai gantinya, konvensinya adalah membuat fungsi bernama NewTypeName yang mengembalikan struct yang sudah diinisialisasi, sering kali sebagai pointer.

Fungsi konstruktor dasar

type Person struct {
    Name string
    Age  int
}

func NewPerson(name string, age int) *Person {
    return &Person{
        Name: name,
        Age:  age,
    }
}

Konstruktor dengan nilai default

type Config struct {
    Host    string
    Port    int
    Timeout int
}

func NewConfig(host string) *Config {
    return &Config{
        Host:    host,
        Port:    8080,    // Nilai bawaan
        Timeout: 30,      // Nilai bawaan
    }
}

Konstruktor dengan validasi

func NewPerson(name string, age int) *Person {
    if name == "" {
        name = "Unknown"
    }
    if age < 0 {
        age = 0
    }
    return &Person{
        Name: name,
        Age:  age,
    }
}

Menggunakan fungsi konstruktor

func main() {
    p1 := NewPerson("Alice", 25)
    fmt.Println(p1.Name) // Alice

    p2 := NewPerson("", -5)
    fmt.Println(p2.Name) // Unknown
    fmt.Println(p2.Age)  // 0
}

Fungsi konstruktor mengembalikan pointer (*StructName) menggunakan &. Ini menghindari penyalinan struct dan memungkinkan method dengan receiver pointer bekerja secara langsung. Validasi dan nilai default dimasukkan ke dalam konstruktor.

challenge icon

Tantangan

Sedang

Buat fungsi constructor NewBankAccount untuk struct BankAccount dengan validasi:

  • Menerima name (string) dan balance (float64) sebagai parameter
  • Jika name kosong, tetapkan nilai default "Unnamed"
  • Jika balance negatif, tetapkan nilai default 0
  • Selalu tetapkan Owner ke "Default Owner"
  • Kembalikan pointer ke struct baru

Coba sendiri

package main

import "fmt"

func main() {
    var name string
    var balance float64
    fmt.Scan(&name, &balance)

    account := NewBankAccount(name, balance)

    fmt.Printf("Account: %s\n", account.Name)
    fmt.Printf("Balance: %.2f\n", account.Balance)
    fmt.Printf("Owner: %s\n", account.Owner)
}
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 Go online