Published on

Swiftda parametrli va qiymat qaytaradigan funksiya

Authors

Funksiya parametri — bu funksiyaga qabul qilinadigan qiymat.

Funksiya parametrlari va qaytariladigan qiymatlar haqida o‘rganishdan oldin, Swift funksiyalari haqida bilib oling.

Keling misolni ko‘ramiz,

func addNumbers(a: Int, b: Int) {
  var sum = a + b
  print("Yig‘indi:", sum)
}

addNumbers(a: 2, b: 3)

Natija

Yig‘indi: 5

Yuqoridagi misolda addNumbers() funksiyasi ikki parametr qabul qiladi: a va b. E’tibor bering:

addNumbers(a: 2, b: 3)

Bu yerda a: 2, b: 3 — mos ravishda a va b parametrlari 2 va 3 qiymatlarni olishini bildiradi.

Funksiya chaqiruvi davomida beriladigan qiymatlar argumentlar deb ataladi.

Funksiya parametrlari uchun standart qiymatlar

Swiftda parametrlar uchun standart qiymat berish mumkin.

Buning uchun = operatori ishlatiladi. Misol:

func addNumbers(a: Int = 7, b: Int = 8) {
  var sum = a + b
  print("Yig‘indi:", sum)
}

// ikki argument bilan chaqirish
addNumbers(a: 2, b: 3)

// bitta argument bilan chaqirish
addNumbers(a: 2)

// argumentsiz chaqirish
addNumbers()

Natija

Yig‘indi: 5
Yig‘indi: 10
Yig‘indi: 15

Bu yerda:

func addNumbers(a: Int = 7, b: Int = 8)

Parametrlarning standart qiymatlari mos ravishda 7 va 8 qilib berilgan.

Nomlangan argument (Argument Label)

Swiftda funksiyani yanada ifodali qilish uchun argument yorliqlaridan foydalaniladi.

Misol:

func sum(of a: Int, and b: Int) {
  print("Yig‘indi:", a + b)
}

sum(of: 2, and: 3)

Natija

Yig‘indi: 5

Bu ko‘rinish quyidagiga qaraganda ancha ma’noli:

sum(a: 2, b: 3)

Argument yorliqlarini olib tashlash

Agar parametrdan oldin _ qo‘ysak, argument yorliqlari ishlatilmaydi.

func sum(_ a: Int, _ b: Int) {
  print("Yig‘indi:", a + b)
}

sum(2, 3)

Natija

Yig‘indi: 5

Variadic parametrlar (ko‘p miqdordagi argumentlar)

Ba’zan argumentlar soni oldindan noma’lum bo‘ladi. Bunday holatda variadic parametrlar ishlatiladi.

... belgisi parametrning variadic ekanini bildiradi.

// bir nechta sonlarning yig‘indisini topish

func sum(numbers: Int...) {
  var result = 0
  for num in numbers {
    result = result + num
  }
  
  print("Yig‘indi = \(result)")
}

sum(numbers: 1, 2, 3)
sum(numbers: 4, 9)

Natija

Yig‘indi = 6
Yig‘indi = 13

numbers variadic bo‘lgani uchun u funksiya ichida massiv sifatida ishlaydi.

inout parametrlar

Oddiy parametrlar funksiyada o‘zgartirilmaydi — ular konstantadir.

Masalan, ushbu kod xato beradi:

func changeName(name: String) {
  if name == "" {
    // Xato yuz beradi
    name = "Ross"
  }
}

Xato:

'let' constantiga qiymat berib bo‘lmaydi

Parametrni o‘zgaruvchan qilish uchun inout ishlatiladi:

func changeName(name: inout String) {
  if name == "Ross" {
      name = "Joey"
  }
}

var userName = "Ross"
print("Oldin:", userName)

changeName(name: &userName)

print("Keyin:", userName)

Natija

Oldin: Ross
Keyin: Joey

inout parametrga argument berishda & belgisi ishlatiladi.

Funksiyada qaytariladigan qiymat (Return Value)

Funksiya qaytariladigan qiymatga ega bo‘lishi mumkin. Buning uchun return operatori ishlatiladi.

func addNumbers(a: Int, b: Int) -> Int {
  var sum = a + b
  return sum
}

let result = addNumbers(a: 2, b: 3)

print("Yig‘indi:", result)

Natija

Yig‘indi: 5

Funksiyadan bir necha qiymat qaytarish

Funksiya bir nechta qiymat qaytarishi ham mumkin — tuple yordamida.

func checkMarks() -> (String, Int) {
  ...
  return (message, marks)
}

Bu yerda qaytarilayotgan qiymatlar tartibi qo‘sh tirnoq ichidagi tuple tartibi bilan mos bo‘lishi kerak.

Misol:

func compute(number: Int) -> (Int, Int, Int) {

  var square = number * number
  var cube = square * number
  
  return (number, square, cube)
}

var result = compute(number: 5)

print("Son:", result.0)
print("Kvadrat:", result.1)
print("Kub:", result.2)

Natija

Son: 5
Kvadrat: 25
Kub: 125

Bu yerda result bir nechta qiymatlarni saqlovchi tuple bo‘lib, ular indeks orqali olinadi.