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.
Tantangan
MudahDalam 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:
- Buat fungsi bernama
processNotificationyang menerima parameterinterface{} - 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)
- Untuk
- Panggil fungsi
processNotificationdengan nilai yang sudah diubah - 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"
- Untuk
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(¬ificationType)
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
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online