Özet - Bir Yardımcı Araç Oluşturma
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 57 / 68.
Görev
KolayString işleme işlevleri içeren kapsamlı bir stringutil paketi oluşturun ve bu paketin kullanımını bir ana programda gösterin. Bu görev, özel bir yardımcı program paketi oluşturma, dışa aktarılan işlevleri uygulama ve paketinizi başka bir programdan kullanma becerinizi test edecektir.
İki girdi alacaksınız:
"function1:description1,function2:description2"biçiminde işlev belirtimleri içeren bir dize (örneğin,"Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")"string1|string2|string3"biçiminde, dikey çubuklarla ayrılmış test dizeleri içeren bir dize (örneğin,"hello|Go Programming|WORLD")
Göreviniz:
stringutilbildirerek birpackage stringutilpaketi oluşturun- Bireysel işlev belirtimlerini elde etmek için ilk girdiyi virgüllere göre bölerek ayrıştırın
- Her işlev belirtimi için işlev adını ve açıklamayı elde etmek üzere iki nokta üst üste işaretlerine göre bölün
stringutilpaketinizde aşağıdaki dışa aktarılan işlevleri uygulayın:Reverse(s string) string- karakterleri ters sırada bulunan dizeyi döndürürToUpper(s string) string- büyük harfe dönüştürülmüş dizeyi döndürürToLower(s string) string- küçük harfe dönüştürülmüş dizeyi döndürürLength(s string) int- dizenin uzunluğunu döndürür
- Ana programınızda
stringutilpaketini içe aktarın - Paket başlığını görüntüleyin:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - Kullanılabilir işlevleri görüntüleyin:
"Available functions in stringutil package:"- İlk girdideki her işlev için:
"- [function_name]: [description]"
- Bireysel test dizelerini elde etmek için ikinci girdiyi dikey çubuklara göre bölerek ayrıştırın
- Test başlığını görüntüleyin:
"Testing stringutil functions:" - Her test dizesi için tüm işlevleri gösterin:
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- İstatistikleri hesaplayıp görüntüleyin:
"=== STATISTICS ===""Total test strings processed: [number_of_test_strings]""Functions available in package: [number_of_functions_from_first_input]""Total function calls made: [total_function_calls]"
- En uzun ve en kısa dizeleri görüntüleyin:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- Tamamlanma mesajını görüntüleyin:
"Package demonstration completed successfully"
Girdi dizelerini bölmek ve metinleri işlemek için strings paketini, biçimlendirilmiş çıktı için ise fmt paketini kullanın. Reverse işlevi için dizeyi bir rune dilimine dönüştürmeniz, sırayı tersine çevirmeniz ve tekrar bir dizeye dönüştürmeniz gerekir. Diğer paketlerden erişilebilmeleri için tüm dışa aktarılan işlevlerin büyük harfle başlaması gerektiğini unutmayın. Bu görev, yeniden kullanılabilir yardımcı program paketlerinin nasıl oluşturulacağını ve ilgili işlevlerin birlikte nasıl düzenleneceğini gösterir.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: stringutil paket fonksiyonlarınızı burada oluşturun
// Ayrı dosyalar kullanamadığımız için fonksiyonları doğrudan tanımlayın
// Bunlar normalde ayrı bir paket dosyasında olurdu
// func Reverse(s string) string {
// // Rune'lara dönüştür, ters çevir, tekrar string'e dönüştür
// }
// func ToUpper(s string) string {
// // strings.ToUpper kullanın
// }
// func ToLower(s string) string {
// // strings.ToLower kullanın
// }
// func Length(s string) int {
// // len(s) değerini döndür
// }
func main() {
// Boşlukları düzgün işlemek için bufio.Scanner kullanarak girdiyi oku
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionSpecs := scanner.Text()
scanner.Scan()
testStrings := scanner.Text()
// Fonksiyon özelliklerini ayrıştır
funcList := strings.Split(functionSpecs, ",")
// Test string'lerini ayrıştır
testList := strings.Split(testStrings, "|")
// TODO: Kodunuzu aşağıya yazın
// 1. Paket başlığını görüntüle
// 2. funcList içindeki mevcut fonksiyonları görüntüle (dizi uzunluklarını kontrol edin)
// 3. Tüm fonksiyonları her bir test string'i ile test et
// 4. İstatistikleri hesapla ve görüntüle
// 5. En uzun/en kısa string'leri bul ve görüntüle (testList'in elemanları olup olmadığını kontrol edin)
// 6. Tamamlanma mesajını görüntüle
// stringutil paket fonksiyonlarınızı şu şekilde kullanmayı unutmayın:
// Reverse(testString)
// ToUpper(testString)
// ToLower(testString)
// Length(testString)
}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