Build Your Own Functions
Hozirgacha barcha kodingiz main() ichida yashadi. Bu kichik dasturlar uchun ishlaydi, lekin bir xil logika bir nechta joyda kerak bo'lsa-chi?
// yuklashdan oldin...
if fileSizeMB > bandwidthMB { fmt.Println("too large") }
// yuklab olishdan oldin...
if fileSizeMB > bandwidthMB { fmt.Println("too large") }Agar tekshiruv ishlash tarzini o'zgartirish kerak bo'lsa, har bir nusxani yangilashingiz kerak bo'ladi. Funksiyalar buni hal qiladi. Siz logikani bir marta yozasiz, unga nom berasiz va kerak bo'lgan joyda chaqirasiz.
Funksiyaning tuzilishi
func remainingSpace(diskMB, fileMB int) int {
return diskMB - fileMB
}
left := remainingSpace(1000, 350) // left is 650| QISM | MISOL | NIMA QILADI |
|---|---|---|
| Kalit so'z | func | Go'ga funksiya aniqlayotganingizni bildiradi |
| Nom | remainingSpace | Bu funksiyani keyinroq qanday chaqirasiz |
| Parametrlar | (diskMB, fileMB int) | Funksiyaga kerak bo'lgan kirishlar. Tartib muhim: 1000 — diskMB ga, 350 — fileMB ga boradi |
| Qaytish turi | int | Funksiya qaytaradigan qiymat turi |
return | return diskMB - fileMB | Chaqiruvchiga qiymat yuboradi va funksiyadan chiqadi. Qaytish turiga mos bo'lishi kerak |
Agar ikkita parametr bir xil turga ega bo'lsa, uni faqat bir marta yozasiz: diskMB, fileMB int — diskMB int, fileMB int o'rniga.
Funksiyalar faqat butun sonlar bilan cheklanmagan, va ular ayirish qilishi ham shart emas. Mana satr qabul qilib, satr qaytaradigan funksiya:
func fullPath(dir, file string) string {
return dir + "/" + file
}
path := fullPath("/var/log", "server.log") // path is "/var/log/server.log"Ish qanday tur va amallarni talab qilsa, ichida shular bo'ladi.
Har bir funksiya biror narsa qaytarishi shart emas. Agar qaytish turi bo'lmasa, return kalit so'zi umuman kerak emas:
func logTransfer(filename string) {
fmt.Println("Transferring:", filename)
}>_ Exercise
downloadTime(fileSizeMB, speedMBps int) int nomli funksiya yozing, bunda fileSizeMB — fayl hajmi megabaytlarda, speedMBps esa yuklab olish tezligi (sekundiga megabayt).
Agar tezlik nol yoki manfiy bo'lsa, noto'g'ri tezlikni bildirish uchun -1 qaytaring. Aks holda, fileSizeMB / speedMBps ni qaytaring.
Misollar:
- •
downloadTime(500, 50)→10 - •
downloadTime(1000, 100)→10 - •
downloadTime(100, 0)→-1(nolga bo'lib bo'lmaydi)
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Funksiyani bir marta aniqlang, uni istalgan joyda chaqiring. Agar logika o'zgarsa, uni faqat bitta joyda tuzatasiz.
NEXT UP
Multiple Return Values
$ go run main.go
Kodingizni ishga tushiring