Section 4
4-dars — Foydalanuvchidan kiritish
fmt.Scan, & (pointer) operatori, Scan cheklovlari va profit kalkulyatori mashqi
Hozirgacha qiymatlarni kod ichida o'zimiz yozardik. Endi dasturni foydalanuvchidan so'rashga o'rgatamiz — u terminalga raqam kiritadi, dastur o'qib oladi.
fmt.Scan bilan o'qish
fmt paketi nafaqat ekranga chiqarish, balki terminaldan ma'lumot o'qish funksiyasini ham beradi — bu Scan. U terminalni foydalanuvchi kiritishi uchun "skanerlaydi".
package main
import (
"fmt"
"math"
)
func main() {
const inflationRate = 2.5
var investmentAmount float64
var years float64
expectedReturnRate := 5.5
fmt.Print("Investment Amount: ")
fmt.Scan(&investmentAmount)
fmt.Print("Expected Return Rate: ")
fmt.Scan(&expectedReturnRate)
fmt.Print("Years: ")
fmt.Scan(&years)
futureValue := investmentAmount * math.Pow(1+expectedReturnRate/100, years)
futureRealValue := futureValue / math.Pow(1+inflationRate/100, years)
fmt.Println(futureValue)
fmt.Println(futureRealValue)
}Dasturni ishga tushirsangiz, u to'xtab, sizdan raqam kutadi. Yozib Enter bossangiz — davom etadi.
Foydalanuvchiga nima kutilayotganini bildirish uchun
Scandan oldin"Investment Amount: ").Printlnemas,
Qiymatsiz e'lon
var investmentAmount float64Bu yerda = ... yo'q — qiymatni foydalanuvchi beradi, shuning uchun Go null qiymat (0) qo'yadi.
Diqqat: bunday holatda tipni qo'lda yozish shart (float64), chunki boshlang'ich qiymat yo'q — Go tipni o'zi aniqlay olmaydi. Va := ishlatib bo'lmaydi (:= qiymat talab qiladi). Qiymatsiz e'lon faqat var + tip bilan bo'ladi.
& operatori — eng muhim joy
Diqqat qiling:
fmt.Scan(&investmentAmount)Nega & belgisi bor? Scan foydalanuvchi kiritgan qiymatni o'zgaruvchining ichiga yozishi kerak. Buning uchun unga o'zgaruvchining manzili (xotirada qayerda turishi) kerak — qiymati emas.
investmentAmount→ qiymatni beradi (masalan0)&investmentAmount→ o'zgaruvchining manzilini beradi ("qiymat shu yerda turibdi")
& ni shunday o'qing: "...ning manzili". Bu manzil pointer (ko'rsatkich) deyiladi. Scan shu manzilga borib, yangi qiymatni yozadi.
Pointerlar Go'da muhim va murakkabroq mavzu — keyinroq chuqur o'rganamiz. Hozircha shuni bilsangiz yetarli:
Scanga&o'zgaruvchiuzatiladi.&ni unutsangiz, dastur kiritilgan qiymatni saqlay olmaydi — bu boshlovchilar tez-tez qiladigan xato.
Aytgancha, Scan o'zi ham natija qaytaradi (nechta qiymat o'qigani), lekin bu yerda u bizga kerak emas, e'tibor bermaymiz.
fmt.Scan cheklovi
Scan bitta so'z yoki raqamni oson o'qiydi, lekin bir nechta so'zdan iborat matnni (masalan to'liq ism, bo'shliq bilan) qiyin o'qiydi. Hozircha bizga faqat raqamlar kerak, shuning uchun bu muammo emas. Murakkabroq kiritish kerak bo'lganda, kursning keyingi qismlarida muqobil usullarni ko'rasiz.
Mashq: profit kalkulyatori
Endi bilganlaringizni yangi dasturda qo'llang. Foydalanuvchidan Revenue (daromad), Expenses (xarajat), Tax Rate (soliq %) so'rab, foydani hisoblang:
package main
import "fmt"
func main() {
var revenue float64
var expenses float64
var taxRate float64
fmt.Print("Revenue: ")
fmt.Scan(&revenue)
fmt.Print("Expenses: ")
fmt.Scan(&expenses)
fmt.Print("Tax Rate: ")
fmt.Scan(&taxRate)
ebt := revenue - expenses // soliqdan oldingi foyda (EBT)
profit := ebt * (1 - taxRate/100) // soliqdan keyingi foyda
ratio := ebt / profit
fmt.Println(ebt)
fmt.Println(profit)
fmt.Println(ratio)
}Maslahat:
revenue,expenses,taxRatenifloat64qiling — shunda foydalanuvchi25.8kabi kasrli qiymat ham kirita oladi va konvertatsiya kerak bo'lmaydi.
O'zingiz sinab ko'ring
- Investitsiya kalkulyatorini ishga tushiring va turli qiymatlar kiriting.
- Bitta
&ni o'chirib ko'ring (masalanfmt.Scan(years)) — qanday xato chiqadi? var years float64danfloat64ni olib tashlang — qanday xato chiqadi? Nega?- Profit kalkulyatorini o'zingiz boshidan yozing (qoraga qaramasdan).