Menu
CoddyTech

Type Switch

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

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

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

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 secara otomatis memiliki tipe yang tepat, jadi tidak diperlukan pernyataan tipe tambahan. Dengan begitu, type switch jauh lebih rapi daripada merangkai beberapa pernyataan tipe 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:

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

Tugasmu adalah:

  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 integer (yang mewakili jumlah karakter)
    • Untuk "push": ubah konten menjadi boolean (true untuk "enabled", false untuk apa pun selain itu)
    • 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 package strconv untuk konversi string. Untuk konversi boolean, hanya "enabled" yang akan menghasilkan true. Tantangan ini menunjukkan bagaimana type switch menyediakan cara yang rapi untuk menangani beberapa tipe dalam satu struktur kontrol, sekaligus memberikan nilai dengan tipe yang benar secara otomatis pada setiap kasus.

Cetak float64 dalam bentuk terpendeknya, seperti yang dilakukan fmt.Println atau verb %v / %g: 3.5 dicetak sebagai 3.5 dan 1.0 sebagai 1 (verb %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