Menu
CoddyTech

Type Switch

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 18 dari 68.

Meskipun type assertion berguna untuk memeriksa satu tipe, kamu sering perlu menangani beberapa kemungkinan tipe untuk variabel interface. Di sinilah type switch sangat berguna, karena menyediakan cara yang jelas untuk melakukan tindakan berbeda berdasarkan tipe konkret.

Sakelar tipe menggunakan sintaks khusus ini: switch v := i.(type). Perhatikan kata kunci (type), bukan tipe tertentu. Variabel v akan berisi nilai sebenarnya dengan tipe konkretnya dalam setiap kasus:

func describe(data interface{}) {
    switch v := data.(type) {
    case int:
        fmt.Printf("Integer: %d\n", v)
    case string:
        fmt.Printf("String: %s\n", v)
    case bool:
        fmt.Printf("Boolean: %t\n", v)
    default:
        fmt.Printf("Unknown type: %T\n", v)
    }
}

Dalam setiap kasus, v otomatis memiliki tipe yang tepat, tidak perlu melakukan type assertion tambahan. Ini membuat type switch jauh lebih rapi daripada merangkai beberapa type assertion dengan pernyataan if-else, terutama saat kamu perlu menangani beberapa tipe berbeda di satu tempat.

challenge icon

Tantangan

Mudah

Dalam tantangan ini, kamu akan berlatih menggunakan type switch untuk menangani beberapa tipe data dalam sistem notifikasi. Kamu akan membuat fungsi yang memproses berbagai tipe notifikasi dan memformatnya dengan tepat berdasarkan tipe konkretnya.

Kamu akan menerima dua input:

  • Sebuah string yang mewakili tipe notifikasi (misalnya, "email", "sms", "push", atau "alert")
  • Sebuah string yang mewakili konten atau nilai notifikasi

Tugasmu:

  1. Buat fungsi bernama processNotification yang menerima parameter interface{}
  2. Berdasarkan input tipe notifikasi, ubah konten menjadi tipe Go yang sesuai dan simpan dalam variabel interface{}:
    • Untuk "email": gunakan konten sebagai string
    • Untuk "sms": ubah konten menjadi bilangan bulat (yang mewakili jumlah karakter)
    • Untuk "push": ubah konten menjadi boolean (true untuk "enabled", false untuk nilai lainnya)
    • Untuk "alert": ubah konten menjadi float64 (yang mewakili tingkat prioritas)
  3. Panggil fungsi processNotification dengan nilai yang sudah diubah
  4. Di dalam processNotification, gunakan type switch untuk menangani setiap tipe dan mencetak pesan yang sesuai:
    • Untuk string: "Email notification: [value]"
    • Untuk int: "SMS notification with [value] characters"
    • Untuk bool: "Push notifications: [value]"
    • Untuk float64: "Alert with priority: [value]"
    • Untuk tipe lainnya: "Unknown notification type"

Gunakan paket strconv untuk konversi string. Untuk konversi boolean, hanya "enabled" yang akan menghasilkan true. Tantangan ini menunjukkan bagaimana type switch menyediakan cara yang jelas untuk menangani beberapa tipe dalam satu struktur kontrol, serta otomatis memberimu nilai dengan tipe yang benar pada setiap kasus.

Cetak float64 dalam bentuk terpendeknya, seperti yang dilakukan fmt.Println atau verba %v / %g: 3.5 dicetak sebagai 3.5 dan 1.0 sebagai 1 (verba %f akan mencetak 1.000000).

Coba sendiri

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// Baca input
	var notificationType string
	var content string
	fmt.Scanln(&notificationType)
	fmt.Scanln(&content)
	
	// TODO: Tulis kodemu di bawah ini
	// 1. Buat fungsi processNotification yang menerima parameter interface{}
	// 2. Konversi content ke tipe yang sesuai berdasarkan notificationType
	// 3. Panggil processNotification dengan nilai yang sudah dikonversi
	// 4. Gunakan type switch di dalam processNotification untuk menangani berbagai tipe
	
}
quiz iconUji dirimu

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

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online