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

String 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:

  1. stringutil bildirerek bir package stringutil paketi oluşturun
  2. Bireysel işlev belirtimlerini elde etmek için ilk girdiyi virgüllere göre bölerek ayrıştırın
  3. 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
  4. stringutil paketinizde aşağıdaki dışa aktarılan işlevleri uygulayın:
    • Reverse(s string) string - karakterleri ters sırada bulunan 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
  6. Paket başlığını görüntüleyin: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. Kullanılabilir işlevleri görüntüleyin:
    • "Available functions in stringutil package:"
    • İlk girdideki her işlev için: "- [function_name]: [description]"
  8. Bireysel test dizelerini elde etmek için ikinci girdiyi dikey çubuklara göre bölerek ayrıştırın
  9. Test başlığını görüntüleyin: "Testing stringutil functions:"
  10. 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]"
  11. İ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]"
  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 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

Kendi başına pratik yap: Online Go derleyicisi