Swift Değişken ve Sabitler

713

Swift bilinen bir çok programlama dilinde olduğu gibi Int, String, boolean, Double, Float, dizi değişken tiplerini içerisinde barındırır. Bu değişken tiplerinin yanında Dictionary değişkenini de yenilik olarak sunmaktadır.

Swift değişken tanımlamaya olanak sunduğu gibi değişmeden kalan değerler için de tanımlama imkanı sunmaktadır. Değişmeden kalanlar için yazının ilerleyen kısımlarında “sabit” kelimesini kullanacağım. Sabitler kod boyunca değişemediği için güvenli bir şekilde her kullanımda aynı değer için sonuç almayı garanti etmektedirler.

Bilinen tip tanımlamalarının yanında swift bizlere “tuple” olarak isimlendirilen tip tanımlamasını da sunmaktadır. Tuple 0 ve daha fazla değerin bir değermiş gibi barındırılması anlamına gelmektedir. Bu bileşik yapı sayesinde fonksiyonlardan çoklu değer döndürme işlemi yapılabilmektedir. Bir yeni tip olarak karşımıza “Optionals” çıkmaktadır. Objective-C kullanıcılarının “nil” olarak bildiği bu tip iki farklı değere sahip olabilir ve bu değerler ile beraber bize “bir değer olup neye eşit olduğunu” veya “bir değer bulunmadığını” gösterir. Kodlama aşamasında çıktı aldıktan sonra bazı değişkenlerde bu ifadeye rastlayacağız. Optionals’ın sağladığı uyarı ile beraber güvenli bir kod yazma imkanını kendimiz elde edip, input’ların varlığını kontrol eden yapılar kullanacağız.

Değişkenler ve Sabitler

Giriş kısmında kısaca bahsetmiş olduğum sabit ve değişkenler konusuna biraz daha detaylı olarak bakalım. Öncelikle sabitlerin program boyunca değiştirilemeyeceğini kesinlikle bilmemiz gerekmektedir, aksi takdirde aldığınız hatanın neden kaynaklandığını anlamadan dakikalarınızı çıldırarak geçirebilirsiniz.

Sabit tanımlarken “let” anahtar kelimesini, değişken tanımlarken ise “var” anahtar kelimesini kullanırız.

Aynı zamanda tek bir anahtar kelime içerisinde birden fazla değişken de tanımlanabilmektedir.

Yukarıda verilen örneklerde oluşturduğumuz değişkenlerin veya sabitin tiplerini belirtmedik ve bu işlemi swift’e bıraktık. Kendimiz tip belirtme işlemi yapacak olsaydık “:” ifadesi ve yanında istediğimiz tipin adını girmemiz yeterli olacaktı.

Değişken veya sabitin çıktı olarak alınması için de aşağıdaki kullanım bir örnek olmaktadır.

 

Print fonksiyonu ile aynı zamanda daha kompleks çıktılar da alabiliriz.

 

Integer

Integer kesirli yapıda olmayan, işaretli (pozitif, sıfır, negatif) veya işaretli (sıfır, pozitif) sayılar için kullanılır. 8, 16, 32 ve 64 bit formu destekleri mevcuttur. İşaretsiz 8 bit form için UInt8 anahtar kelimesi kullanılır.

Aralıklar

Integer değerlerin aralığına erişmek mümkündür.

Yukarıdaki işlemlerin sonucunda min=0 ve max=65535 değerlerini elde edeceğiz.

Float

Kesirli sayılar için kullanacağımız veri tipi bilinen “Float” veri tip olacaktır. Kesirli sayılarında tanımlaması yapılabileceğinden aralık olarak Integer’dan çok daha büyük olacağı ortadadır. Float 32-bit formunda iş görmektedir eğer çok daha büyük sayılar ile işlem yapılacaksa 64-bit formuna sahip “Double” veri tipi kullanılmalıdır.

Sayısal Terimler

Aşağıda aynı sayının sırasıyla farklı tabanlarda nasıl tanımlandığına bakacağız.

10’lu kuvvetler için exponent (e) işlemi yapılmaktadır. Yani bir sayıyı 10 ve katları ile çarpmak veya bölmek istersek başvuracağımız bir yöntemdir. Kullanımı aşağıda verilmiştir.

Bu örneklerde “a” sabiti 10’un 3. kuvveti ile çarpılıyor, “b” değişkeni ise 10’un -3. kuvveti ile çarpılıyor yani 10’un 3. kuvvetine bölünüyor.

 

Bu işlemi onaltılık taban için yapacak olursak “p” anahtarını kullanmamız gerekecekti.

Bu noktada alıştırma olması açısından onaltılık taban için siz de deneyebilirsiniz.

Değişken tanımlarken okunulabilirlik açısından “-” işaretini kullanmamıza olanak sunulmaktadır.

Yukarıda tanımlanan iki sabitin değer olarak hiçbir farkları bulunmamaktadır.

Çevirmeler

Bir tipten diğer tipe çevirme işlemi yaparken sayı aralıklarına ve tanımlarına çok dikkat etmemiz gereklidir. Örneğin float bir değeri Int’e çevirdiğimiz zaman kesirli kısımları kalıcı olarak kaybedebileceğimizi unutmamalıyız. Tavsiye olarak daima küçük->büyük yönünde veri tipi değişikliği yapılması gerektiğini belirtmek isterim. Aksi bir dönüşüm yapılacaksa da eski değerin bir tutucu değişkende depolanması yararınıza olacaktır.

Yukarıdaki örnekte küçükten büyüğe doğru bir dönüşüm işlemi görülmektedir.

Tiplere Takma Ad Verme

Tiplere takma ad vermek ve kodlamanın geri kalanında yaratılacak değişken veya sabitlerin o takma ad ile yaratılması mümkündür bunun için “typealias” anahtar kelimesini kullanırız.

Yukarıdaki örnekte Int veri tipine “baris” takma adını verdikten sonra “baris” = Int tipinde değişken tanımladık.

Boolean

Genel programlamada olduğu gibi Swift’te de bazı kontroller için kullanılacak boolean veri tipi mevcuttur.

Yukarıdaki kod parçasında if else yapısının kontrolünü tanımlamış olduğum “baris” adlı bool verisi ile gerçekleştirdim. True değer verdiğim için if kod bloğu çalıştı.

Boolean veri tipini örnek olarak ileride geliştireceğimiz oyunların bitme, devam etme gibi durumlarında kullanacağız.

Tuples

Genel programlama dillerinde mevcut olan veri tiplerinden sonra Swift’in sunduğu yeniliklere ‘tuple’ ile başlıyoruz.

Tuple 0 ve daha fazla değerin bir değermiş gibi barındırılması anlamına gelmektedir. Bu bileşik yapı sayesinde fonksiyonlardan çoklu değer döndürme işlemi yapılabilmektedir.

Programlama geleneği olan “Hello World” çıktısı alma işlemini burada gerçekleştirelim.

 

Diziyi andıran tanımlama ve erişim şekliyle beraber tuple yapısını diziden bağımsız kılan özelliğine bakalım, farklı tiplerin bir arada kullanımı!

Tanımlanan bir tuple değişkeninin elemanlarını farklı değişkenlere atamak ta mümkündür.

Yukarıdaki kod bloğunun 2. satırında klasik dizilerde bir elemanın başka değişkene atılması işlemini gerçekleştirdim. 3. satırda ise tuple yapısının bütün elemanlarının başka değişkenlere atılması işlemini sizlere sundum.

Eğer istemediğimiz özellikler için yeni bir değişken yaratmak istemiyorsak, tuple içindeki bu özelliği ” _” işareti ile yok sayabiliriz.

Tuple yaratılırken aynı zamanda özelliklerin isimleri de verilip sonrasında erişilmek istenen özelliğe (0, 1, .. ) olarak değil özellik ismiyle erişmek mümkün olabilmektedir.

Optional

Optional bir değişkenin değerinin var olup olmadığı kodlama esnasında bilinmeyen durumlarda kullanılmaktadır.

Yukarıdaki iki örnek için konuşmak gerekirse, ilk örnekte öncesinde String olarak girilen ifadeyi daha sonra Int tipine değiştirmek istiyoruz. Bu örnekte String olarak girilen ifade 123 olduğu için bir sayısal değere sahiptir ve Int tipine dönüştürme işlemi gerçekleştirilebilir. Ancak ikinci örnekte ise “Hello World” ifadesinin açık bir sayısal değeri olmadığı için çevirme işlemi mantık olarak hatalı olacaktır. Swift bu durumda dönüştürme işlemi sonunda oluşan değerlere Optional tip tanımlamaktadır.

Yukarıdaki başka bir örnekte ise ilerleyen konularda değineceğim URL konusuna gönderme yapıyorum. Burada “url” sabitine bir URL tipi atamak istiyorum fakat öncesinde bu URL’in varlığı, doğruluğu kesin olmadığı için Swift yine Optional tip olarak gösterecektir.

Optional Değerlerin If ile Kontrolü

Eğer yukarıdakiler ve benzer şekilde sabit veya değişken kullanımları gerektiren programlar yazacaksak (ki kesin yazılması gerekecek) Optional tipteki değişken veya sabitin bir değeri olup olmadığını if yapısı ile kontrol etmemiz mümkün olacaktır. Örneğin yukarıdaki URL örneğinin kodlarımdaki gerçek aşağıdaki gibidir.

Bu kontrol sayesinde eğer url sabiti bir değere sahipse artık Optional tipten kurtulmuş olacak ve kendi tipinde işlev gösterebilecektir.

If yapısı kullanmadan da optional yapıyı sorgulamak mümkündür. Yukarıdaki örnekte dışarıdan alınan şehir ismi bilgisini “!” işareti ile varlık elde etmesi için zorluyoruz.

Nil

“nil” değersizlerin değeri olarak tanımlanabilir.

“nil” yalnızca Optional tipteki değişkenlere atanabilmektedir. Aşağıdaki örnekte bu ayrımı göreceğiz.

Burada c değişkenine kesin şekilde Int tipi atamadığımız için alttaki c=nil komutları düzgün çalışacaktır.

Şimdi ise c değişkenini kesin olarak Int tipinde yarattığımız için c=nil komutu için

hatası alacağız.

Ayrıca bir Optional değişken veya sabit yaratıp, değer vermezsek otomatik olarak “nil” değeri alacaktır.

Dolaylı Olarak Optional Kontrolü

Bu konuyu aslında yukarıda

kod satırı ile göstermiştim fakat biraz daha açıklamak istiyorum. Dolaylı olarak Optional kontrolünün amacı bir Optional tipteki değişken veya sabitin Optional kontrolünü yalnızca bir kere yapmaktır. If ile kontrolünü gerçekleştirdiğimiz değişken veya sabitler yalnızca o If bloğu için non-Optional davranacaktır.

Dolaylı olarak kontrolünü Optional kontrolünü sağladığımız değişken veya sabitler arka tarafta Optional olarak görülmesine rağmen, programcıya non-Optional kullanım imkanı sunar. Buna Optional gibi kullanma izni verildi diyebiliriz.

Değişken veya sabit tanımlarken de dolaylı Optional kontrolü yapabilir.

Eğer kontrollü olarak yaratılan ama değer verilmeyen değişken veya sabite erişilmek istenirse run-time error alınacaktır. Kontrol yapılmayan değişken veya sabite erişilmek istenirse ise hata alınmayacak, “nil” değeri elde edilecektir. Bu sebepten dolaylı kontrol ile değişken veya sabit yaratırken değer vermeye veya büyük projelerde If yapısıyla kontrol işlemi yapmaya özen gösterilmelidir.

Devam Yazısı:

Yorum yaz

Email adresiniz yayınlanmayacaktır.