Swift - İşlevler

Bir işlev, belirli bir görevi gerçekleştirmek için birlikte düzenlenen bir dizi ifadedir. Swift 4 işlevi, basit bir C işlevi kadar basit ve bir Objective C dil işlevi kadar karmaşık olabilir. Fonksiyon çağrıları içinde yerel ve global parametre değerlerini geçirmemize izin verir.

  • Function Declaration - derleyiciye bir işlevin adı, dönüş türü ve parametreleri hakkında bilgi verir.

  • Function Definition - Fonksiyonun gerçek gövdesini sağlar.

Swift 4 işlevleri parametre türünü ve dönüş türlerini içerir.

İşlev Tanımı

Swift 4'te, bir işlev "func" anahtar sözcüğü ile tanımlanır. Bir fonksiyon yeni tanımlandığında, fonksiyona girdi 'parametreler' olarak bir veya birkaç değeri alabilir ve ana gövdedeki fonksiyonları işleyecek ve değerleri çıkış 'dönüş türleri' olarak fonksiyonlara geri gönderecektir.

Her işlevin, gerçekleştirdiği görevi tanımlayan bir işlev adı vardır. Bir işlevi kullanmak için, o işlevi adıyla "çağırırsınız" ve işlevin parametre türleriyle eşleşen giriş değerlerini (bağımsız değişkenler olarak bilinir) iletirsiniz. İşlev parametreleri aynı zamanda "tuples" olarak da adlandırılır.

Bir işlevin bağımsız değişkenleri her zaman işlevin parametre listesiyle aynı sırada sağlanmalıdır ve dönüş değerlerinin ardından → gelir.

Sözdizimi

func funcname(Parameters) -> returntype {
   Statement1
   Statement2
   ---
   Statement N
   return parameters
}

Aşağıdaki koda bir göz atın. Öğrencinin adı, 'öğrenci' işlevi içinde bildirilen dize veri türü olarak bildirilir ve işlev çağrıldığında öğrencinin adını döndürür.

func student(name: String) -> String {
   return name
}

print(student(name: "First Program"))
print(student(name: "About Functions"))

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

First Program
About Functions

Bir Fonksiyon Çağırma

Örneğin, sayıları görüntülemek için 'display' adında bir işlev tanımladığımızı varsayalım. 'Display' işlev adlı bir işlev, ilk önce tamsayı veri türünü tutan 'no1' bağımsız değişkeni ile başlatılır. Daha sonra 'no1' argümanı, bundan sonra aynı veri tipi tamsayıya işaret edecek olan 'a' argümanına atanır. Şimdi 'a' argümanı işleve döndürülür. Burada display () işlevi tamsayı değerini tutacak ve işlev her çağrıldığında tamsayı değerlerini döndürecektir.

func display(no1: Int) -> Int {
   let a = no1
   return a
}

print(display(no1: 100))
print(display(no1: 200))

Oyun alanını kullanarak yukarıdaki programı çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

100
200

Parametreler ve Dönüş Değerleri

Swift 4, esnek fonksiyon parametreleri ve basitten karmaşık değerlere dönüş değerlerini sağlar. C ve Objective C'ye benzer şekilde, Swift 4'teki işlevler de birkaç şekilde olabilir.

Parametreli Fonksiyonlar

Bir işleve, parametre değerlerini işlevin gövdesine ileterek erişilir. Fonksiyon içinde tuple olarak birden fazla parametre değerini tekliye geçirebiliriz.

func mult(no1: Int, no2: Int) -> Int {
   return no1*no2
}

print(mult(no1: 2, no2: 20))
print(mult(no1: 3, no2: 15))
print(mult(no1: 4, no2: 30))

Oyun alanını kullanarak yukarıdaki programı çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

40
45
120

Parametresiz Fonksiyonlar

Herhangi bir parametre içermeyen fonksiyonlara da sahip olabiliriz.

Sözdizimi

func funcname() -> datatype {
   return datatype
}

Aşağıda, parametresiz işleve sahip bir örnek verilmiştir -

func votersname() -> String {
   return "Alice"
}
print(votersname())

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

Alice

Dönüş Değerli Fonksiyonlar

İşlevler ayrıca dönüş türleri olarak dize, tamsayı ve kayan veri türü değerlerini döndürmek için kullanılır. Belirli bir dizi işlevindeki en büyük ve en küçük sayıyı bulmak için 'ls', büyük ve küçük tamsayı veri türleriyle bildirilir.

Bir dizi tamsayı değerlerini tutacak şekilde başlatılır. Ardından dizi işlenir ve dizideki her bir değer okunur ve önceki değeri için karşılaştırılır. Değer öncekinden daha küçük olduğunda, 'küçük' bağımsız değişkende saklanır, aksi takdirde 'büyük' ​​bağımsız değişkende saklanır ve değerler işlev çağrılarak döndürülür.

func ls(array: [Int]) -> (large: Int, small: Int) {
   var lar = array[0]
   var sma = array[0]

   for i in array[1..<array.count] {
      if i < sma {
         sma = i
      } else if i > lar {
         lar = i
      }
   }
   return (lar, sma)
}

let num = ls(array: [40,12,-5,78,98])
print("Largest number is: \(num.large) and smallest number is: \(num.small)")

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

Largest number is: 98 and smallest number is: -5

Dönüş Değeri Olmayan Fonksiyonlar

Bazı işlevler, işlev içinde herhangi bir dönüş değeri olmadan bildirilmiş bağımsız değişkenlere sahip olabilir. Aşağıdaki program beyan edera ve bsum () işlevinin bağımsız değişkenleri olarak. işlevin içinde bağımsız değişkenler için değerlera ve b sum () işlev çağrısı ile geçirilir ve değerleri yazdırılır, böylece dönüş değerleri ortadan kaldırılır.

func sum(a: Int, b: Int) {
   let a = a + b
   let b = a - b
   print(a, b)
}

sum(a: 20, b: 10)
sum(a: 40, b: 10)
sum(a: 24, b: 6)

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

30 20
50 40
30 24

İsteğe Bağlı İade Türlerine Sahip İşlevler

Swift 4, bir güvenlik önlemi getirerek sorunlardan kurtulmak için 'isteğe bağlı' özelliği sunar. Örneğin, işlev değerlerini döndürme türünü tamsayı olarak ilan ettiğimizi, ancak işlev bir dize değeri veya sıfır değeri döndürdüğünde ne olacağını düşünün. Bu durumda derleyici bir hata değeri döndürür. Bu sorunlardan kurtulmak için 'isteğe bağlı' tanıtılmaktadır.

İsteğe bağlı işlevler, 'değer' ve 'sıfır' olmak üzere iki biçimde olacaktır. Anahtar ayrılmış karakterle "İsteğe bağlı" dan bahsedeceğiz? " başlığın bir değer mi yoksa sıfır değer mi döndürdüğünü kontrol etmek için.

func minMax(array: [Int]) -> (min: Int, max: Int)? {
   if array.isEmpty { return nil }
   var currentMin = array[0]
   var currentMax = array[0]
   
   for value in array[1..<array.count] {
      if value < currentMin {
         currentMin = value
      } else if value > currentMax {
         currentMax = value
      }
   }
   return (currentMin, currentMax)
}

if let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) {
   print("min is \(bounds.min) and max is \(bounds.max)")
}

Oyun alanını kullanarak yukarıdaki programı çalıştırdığımızda, aşağıdaki sonucu alıyoruz -

min is -6 and max is 109

'' Opsiyonlar '' sıfır 'veya anlamsız değerleri kontrol etmek için kullanılır, böylece hata ayıklamada çok zaman harcanır ve kodu kullanıcı için verimli ve okunabilir hale getirir.

Fonksiyonlar Yerel Vs Harici Parametre Adları

Yerel Parametre Adları

Yerel parametre adlarına yalnızca işlevin içinden erişilir.

func sample(number: Int) {
   print(number)
}

Burada funcörnek bağımsız değişken numarası, sample () fonksiyonu tarafından dahili olarak erişildiği için dahili değişken olarak ilan edilir. Burada 'sayı' yerel değişken olarak ilan edilir, ancak değişkene referans aşağıdaki ifade ile fonksiyonun dışında yapılır -

func sample(number: Int) {
   print(number)
}

sample(number: 1)
sample(number: 2)
sample(number: 3)

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

1
2
3

Harici Parametre Adları

Harici parametre adları, amacını daha net hale getirmek için bir işlev parametresini adlandırmamıza izin verir. Örneğin, aşağıda iki işlev parametresini adlandırabilir ve ardından bu işlevi aşağıdaki gibi çağırabilirsiniz -

func pow(firstArg a: Int, secondArg b: Int) -> Int {
   var res = a
   for _ in 1..<b {
      res = res * a
   }
   print(res)
   return res
}

pow(firstArg:5, secondArg:3)

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

125

Değişken Parametreler

Fonksiyonu birden fazla argümanla tanımlamak istediğimizde, üyeleri 'variadic' parametreler olarak ilan edebiliriz. Parametreler, parametre adından sonra (···) ile değişken olarak belirtilebilir.

func vari<N>(members: N...){
   for i in members {
      print(i)
   }
}

vari(members: 4,3,5)
vari(members: 4.5, 3.1, 5.6)
vari(members: "Swift 4", "Enumerations", "Closures")

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

4
3
5
4.5
3.1
5.6
Swift 4
Enumerations
Closures

Sabit, Değişken ve G / Ç Parametreleri

İşlevler varsayılan olarak parametreleri 'sabit' olarak kabul ederken, kullanıcı işlevlere ilişkin bağımsız değişkenleri de değişken olarak bildirebilir. 'Let' anahtar kelimesinin sabit parametreleri bildirmek için kullanıldığını ve değişken parametrelerin 'var' anahtar sözcüğü ile tanımlandığını daha önce tartışmıştık.

Swift 4'teki G / Ç parametreleri, işlev çağrısından sonra değerleri değiştirilse bile parametre değerlerini koruma işlevi sağlar. İşlev parametresi tanımının başlangıcında, üye değerlerini korumak için 'inout' anahtar sözcüğü bildirilmiştir.

Değerleri işleve 'içinde' geçirildiği ve değerlerine işlev gövdesi tarafından erişildiği ve değiştirildiği ve orijinal bağımsız değişkeni değiştirmek için işlevden 'dışarı' geri döndürüldüğü için 'inout' anahtar sözcüğünü türetir.

Değişkenler, tek başına değerleri işlevin içinde ve dışında değiştirildiğinden, yalnızca içeri-dışarı parametresi için bir bağımsız değişken olarak iletilir. Dolayısıyla, dizeleri ve değişmezleri in-out parametreleri olarak bildirmeye gerek yoktur. Bir değişken adından önce '&', argümanı in-out parametresine geçirdiğimizi ifade eder.

func temp(a1: inout Int, b1: inout Int) {
   let t = a1
   a1 = b1
   b1 = t
}

var no = 2
var co = 10
temp(a1: &no, b1: &co)
print("Swapped values are \(no), \(co)")

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

Swapped values are 10, 2

Fonksiyon Tipleri ve Kullanımı

Her işlev, girdi parametrelerini dikkate alarak belirli işlevi takip eder ve istenen sonucu verir.

func inputs(no1: Int, no2: Int) -> Int {
   return no1/no2
}

Aşağıda bir örnek verilmiştir -

func inputs(no1: Int, no2: Int) -> Int {
   return no1/no2
}

print(inputs(no1: 20, no2: 10))
print(inputs(no1: 36, no2: 6))

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

2
6

Burada işlev iki bağımsız değişkenle başlatılır no1 ve no2 tamsayı veri türleri olarak ve dönüş türü de 'int' olarak bildirilir

Func inputstr(name: String) -> String {
   return name
}

Burada işlev şu şekilde bildirilir: string veri tipi.

İşlevlerde ayrıca void veri türleri ve bu tür işlevler hiçbir şey döndürmez.

func inputstr() {
   print("Swift 4 Functions")
   print("Types and its Usage")
}
inputstr()

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

Swift 4 Functions
Types and its Usage

Yukarıdaki işlev, bağımsız değişken ve dönüş değeri olmayan bir void işlevi olarak bildirilmiştir.

İşlev Türlerini Kullanma

Fonksiyonlar önce tamsayı, kayan nokta veya dize türü argümanlarla geçirilir ve daha sonra aşağıda belirtildiği gibi işleve sabitler veya değişkenler olarak aktarılır.

var addition: (Int, Int) -> Int = sum

Burada toplam, 'a' ve 'b' tamsayı değişkenlerine sahip bir işlev adıdır ve artık işlev adı eklemesine bir değişken olarak bildirilmiştir. Bundan sonra hem toplama hem de toplama işlevi, tamsayı veri türü olarak bildirilen aynı sayıda argümana sahiptir ve ayrıca tamsayı değerleri referans olarak döndürür.

func sum(a: Int, b: Int) -> Int {
   return a + b
}
var addition: (Int, Int) -> Int = sum
print("Result: \(addition(40, 89))")

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

Result: 129

Parametre Türleri ve Dönüş Türleri Olarak İşlev Türleri

İşlevin kendisini parametre türleri olarak başka bir işleve de aktarabiliriz.

func sum(a: Int, b: Int) -> Int {
   return a + b
}
var addition: (Int, Int) -> Int = sum
print("Result: \(addition(40, 89))")

func another(addition: (Int, Int) -> Int, a: Int, b: Int) {
   print("Result: \(addition(a, b))")
}
another(sum, 10, 20)

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

Result: 129
Result: 30

İç İçe İşlevler

İç içe geçmiş bir işlev, tesisin iç işlevi çağırarak dış işlevi çağırmasını sağlar.

func calcDecrement(forDecrement total: Int) -> () -> Int {
   var overallDecrement = 0
   func decrementer() -> Int {
      overallDecrement -= total
      return overallDecrement
   }
   return decrementer
}

let decrem = calcDecrement(forDecrement: 30)
print(decrem())

Yukarıdaki programı oyun alanını kullanarak çalıştırdığımızda, aşağıdaki sonucu elde ederiz -

-30