پروژه: ماشینحساب
پروژه عملی: ساخت ماشینحساب کامل با توابع، struct، خطاها و switch.
پروژه ۱: ماشینحساب
در این پروژه همه آموختههایمان را کنار هم میگذاریم: توابع، مدیریت خطا، switch، struct و حلقهها.
نیازمندیها
- چهار عمل اصلی: جمع، تفریق، ضرب، تقسیم
- مدیریت خطای تقسیم بر صفر
- عملگر توان و باقیمانده
- تابع calculate با الگوی (result, error)
طراحی
calculate(a float64, op string, b float64) (float64, error)
مثال:
calculate(10, "+", 5) ← 15, nil
calculate(10, "/", 0) ← 0, error!
پیادهسازی گامبهگام
گام ۱: تابع اصلی با مدیریت خطا
func calculate(a float64, op string, b float64) (float64, error) {
switch op {
case "+":
return a + b, nil
case "-":
return a - b, nil
case "*":
return a * b, nil
case "/":
if b == 0 {
return 0, fmt.Errorf("تقسیم بر صفر!")
}
return a / b, nil
case "%":
return math.Mod(a, b), nil
case "^":
return math.Pow(a, b), nil
default:
return 0, fmt.Errorf("عملگر ناشناخته: %s", op)
}
}
گام ۲: تاریخچه با Slice
type History struct {
Expression string
Result float64
}
var history []History
history = append(history, History{
Expression: "10 + 5",
Result: 15,
})
گام ۳: نمایش خروجی قالببندیشده
fmt.Printf("%g %s %g = %g\n", a, op, b, result)
نکات آموزشی این پروژه
- الگوی (result, error): تقسیم بر صفر و عملگر نامعتبر مدیریت شد
- switch روی رشته: مسیرهای عملگرها تمیز تفکیک شدند
- math.Pow و math.Mod: توابع ریاضی کتابخانه استاندارد
- Printf با %g: نمایش هوشمند اعداد اعشاری
پیشنهاد توسعه: عملگرهای بیشتر (جذر، لگاریتم)، تاریخچه با Map، پشتیبانی از پرانتز!
این مبحث بخشی از دوره آموزش کامل گو است.