Membuat Paket Sederhana
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 53 dari 68.
Sekarang saatnya membuat package kustommu sendiri! Membuat package memungkinkan kamu mengatur kodemu ke dalam module yang dapat digunakan kembali, lalu diimpor dan digunakan di berbagai program.
Untuk membuat package, kamu mulai dengan mendeklarasikannya di bagian atas file dengan kata kunci package yang diikuti nama package. Untuk package kalkulator kita, kita akan menggunakan:
package calculatorDi dalam package ini, kamu bisa mendefinisikan fungsi, variabel, dan tipe. Ingat, hanya identifier yang diekspor (yang diawali huruf kapital) yang bisa diakses dari package lain. Berikut cara mendefinisikan fungsi Add yang diekspor:
package calculator
func Add(a, b int) int {
return a + b
}Untuk menggunakan package kustommu dari file lain, impor package itu seperti package lainnya. Dari package main, kamu kemudian bisa memanggil fungsi yang diekspor:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Pendekatan modular ini membuat kodemu lebih teratur dan memungkinkanmu menggunakan kembali fungsionalitas di beberapa program tanpa menggandakan kode.
Tantangan
MudahBuat package mathutils khusus dengan operasi matematika dasar, lalu gunakan package tersebut dari program utamamu. Tantangan ini akan menguji kemampuanmu membuat package, mendefinisikan fungsi yang diekspor, dan mengimpor package khusus untuk digunakan di program lain.
Kamu akan menerima dua input:
- String yang berisi definisi fungsi dengan format
"function1:param1,param2:operation|function2:param1,param2:operation"(misalnya,"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction") - String yang berisi permintaan perhitungan dengan format
"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"(misalnya,"Add:15,25|Multiply:6,8|Subtract:50,20")
Tugasmu adalah:
- Buat package
mathutilsdengan mendeklarasikanpackage mathutilsdi bagian atas - Uraikan input pertama dengan memisahkannya berdasarkan pipa (
|) untuk mendapatkan definisi fungsi satu per satu - Untuk setiap definisi fungsi, pisahkan berdasarkan titik dua untuk mendapatkan nama fungsi, parameter, dan jenis operasi
- Buat fungsi-fungsi ekspor berikut di package
mathutilsmilikmu:Add(a, b int) int- mengembalikan jumlah a dan bSubtract(a, b int) int- mengembalikan hasil pengurangan b dari aMultiply(a, b int) int- mengembalikan hasil perkalian a dan bDivide(a, b int) int- mengembalikan hasil pembagian a dengan b (pembagian bilangan bulat)
- Di program utamamu, impor package
mathutils - Tampilkan header informasi package:
"=== MATHUTILS PACKAGE DEMO ===" - Uraikan input pertama dan tampilkan fungsi yang tersedia:
"Available functions in mathutils package:"- Untuk setiap fungsi:
"- [function_name]: Performs [operation_type] on two integers"
- Uraikan input kedua dengan memisahkannya berdasarkan pipa untuk mendapatkan permintaan perhitungan satu per satu
- Untuk setiap permintaan perhitungan, pisahkan berdasarkan titik dua untuk mendapatkan nama fungsi dan parameter
- Pisahkan parameter berdasarkan koma untuk mendapatkan dua nilai bilangan bulat
- Ubah string parameter menjadi bilangan bulat menggunakan
strconv.Atoi - Tampilkan header proses perhitungan:
"Performing calculations:" - Untuk setiap permintaan perhitungan:
- Panggil fungsi yang sesuai dari package
mathutils - Tampilkan:
"mathutils.[function_name]([param1], [param2]) = [result]"
- Panggil fungsi yang sesuai dari package
- Hitung dan tampilkan statistik ringkasan:
"Calculation Summary:""Total calculations performed: [number_of_calculations]""Functions used: [comma_separated_list_of_unique_function_names_used]""Sum of all results: [sum_of_all_calculation_results]"
- Tampilkan konfirmasi penggunaan package:
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
Gunakan package strings untuk memisahkan string input, package strconv untuk mengubah string menjadi bilangan bulat, dan package fmt untuk output berformat. Ingat, hanya fungsi yang diawali huruf kapital yang akan diekspor dan dapat diakses dari package lain.
Penting: Kedua baris input menggunakan pipa (|) sebagai pembatas antarentri. Setiap entri dalam input pertama memiliki format FunctionName:param1,param2:operationtype: pisahkan berdasarkan | terlebih dahulu, lalu pisahkan setiap entri berdasarkan : untuk mengambil nama fungsi (indeks 0) dan jenis operasi (indeks 2).
Tantangan ini menunjukkan cara membuat kode yang dapat digunakan kembali melalui package khusus, serta cara mengatur fungsionalitas ke dalam module yang logis.
Coba sendiri
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Buat fungsi-fungsi package mathutils-mu di sini
// Karena kita tidak bisa menggunakan file terpisah, definisikan fungsi-fungsinya secara langsung
// Biasanya, fungsi-fungsi ini berada dalam file package terpisah
func main() {
// Baca input menggunakan bufio.Scanner agar spasi tertangani dengan benar
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: Tulis kodemu di bawah ini
// 1. Definisikan fungsi Add, Subtract, Multiply, Divide (sebagai simulasi package mathutils)
// 2. Uraikan functionDefs: pisahkan berdasarkan '|' untuk mendapatkan setiap definisi, lalu pisahkan masing-masing berdasarkan ':'
// Format: FuncName:param1,param2:operation (misalnya "Add:5,3:addition")
// 3. Tampilkan informasi package dan fungsi yang tersedia
// 4. Uraikan calcRequests (pisahkan berdasarkan '|'), lalu lakukan perhitungan
// 5. Tampilkan hasil dan ringkasan statistik
// Hindari peringatan tentang variabel yang tidak digunakan
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// Ingat untuk menghasilkan output dengan format yang diminta dalam tantangan
}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 Perilaku6Go Idiomatis: set
Idiom set dalam GoMembuat setMenambahkan elemen ke setMemeriksa keanggotaanMenghapus elemen dari setMelakukan perulangan pada setUlasan: Nama pengguna unik9Paket dan Lingkup
Apa Itu Paket?Diekspor vs Tidak DieksporMembuat Paket SederhanaAlias PaketIdentifier Kosong `_`Fungsi `init`Ringkasan: Membuat UtilitasLatihan sendiri: Compiler Go online