ETİKETLER
ios
Dinamik(Dynamic) ve Statik(Static) Bağlama (Binding)
Dinamik bağlama, derleyicinin çağrılan fonksiyon ya da değişken hakkındaki çözümlemeleri ancak icra zamanında (run time) yapabilmesi durumudur. Dinamik bağlamaya literatürde geç bağlama (late binding) adı da verilmektedir. Örneğin bir A sınıfından bir B alt sınıfı ürettiğimizi düşünelim.
Sayma Tipi (Enumeration)
Sayma tipi, C’de de mevcut olan ve bir grup bilgiyi birlikte tanımlayan bir yapıdır. Ancak Swift’te C’den farklı olarak tanımlanan sayma tipi yapının elemanlarına tam sayı karşılıklar atanmaz.
Sayma tipinin yazılış biçimi aşağıdaki gibidir:
enum Ad{
// Grup bilgi tanımı
}
Aşağıda daha anlaşılır bir sayma tipi tanımı verilmiştir:
Yapılar (Structures)
Swift’teki yapı (structure), esasında C dilindeki yapı (struct) ile benzerlik gösterir fakat arada büyük bir fark da mevcuttur. Swift’teki yapılarda değişkenler yanında metotlar da tanımlanabilir; oysa C’de bu mevcut değildir. Aşağıdaki örnekte, sınıf konusunda verdiğimiz dikdörtgen örneğini yapı ile gerçekleştiriyoruz. Aradaki büyük benzerliğe dikkat ediniz:
ÖRNEK:
Delege Etme (Delegaation)
Delege etme özelliği, nesneye yönelik programlamanın ve Swift’in önemli özelliklerinden biridir. Delege etme deyince anlaşılan şudur: bir sınıf ya da yapıdan üretilen bir nesnenin kendi sorumluluklarından bazılarını başka bir sınıf nesnesine aktarabilme mekanizmasıdır. Genellikle bir protocol içinde delege edilecek sorumluluklar tanımlanır. Delegation özelliği genellikle, belirli tipteki eylemlere reaksiyon vermek ya da kaynak tipi ile ilgilenmeden dış kaynaktan veri almak gibi işlemlerde kullanılır.
İç İçe (Nested) Fonksiyonlar
Şu ana kadar verdiğimiz tüm fonksiyon örnekleri global fonksiyonlardı yani bunların tanımı ve kullanımı global ölçekte idi (Programın tümü tarafından kullanılabilir). Swift’te ikinci bir imkan ise bir fonksiyonun gövdesi içinde başka bir fonksiyon tanımlamaktır. Bu tür fonksiyonlara ise iç içe (nested) fonksiyon adı verilir.
Fonksiyon içinde tanımlanan fonksiyonlar özel durumlar dışında dış dünyaya kapalıdır ve sadece tanımlandıkları fonksiyon içinde geçerlidirler.
ÖRNEK:
Kapatma (Closure)
Swiftte kapatma adı verilen yapılar C ve Objective C’deki blok yapılarına ya da başka dillerdeki lambda yapılarına benzer.
Global ve iç içe kullanılmış fonksiyonlar aslında kapatmaların özel halleridir. Global fonksiyonlar adı olan fakat değer almayan kapatmalardır. İç içe (nested) fonksiyonlar ise ismi olan ve değer kullanan kapatmalardır.
Nihayet normal kapatmalar ise isimsiz olarak kullanılan kapatmalardır.
Bir kapatmanın genel yazılımı,
{ (Parametreler) -> Gönderdiği Tip in
Deyimler
}
şeklindedir.
Jenerikler (Generics)
Jenerik kod, program yazan kişiler için,daha esnek, yeniden kullanılabilir fonksiyonlar ve diğer tiplerle kolayca birlikte çalışan tipler oluşturma imkanı sağlar.
Jenerik kod üretme, Swift’in en önemli ve faydalı özelliklerinden biridir. Örneğin, dizi ve sözlükler aslında jenerik koleksiyonlardır. Jenerik fonksiyonlar ise genel bir şekilde yazılıp her tip ile çalışabilir:
ÖRNEK:
Aşağıdaki DiziOlus() adlı fonksiyon jenerik tipte bir fonksiyon olup hem Int, hem Double hem de String tipi ile çalışmaktadır:
Bir Fonksiyonun Parametre Listesinde Başka Bir Fonksiyonun Kullanılması
Swift’in önemli özelliklerinden biri de, bir fonksiyonun formel parametre listesi içinde başka bir fonksiyonun yer almasıdır. Aşağıdaki kod parçasında, v fonksiyonunun tanımına dikkat ediniz:
func u(a:Int,b:Int)->Bool
{if a == b { return true }
else { return false}
}
var kontrol : (Int,Int) -> Bool = u
v fonksiyonunun parametrelerinden biri hatta ilki, kontrol adlı ve kontrol:(Int,Int)->Bool şeklinde tanımlanmış olan bir fonksiyondur:
Fonksiyon Tipinde Sabit ya da Değişken Tanımlamak
Swift’in ilginç özelliklerinden biri de fonksiyon tipinde değişken tanımlamak ve bu değişkeni aynen fonksiyon gibi kullanabilmektir.
Örneğin, aşağıda u adlı bir fonksiyon tanımlanmıştır; bu fonksiyon iki Int parametre alıp Bool tipi bir sonuç göndermektedir:
func u(a:Int,b:Int)->Bool
{if a == b { return true }
else { return false}
}
Şimdi, aşağıdaki gibi bir ifade ile kontrol adlı değişken, u fonksiyon tipinde ve aynen onun özelliklerine sahip olarak tanımlanmaktadır:
In-Out Türü Parametreler
Bir Swift fonksiyonunda Inout türünde tanımlanan bir formel parametrenin değeri fonksiyon içinde değiştirilince bu değişim çağıran program parçasına da aksettirilir.
Aşağıdaki örnekte a ve b Inout türünde formel parametrelerdir.
vvv(&xx, &yy)
komutu ile vvv fonksiyonu çağrılmakta ve xx’in değeri 40 a’ya ve yy’nin değeri 80 ise b’ye geçirilmektedir: a=40 ve b=80 olmuştur.
Fonksiyon içinde a=b+2 komutu ile a=82 olarak değişmektedir.