Pemeriksa Angka Sederhana
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 67 dari 68.
Tantangan
MudahBuat sistem validasi angka yang menunjukkan cara interface mendefinisikan kontrak perilaku, sementara error kustom memberikan umpan balik yang bermakna saat validasi gagal. Tantangan ini akan menguji kemampuanmu membuat interface, mengimplementasikannya dengan tipe kustom, dan menangani error validasi dengan tepat.
Kamu akan menerima dua input:
- String berisi angka yang akan divalidasi, dipisahkan dengan koma (misalnya,
"45,150,25,200,75") - String berisi rentang validasi dengan format
"min:max"(misalnya,"1:100")
Tugasmu:
- Definisikan interface
Validatordengan satu method:Validate() error - Buat tipe error kustom bernama struct
ValidationErrordengan dua field:Value(int) danMessage(string) - Implementasikan method
Error() stringuntukValidationError, yang mengembalikan pesan dengan format:"Validation failed: [message] (value: [value])" - Buat struct
NumberValidatordengan tiga field:Number(int),Min(int), danMax(int) - Implementasikan method
Validate() erroruntukNumberValidator>, yang: <ul> <li>Mengembalikan <code>niljika angka berada dalam rentang valid (inklusif) - Mengembalikan
ValidationErrordengan pesan"number below minimum range"jika angka kurang dari nilai minimum - Mengembalikan
ValidationErrordengan pesan"number above maximum range"jika angka lebih besar dari nilai maksimum - Parse input pertama dengan memisahkannya berdasarkan koma untuk mendapatkan setiap string angka
- Parse input kedua dengan memisahkannya berdasarkan titik dua untuk mengambil nilai minimum dan maksimum
- Ubah semua nilai string menjadi bilangan bulat menggunakan package
strconv - Tampilkan header validasi:
"=== NUMBER VALIDATION SYSTEM ===" - Tampilkan parameter validasi:
"Validating numbers in range [min] to [max]" - Untuk setiap angka:
- Buat instance
NumberValidatordengan nilai angka dan rentang - Panggil method
Validate()pada validator - Jika validasi berhasil (error adalah
nil), tampilkan:"✓ [number] is valid" - Jika validasi gagal (error bukan
nil), tampilkan:"✗ [error_message]"
- Buat instance
- Tampilkan ringkasan validasi:
"=== VALIDATION SUMMARY ===""Total numbers checked: [total_count]""Valid numbers: [valid_count]""Invalid numbers: [invalid_count]"
- Tampilkan pesan penyelesaian:
"Number validation completed successfully"
Gunakan package strings untuk memisahkan string input, package strconv untuk mengubah string menjadi bilangan bulat, dan package fmt untuk output berformat. Tantangan ini menunjukkan cara membuat sistem validasi yang fleksibel menggunakan interface sekaligus memberikan informasi error yang terperinci melalui tipe error kustom.
Coba sendiri
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// Baca input
var numbersInput string
var rangeInput string
fmt.Scanln(&numbersInput)
fmt.Scanln(&rangeInput)
// Uraikan input
numberStrings := strings.Split(numbersInput, ",")
rangeParts := strings.Split(rangeInput, ":")
// Ubah nilai rentang menjadi bilangan bulat
min, _ := strconv.Atoi(rangeParts[0])
max, _ := strconv.Atoi(rangeParts[1])
// TODO: Tulis kodemu di bawah ini
// 1. Definisikan interface Validator
// 2. Buat struct ValidationError dan implementasikan method Error()
// 3. Buat struct NumberValidator dan implementasikan method Validate()
// 4. Proses dan validasi setiap angka
// 5. Tampilkan hasil dan ringkasannya
// Tampilkan judul validasi
fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
fmt.Printf("Validating numbers in range %d to %d\n", min, max)
// Proses setiap angka di sini
// Tampilkan ringkasan validasi
fmt.Println("=== VALIDATION SUMMARY ===")
// Tambahkan output ringkasan di sini
fmt.Println("Number validation completed successfully")
}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