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.
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:
- String yang mewakili tipe notifikasi (misalnya,
"email","sms","push", atau"alert") - String yang mewakili konten atau nilai notifikasi
Tugasmu adalah:
- 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 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)
- 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 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(¬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