Menu
Coddy logo textTech

Özet - Güvenli Bölme

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 44 / 68.

challenge icon

Görev

Kolay

Güvenli bölme işlemini birden fazla özel hata türü ve uygun hata işleme ile uygulayan kapsamlı bir matematik hesap makinesi oluşturun. Bu görev, çeşitli matematiksel işlem hatalarını zarif bir şekilde ele alan sağlam bir sistem oluşturmak için özel hata türlerini, hata sarmalamayı ve hata denetimini bir araya getirir.

İki girdi alacaksınız:

  • "operation,num1,num2,precision" biçiminde işlem ayrıntılarını içeren bir dize (ör. "divide,10,0,2")
  • "calculator_name,mode" biçiminde hesap makinesi ayarlarını içeren bir dize (ör. "ScientificCalc,strict")

Göreviniz:

  1. İki özel hata türü oluşturun:
    • DivisionError alanları Dividend (float64) ve Divisor (float64) olan bir yapı
    • ValidationError alanları Field (string) ve Value (float64) olan bir yapı
  2. Error() string için şu değeri döndüren DivisionError yöntemini uygulayın: "division error: cannot divide [dividend] by [divisor]"
  3. Error() string için şu değeri döndüren ValidationError yöntemini uygulayın: "validation error: invalid [field] value [value]"
  4. İlk girdiyi virgüllere göre bölerek operation, num1, num2 ve precision değerlerini elde edin
  5. İkinci girdiyi virgüllere göre bölerek hesap makinesi adını ve modu elde edin
  6. Dize biçimindeki sayıları float64 türüne, precision değerini ise int türüne dönüştürün
  7. İki float64 parametresi alan ve (float64, error) döndüren bir safeDivide işlevi oluşturun:
    • Bölen 0 ise, 0 ve dividend ile divisor değerlerini içeren bir DivisionError döndürün
    • Dividend negatifse ve mod "strict" ise, 0 ve field değeri ValidationError, value değeri ise dividend olan bir "dividend" döndürün
    • Divisor negatifse ve mod "strict" ise, 0 ve field değeri ValidationError, value değeri ise divisor olan bir "divisor" döndürün
    • Aksi takdirde bölme sonucunu ve nil değerini döndürün
  8. performCalculation sonucunu sarmalayan bir safeDivide işlevi oluşturun:
    • safeDivide bir hata döndürürse şu ifadeyle sarmalayın: "calculation failed in [calculator_name]: %w"
    • Başarılı olursa sonucu ve nil değerini döndürün
  9. performCalculation işlevini çağırın ve sonucu ele alın:
    • Hata yoksa: "Calculation successful: [result_formatted_to_precision_decimal_places]" yazdırın
    • Hata varsa: "Calculation failed: [error_message]" yazdırın
  10. Sarmalanmış hata içindeki belirli hata türlerini denetlemek için errors.As kullanın:
    • "Checking for division error: [true/false]" yazdırın
    • "Checking for validation error: [true/false]" yazdırın
  11. Bir DivisionError bulunursa ayrıntılarını yazdırın:
    • "Division Error Details:"
    • "Dividend: [dividend]"
    • "Divisor: [divisor]"
  12. Bir ValidationError bulunursa ayrıntılarını yazdırın:
    • "Validation Error Details:"
    • "Field: [field]"
    • "Value: [value]"
  13. Son bir özet görüntüleyin:
    • "Calculator Summary:"
    • "Name: [calculator_name]"
    • "Mode: [mode]"
    • "Operation: [operation]"
    • Bölme işlemi için operation_symbol değerinin "/" olduğu "Input: [num1] [operation_symbol] [num2]"
    • "Precision: [precision] decimal places"
    • "Status: [Success/Failed]"

Girdi dizelerini virgüllere göre bölmek için strings paketini, dizeleri sayılara dönüştürmek için strconv paketini, errors için errors.As paketini ve hata sarmalama ile biçimlendirme için fmt paketini kullanın. Bu görev, farklı hata türleri hakkında ayrıntılı bilgiler sağlayan sağlam hata işleme sistemleri oluşturmak için özel hata türlerinin, hata sarmalamanın ve uygun hata denetiminin nasıl birlikte çalıştığını gösterir.

Kendin dene

package main

import (
	"errors"
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// Girdiyi oku
	var operationInput string
	var settingsInput string
	fmt.Scanln(&operationInput)
	fmt.Scanln(&settingsInput)
	
	// İşlem girdisini ayrıştır (işlem,sayı1,sayı2,hassasiyet)
	operationParts := strings.Split(operationInput, ",")
	operation := operationParts[0]
	num1, _ := strconv.ParseFloat(operationParts[1], 64)
	num2, _ := strconv.ParseFloat(operationParts[2], 64)
	precision, _ := strconv.Atoi(operationParts[3])
	
	// Ayar girdisini ayrıştır (hesap_makinesi_adı,mod)
	settingsParts := strings.Split(settingsInput, ",")
	calculatorName := settingsParts[0]
	mode := settingsParts[1]
	
	// YAPILACAK: Kodunuzu aşağıya yazın
	// 1. Error() metotlarına sahip DivisionError ve ValidationError yapılarını oluşturun
	// 2. safeDivide fonksiyonunu uygulayın
	// 3. performCalculation fonksiyonunu uygulayın
	// 4. performCalculation fonksiyonunu çağırın ve sonuçları işleyin
	// 5. Belirli hata türlerini kontrol etmek için errors.As kullanın
	// 6. Bulunursa hata ayrıntılarını yazdırın
	// 7. Nihai özeti görüntüleyin
	
}

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi