Menu
Coddy logo textTech

Ö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.

challenge icon

Görev

Kolay

Dize işleme fonksiyonları içeren kapsamlı bir stringutil paketi oluşturun ve ana programda kullanımını gösterin. Bu meydan okuma, özel bir yardımcı paket oluşturma, dışa aktarılan (exported) fonksiyonları uygulama ve paketinizi başka bir programdan kullanma yeteneğinizi test edecektir.

İki girdi alacaksınız:

  • "function1:description1,function2:description2" formatında fonksiyon özelliklerini içeren bir dize (örneğin, "Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")
  • "string1|string2|string3" formatında, boru (pipe) karakteri ile ayrılmış test dizelerini içeren bir dize (örneğin, "hello|Go Programming|WORLD")

Göreviniz şunları yapmaktır:

  1. package stringutil bildirimiyle bir stringutil paketi oluşturun
  2. Bireysel fonksiyon özelliklerini elde etmek için ilk girdiyi virgüllere göre ayırarak ayrıştırın
  3. Her fonksiyon özelliği için, fonksiyon adını ve açıklamasını almak üzere iki noktaya göre ayırın
  4. stringutil paketinizde aşağıdaki dışa aktarılan fonksiyonları uygulayın:
    • Reverse(s string) string - karakterleri ters sırada olan dizeyi döndürür
    • ToUpper(s string) string - büyük harfe dönüştürülmüş dizeyi döndürür
    • ToLower(s string) string - küçük harfe dönüştürülmüş dizeyi döndürür
    • Length(s string) int - dizenin uzunluğunu döndürür
  5. Ana programınızda stringutil paketini içe aktarın (import)
  6. Paket başlığını görüntüleyin: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. Mevcut fonksiyonları görüntüleyin:
    • "Available functions in stringutil package:"
    • İlk girdideki her fonksiyon için: "- [function_name]: [description]"
  8. Bireysel test dizelerini elde etmek için ikinci girdiyi boru karakterlerine göre ayırarak ayrıştırın
  9. Test başlığını görüntüleyin: "Testing stringutil functions:"
  10. Her test dizesi için tüm fonksiyonları gösterin:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. İstatistikleri hesaplayın ve 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]"
  12. En uzun ve en kısa dizeleri görüntüleyin:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. Tamamlanma mesajını görüntüleyin: "Package demonstration completed successfully"

Girdi dizelerini ayırmak ve metni işlemek için strings paketini, formatlı çıktı için ise fmt paketini kullanın. Reverse fonksiyonu için, dizeyi bir rune dilimine (slice) dönüştürmeniz, sırayı tersine çevirmeniz ve tekrar dizeye dönüştürmeniz gerekecektir. Diğer paketlerden erişilebilir olması için dışa aktarılan tüm fonksiyonların büyük harfle başlaması gerektiğini unutmayın. Bu meydan okuma, yeniden kullanılabilir yardımcı paketlerin nasıl oluşturulacağını ve ilgili işlevlerin nasıl bir arada organize edileceğini göstermektedir.

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