Swift Programlam Dili Inceleme

Kerem Vatandas
Feb 15, 2019 · 6 min read

Merhaba,

2019 hedeflerimden bir tanesi mobil geliştirme alanına(IOS) giriş yapmak olarak belirledim ve bunun sonucunda öğrendiklerimi, notlarımı, araştırmalarımı düzenli bir şekilde paylaşmaya çalışacağım.

Bu ilk yazıda swift diline ve dökümanlarına göz gezdirdim. Kabataslak diğer dillere benzeyen neler var, dilin sentaks yapısı nasıl, mimarı açıdan nasıl gibi sorulara yanıtlar aradım. Tabi dilin tüm özelliklerini bir makale de anlatmak çok zor. Bunun için ileri ki yazılarımda tek tek ayrıntılara gireceğim.


Bu yazıda hangi konulara değiniyorum;

  • Swift Programlama Dili Neden Ortaya Çıktı?
  • Swift Nasıl Bir Programlama Dilidir?
  • Swift Standart Kütüphanesi Neler İçeriyor?
  • Bildirim İşlemleri Nasıl Yapılıyor?
  • Swift Dilinde String ve Character
  • String Interpolation
  • Fonksiyonların Bildirimleri
  • Swift Dilinde Fonksiyon Overload Var mı?
  • Swift dilinde sabitler nelerdir?
  • Optional Türü ve Nil Sabiti
  • Swift Dilinde Tür Dönüşümleri
  • Swift Dilinde Operatörler
  • Swift dilinde Pointer var mı?
  • Swift dilinde bir nesneyi adres yoluyla fonksiyonlara aktarabilir miyiz?
  • Swift Stack ve Heap Kavramları

Swift Programlama Dili Neden Ortaya Çıktı?

IOS ve MacOS sistemlerin ana geliştirme dili Objective C. Fakat Objective C öğrenmenin bir maliyeti var. Objective C, C dili üzerine nesne yönelimli özellikler eklenerek oluşturulmuş bir dil. Diğer birçok nesne yönelimler diller gibi Smaltalk’tan esinlenilmiş. Bu dili öğrenmek için önce C dilinin öğrenilmesi gerekiyor. Bu da öğrenme gerisini yukarı çekiyor.

Apple firması bunun sonucunda daha modern ve basit öğrenilebilecek bir programlama dili arayışına girmiş. Bunun sonucunda Swift programlama dili çıkıyor. Swift dilinin geliştirilmesine Chris Lattner tarafından 2010 yılında başlanmış.

Image for post
Image for post
Chris Lattner

Swift dili yazım kolaylığı ve dizayn olarak diğer birçok programlama dilinden esinlenerek oluşturulmuş. Swift programlama dili Linux, MacOS, IOS platformları destekliyor.


Swift Nasıl Bir Programlama Dilidir?

Tabi ki swift Objective C dilinden pek çok özellik almıştır.

Swift başta Objective-C olmak üzere Python, Haskell, Java, C# gibi dillerden güçlü gördüğü özellikleri almış. Bu nedenle diğer dillerden swift’e geçenler rahatlıkla bu dili öğrebilirler.

Swift açık kaynak bir programlama dilidir. [https://github.com/apple/swift]

Swift derlenen bir programla dilidir, gerçek makina kodları üretmektedir. Swift derleyicisi LLVM derleyici geliştirme ortamından faydalanılarak yazılmış. Bu sebeple swift uygulamaları hızlı çalışırlar.

Derleyici -> [https://github.com/apple/swift-llvm]

Swift ile yazılan kodlar LLDB ile debug edilebilir.

Swift Debugger and REPL -> [https://github.com/apple/swift-lldb]


Swift Standart Kütüphanesi Neler İçeriyor?

Dökümanlarda da görüldüğü gibi çok temel fonksiyonlar ve sınıflar barındırılmaktadır.


Bildirim İşlemleri Nasıl Yapılıyor?

Bildirim işlemleri birkaç farklı şekilde yapılabiliyor. [https://docs.swift.org/swift-book/ReferenceManual/Declarations.html]

Tanımlama işlemleri yaparken <tür> belirtmek zorunda değiliz. Swift dilinde Type Inference yani tür çıkarımı mekanizması bulunmaktadır. Sizin yerinize turu atanan değerden bulacaktır.

Bildirim yaparken tür belirtmiyorsak değişkene İLKDEĞER vermek ZORUNLUDUR.

Bildirimde var ile let arasında önemli bir farklılık vardır.

  • var ile değişken bildirildiğinde sonradan değeri değiştirilebilir.
  • Ancak let ile değişken bildirildiğinde o değişken const olur. Onun değeri bir daha değiştirilemez.

Eğer let ile bildirim yaparken tür belirtirsek aşağıda 1 kere atama yapabiliyoruz. Ama ikinci atamayı kabul etmez.

Özel bir sebebi yok ise let ile bildirim yaparken ilkdeğer verin.


Swift Dilinde String ve Character

Karakter tanımlama için turu açık olarak Character belirtmemiz gerekiyor

Swift dilinde tüm temel türler birer yapıdır.


String Interpolation


Fonksiyonların Bildirimleri

Swift dilinde fonksiyon bildirimi şu şekilde yapılmaktadır;

Fonksiyon bildiriminde geri dönüş değeri yok ise -> kullanılmayabilir.

Fonksiyonun tek bir geri dönüş değeri vardır fakat birden fazla değer geri döndürmenin birden fazla yolu var.

return deyimi hem fonksiyonu sonlandırmak için hem de geri dönüş değerini oluşturmak için kullanılır.

Fonksiyon geri dönüş değeri yok ise boş return kullanılabilir. return kullanmak zorunda değiliz.

Geri dönüş değeri bildirilmiş bir fonksiyonda return kullanmak zorunludur. Geriye return ile bir değer döndürmüyorsak derleyici hata verecektir.

Fonksiyonların parametre bildiriminde parametrelerin türleri belirtmek zorunludur.

Fonksiyonların parametre değişkenleri default olarak const durumundadır, yani fonksiyonlar tarafından bunlar değiştirilemez.

Parametre değişkenini değiştirmek istiyorsak inout keywordunu kullanmak zorundayız.

  • Fonksiyonların parametre değişkenlerinin hem kendi isimleri hem de etiket isimleri vardır.
  • Etiket isimleri fonksiyon çağırılırken, parametreler fonksiyon gövdesinde kullanılır. Etiketler okunabilirliği arttırmak için var.

Etiket kullanımını şu şekilde yapabiliriz:

  • Swift dilinde iç içe fonksiyon bildirimi yapabiliyoruz.

Swift Dilinde Fonksiyon Overload Var mı?

Function overloading olabilmesi için aynı isimli fonksiyon ve aşağıda bulunan özelliklerden bir veya birkaçı bulunuyor olmalı.

  • Fonksiyon geri dönüş değerinin farklılığı
  • Parametre sayılarının farklı olması
  • Parametre türlerinin farklılığı
  • Etiket isimlerinin farklılığı

Derleyicinin hangi fonksiyonu çağırdığını anlama mekanizmasını (function overload resolution) C++ üzerinden anlatmıştım. İleri de bu konuyu daha ayrıntılı anlatmaya düşünüyorum. Mekanizmanın nasıl çalıştığını anlamak için su makaleye bakabilirsiniz. [https://medium.com/@keremvatandas/c-function-overloading-function-overloading-resolution-532807f98ce7]


Swift dilinde sabitler nelerdir?

  • String Literals
  • Boolean Literals
  • Integer Literals
  • Floating Point Literals

Optional Türü ve Nil Sabiti

  • T? anlamı hem kendi türünden değer tutabilmesi hem de nil sabitini tutabilmesidir. Değişken içerisinde ki değere ulaşabilmek için unwrap etmemiz gerekir. Unwrap etmek için <T!> yani ! operatörü kullanılmaktadır.
  • ? ve ! operatörleri kendisinden önce ki değişkene BİTİŞİK olarak yazılmalı. Yoksa sentaks hatası alırsınız. (Son ek olarak kullanılır.)
  • Swift dilinde T? türü Optional<T> türüne eşittir. Yani

[https://developer.apple.com/documentation/swift/optional]


Swift Dilinde Tür Dönüşümleri

Yani Int32 tipinde bir değişkenin değerini direk Int16 türden bir değişkene atayamayız. Type casting işlemlerini yapmamız gerekiyor.


Swift Dilinde Operatörler

Operatörler genellikle üç biçimde sınıflandırılırlar:

1) İşlevlerine Göre
2) Operand Sayılarına Göre
3) Operatörün Konumuna Göre

Swift dökümanlarında Basic Operators ve Advanced Operator olarak ayrılmış. Advanced operatörler de Bitwise operatörleri yer alıyor.


Swift dilinde Pointer var mı?

  • Referans türleri C dilinde ki pointer, C++ dilinde ki referanslar gibidir. Burada bahsedilen yapılar aslında aynı. C dilinde pointer kullanımı zor olduğu için, C++ diline implemente ederken notasyonel bir hile yapılarak referans adını verdikleri yapı oluşuyor. Böylece kullanımı ve anlaşılması daha kolay bir yapı oluşturulmuş oluyor. Aslında arkada planda dönen herşey pointer.
  • Swift dilinde struct, enüm türleri DEĞER türlerine ilişkindir. String, Int, Double türlerinin hepsi aslanda birer yapıdır. Bu sebepten string türden bir değişkenin karakterlerini istersek değiştirebiliriz.
  • Class, Protocols ise referans türlerine ilişkindir.

Swift dilinde bir nesneyi adres yoluyla fonksiyonlara aktarabilir miyiz?


Swift Stack ve Heap Kavramları

  • Fonksiyon çağırıldığında değişkenler belleği yüklenir, bir takım işlemler yapılır ve fonksiyon block sonunda bellekten silinirler. Her fonksiyon çağırıldığında genel davranışları böyledir.
Image for post
Image for post
  • Yerel değişkenler ve parametre değişkenleri belleğin STACK bölgesinde oluşturulur. Stack alanı prosese özgüdür. Her thread’in aynı bir stack alanı var.
  • Global değişkenler programın başında bir kere yaratılıp uygulama bitene kadar bellekte kalırlar. Belleğin DATA ve BSS denilen alanında tutulurlar.
  • Bir de process adres alanı içerisinde HEAP alanı vardır. Swift dilinde sınıf türünden nesneleri HEAP bölgesinde yaratılırlar ve bunların bellekten silinmesiyle garbage collector ilgilenir.

Swift programlama dili nesne yönelimli programlama tekniklerini destekler. Bunun ile alakalı fazla ayrıntıya girmiyorum. Bundan sonra gelecek makaleler tek konu üzerine ayrıntılı şekilde olacaktır.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store