Basit Bir Paket Oluşturma
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 53 / 68.
Şimdi kendi özel paketinizi oluşturma zamanı! Paketler oluşturmak, kodunuzu farklı programlarda içe aktarılıp kullanılabilen yeniden kullanılabilir modüller hâlinde düzenlemenizi sağlar.
Bir paket oluşturmak için dosyanızın en üstünde, ardından paket adı gelen package anahtar sözcüğüyle paketi bildirmeye başlarsınız. Hesap makinesi paketimiz için şunu kullanacağız:
package calculatorBu paket içinde işlevler, değişkenler ve türler tanımlayabilirsiniz. Yalnızca dışa aktarılan tanımlayıcıların (büyük harfle başlayanların) diğer paketlerden erişilebilir olacağını unutmayın. Dışa aktarılan bir Add işlevini şu şekilde tanımlayabilirsiniz:
package calculator
func Add(a, b int) int {
return a + b
}Özel paketinizi başka bir dosyadan kullanmak için, onu tıpkı diğer paketler gibi içe aktarırsınız. main paketinizden, ardından dışa aktarılan işlevleri çağırabilirsiniz:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Bu modüler yaklaşım, kodunuzu daha düzenli hâle getirir ve kodu yinelemeden işlevselliği birden çok programda yeniden kullanmanıza olanak tanır.
Görev
KolayTemel matematiksel işlemler içeren özel bir mathutils paketi oluşturun ve ardından bunu ana programınızdan kullanın. Bu görev, bir paket oluşturma, dışa aktarılan işlevler tanımlama ve özel paketinizi başka bir programda kullanmak üzere içe aktarma becerinizi test edecektir.
İki girdi alacaksınız:
"function1:param1,param2:operation|function2:param1,param2:operation"biçiminde işlev tanımları içeren bir dize (örneğin,"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"biçiminde hesaplama istekleri içeren bir dize (örneğin,"Add:15,25|Multiply:6,8|Subtract:50,20")
Göreviniz:
- Üst kısmına
mathutilsbildirimi ekleyerek birpackage mathutilspaketi oluşturun - Bireysel işlev tanımlarını elde etmek için ilk girdiyi dikey çubuklara (
|) göre bölerek ayrıştırın - Her işlev tanımı için işlev adını, parametreleri ve işlem türünü elde etmek üzere iki nokta üst üste işaretlerine göre bölün
mathutilspaketinizde aşağıdaki dışa aktarılan işlevleri oluşturun:Add(a, b int) int- a ve b'nin toplamını döndürürSubtract(a, b int) int- a eksi b'yi döndürürMultiply(a, b int) int- çarpımı döndürürDivide(a, b int) int- a'nın b'ye bölümünü döndürür (tamsayı bölmesi)
- Ana programınızda
mathutilspaketini içe aktarın - Paket bilgisi başlığını görüntüleyin:
"=== MATHUTILS PACKAGE DEMO ===" - İlk girdiyi ayrıştırın ve kullanılabilir işlevleri görüntüleyin:
"Available functions in mathutils package:"- Her işlev için:
"- [function_name]: Performs [operation_type] on two integers"
- Bireysel hesaplama isteklerini elde etmek için ikinci girdiyi dikey çubuklara göre bölerek ayrıştırın
- Her hesaplama isteği için işlev adını ve parametreleri elde etmek üzere iki nokta üst üste işaretlerine göre bölün
- İki tamsayı değerini elde etmek için parametreleri virgüllere göre bölün
- Parametre dizelerini
strconv.Atoikullanarak tamsayılara dönüştürün - Hesaplama işlemi başlığını görüntüleyin:
"Performing calculations:" - Her hesaplama isteği için:
mathutilspaketindeki uygun işlevi çağırın- Şunu görüntüleyin:
"mathutils.[function_name]([param1], [param2]) = [result]"
- Özet istatistiklerini hesaplayın ve görüntüleyin:
"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]"
- Paket kullanımını onaylayın:
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
Girdi dizelerini bölmek için strings paketini, dizeleri tamsayılara dönüştürmek için strconv paketini ve biçimlendirilmiş çıktı için fmt paketini kullanın. Yalnızca büyük harfle başlayan işlevlerin dışa aktarılacağını ve diğer paketlerden erişilebilir olacağını unutmayın.
Önemli: Her iki girdi satırı da girdiler arasındaki sınırlayıcı olarak dikey çubukları (|) kullanır. İlk girdideki her giriş FunctionName:param1,param2:operationtype biçimindedir: önce | karakterine göre, ardından işlev adını (indeks 0) ve işlem türünü (indeks 2) çıkarmak için her girişi : karakterine göre bölün.
Bu görev, özel paketler aracılığıyla yeniden kullanılabilir kodun nasıl oluşturulacağını ve işlevselliğin mantıksal modüller hâlinde nasıl düzenleneceğini gösterir.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Create your mathutils package functions here
// Ayrı dosyalar kullanamadığımız için fonksiyonları doğrudan tanımla
// Bunlar normalde ayrı bir paket dosyasında olurdu
func main() {
// Boşlukları düzgün işlemek için bufio.Scanner kullanarak girdi oku
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: Kodunu aşağıya yaz
// 1. Define Add, Subtract, Multiply, Divide functions (simulating mathutils package)
// 2. functionDefs'i ayrıştır: her tanımı almak için '|' ile böl, sonra her birini ':' ile böl
// Biçim: FuncName:param1,param2:operation (ör. "Add:5,3:addition")
// 3. Display package information and available functions
// 4. Parse calcRequests (split by '|'), perform calculations
// 5. Sonuçları ve özet istatistikleri görüntüle
// Kullanılmayan değişken uyarılarını bastır
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// Challenge'da belirtildiği gibi gerekli formatı çıktılamayı unutma
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve Davranışlar6Deyimsel Go: Kümeler
Go'da Küme DeyimiBir Küme OluşturmaKümeye Eleman EklemeEleman Varlığını Kontrol EtmeKümeden Eleman SilmeKüme Üzerinde YinelemeÖzet - Benzersiz Kullanıcı Adları9Paketler ve Kapsam
Paket Nedir?Dışa Aktarılan ve AktarılmayanlarBasit Bir Paket OluşturmaPaket Takma AdlarıBoş Tanımlayıcı `_``init` FonksiyonuÖzet - Bir Yardımcı Araç OluşturmaKendi başına pratik yap: Online Go derleyicisi