Swift, Objective-C'ye Karşı: Geleceğin Swift'i desteklemesinin 10 nedeni

Programlama dilleri kolayca ölmez, ancak solmakta olan paradigmalara tutunan geliştirme atölyeleri ölür. Mobil cihazlar için uygulamalar geliştiriyorsanız ve Swift'i araştırmadıysanız, not alın: Swift, Mac, iPhone, iPad, Apple Watch ve gelecek cihazlar için uygulama geliştirme söz konusu olduğunda yalnızca Objective-C'nin yerini almayacak, ancak Apple platformlarında yerleşik programlama için C'nin yerini alacak.

Birkaç temel özellik sayesinde Swift, önümüzdeki yıllarda sürükleyici, duyarlı, tüketiciye yönelik uygulamalar oluşturmak için fiili programlama dili olma potansiyeline sahiptir.

Apple'ın Swift için büyük hedefleri var gibi görünüyor. Derleyiciyi performans için ve geliştirme dilini optimize etti ve Swift'in belgelerinde Swift'in "merhaba, dünya'dan tüm işletim sistemine ölçeklenecek şekilde tasarlandığını" ima ediyor. Apple, dil için henüz tüm hedeflerini belirtmemiş olsa da, Xcode 6, Playgrounds ve Swift'in piyasaya sürülmesi, Apple'ın uygulama geliştirmeyi diğer tüm geliştirme araç zincirlerinden daha kolay ve ulaşılabilir kılma niyetini işaret ediyor.

İşte Swift ile hemen çalışmaya başlayarak oyunda öne geçmek için 10 neden.

1. Swift okumak daha kolay

Objective-C, C üzerine inşa edilmiş bir dilden bekleyeceğiniz tüm siğillere maruz kalıyor. Anahtar sözcükleri ve türleri C türlerinden ayırmak için Objective-C, @ simgesini kullanarak yeni anahtar sözcükler tanıttı. Swift, C üzerine kurulmadığı için, tüm anahtar kelimeleri birleştirebilir ve her Objective-C türü veya nesne ile ilgili anahtar kelimenin önündeki sayısız @ sembolünü kaldırabilir.

Swift, eski kuralları kaldırır. Böylece, if / else ifadeleri içindeki koşullu ifadeleri çevrelemek için artık satırları sonlandırmak için noktalı virgüllere veya paranteze ihtiyacınız yoktur. Diğer bir büyük değişiklik de, yöntem çağrılarının birbiri içine girmemesi ve bunun sonucunda parantez cehennemi - güle güle, olmasıdır [[[ ]]]. Swift'deki yöntem ve işlev çağrıları, parantez içindeki endüstri standardı virgülle ayrılmış parametreler listesini kullanır. Sonuç, basitleştirilmiş bir sözdizimi ve dilbilgisi ile daha temiz, daha etkileyici bir dildir.

Swift kodu, diğer modern popüler programlama dillerine ek olarak doğal İngilizceye daha çok benziyor. Bu okunabilirlik, Objective-C olan çirkin ördek yavrusunun aksine, JavaScript, Java, Python, C # ve C ++ 'dan var olan programcıların Swift'i araç zincirlerine adapte etmelerini kolaylaştırır.

2. Swift'in bakımı daha kolaydır

Miras, Objective-C'yi geride tutan şeydir — dil, C gelişmeden gelişemez. C, Objective-C'ye taşınan bir gereksinim olan yürütülebilir uygulama oluşturmanın derleme süresini ve verimliliğini artırmak için programcıların iki kod dosyası tutmasını gerektirir.

Swift, iki dosya gereksinimini ortadan kaldırır. Xcode ve LLVM derleyicisi, Swift 1.2'de bağımlılıkları çözebilir ve artımlı derlemeleri otomatik olarak gerçekleştirebilir. Sonuç olarak, içindekiler tablosunu (başlık dosyası) gövdeden (uygulama dosyası) ayırmanın tekrarlayan görevi geçmişte kaldı. Swift, Objective-C başlığını (.h) ve uygulama dosyalarını (.m) tek bir kod dosyasında (.swift) birleştirir.

Objective-C'nin iki dosyalı sistemi, programcılara ek iş yükler ve programcıların dikkatini büyük resimden uzaklaştıran iştir. Objective-C'de, standart bir kural kullanarak, yöntem adlarını ve yorumları dosyalar arasında manuel olarak senkronize etmeniz gerekir, ancak ekibin yerinde kuralları ve kod incelemeleri olmadığı sürece bu garanti edilmez.

Xcode ve LLVM derleyicisi, programlayıcı üzerindeki iş yükünü azaltmak için perde arkasında çalışabilir. Swift ile programcılar daha az defter tutma yapar ve uygulama mantığı oluşturmak için daha fazla zaman harcayabilir. Swift, standart çalışmayı ortadan kaldırır ve desteklenen kodun, yorumların ve özelliklerin kalitesini artırır.

3. Swift daha güvenlidir

Objective-C'nin ilginç bir yönü, işaretçilerin - özellikle de sıfır (boş) işaretçilerin - işlenme şeklidir. Objective-C'de, sıfır olan (başlatılmamış) bir işaretçi değişkenine sahip bir yöntemi çağırmaya çalışırsanız hiçbir şey olmaz. İfade veya kod satırı işlemsiz (işlemsiz) hale gelir ve çökmemesi faydalı görünse de, büyük bir hata kaynağı olmuştur. İşlemsizlik, rastgele bir çökmeyi bulmaya ve düzeltmeye veya düzensiz davranışı durdurmaya çalışan programcıların düşmanı olan öngörülemeyen davranışa yol açar.

İsteğe bağlı türler, Swift kodunda nil isteğe bağlı değer olasılığını çok net hale getirir, bu da siz kötü kod yazarken bir derleyici hatası oluşturabileceği anlamına gelir. Bu, kısa bir geri bildirim döngüsü oluşturur ve programcıların niyetle kod yazmasına olanak tanır. Kod yazılırken sorunlar çözülebilir, bu da Objective-C'den işaretçi mantığıyla ilgili hataları düzeltmek için harcayacağınız zaman ve para miktarını büyük ölçüde azaltır.

Geleneksel olarak, Objective-C'de, bir yöntemden bir değer döndürülmüşse, döndürülen işaretçi değişkeninin davranışını belgelemek (açıklamalar ve yöntem adlandırma kurallarını kullanarak) programcının sorumluluğundaydı. Swift'de, isteğe bağlı türler ve değer türleri, değerin mevcut olup olmadığını veya isteğe bağlı olma potansiyeline sahip olup olmadığını (yani, değer mevcut olabilir veya sıfır olabilir) yöntem tanımında açıkça anlaşılır kılar.

Öngörülebilir davranış sağlamak için Swift, isteğe bağlı sıfır değişken kullanılırsa, çalışma zamanı çökmesini tetikler. Bu kilitlenme, programcıyı sorunu hemen düzeltmeye zorladığından hata düzeltme sürecini kolaylaştıran tutarlı bir davranış sağlar. Swift çalışma zamanı çökmesi, isteğe bağlı sıfır değişkenin kullanıldığı kod satırında duracaktır. Bu, hatanın daha erken düzeltileceği veya Swift kodunda tamamen önleneceği anlamına gelir.

4. Swift, hafıza yönetimi ile birleştirildi

Swift, dili Objective-C'nin asla sahip olmadığı bir şekilde birleştiriyor. Otomatik Referans Sayma (ARC) desteği, prosedürel ve nesneye yönelik kod yollarında tamamlanmıştır. Objective-C'de ARC, Cocoa API'leri ve nesneye yönelik kod içinde desteklenir; ancak prosedürel C kodu ve Core Graphics gibi API'ler için mevcut değildir. Bu, iOS'ta bulunan Core Graphics API'leri ve diğer düşük seviyeli API'ler ile çalışırken bellek yönetimini yönetmenin programcının sorumluluğu haline geldiği anlamına gelir. Bir programcının Objective-C'de sahip olabileceği büyük bellek sızıntıları Swift'de imkansızdır.

Bir programcı, yarattığı her dijital nesne için bellek hakkında düşünmek zorunda kalmamalıdır. ARC, tüm bellek yönetimini derleme zamanında gerçekleştirdiğinden, bellek yönetimine giden beyin gücü bunun yerine temel uygulama mantığına ve yeni özelliklere odaklanabilir. Swift'deki ARC, hem prosedürel hem de nesne yönelimli kodda çalıştığı için, programcılar için daha düşük seviyeli API'lere dokunan kod yazarken bile, Objective-C'nin mevcut sürümüyle ilgili bir sorun olan zihinsel bağlam anahtarları gerektirmez.

Otomatik ve yüksek performanslı bellek yönetimi, çözülmüş bir sorundur ve Apple, üretkenliği artırabileceğini kanıtlamıştır. Diğer yan etki, hem Objective-C hem de Swift'in Java, Go veya C # gibi kullanılmayan bellek için temizlemeye çalışan bir Çöp Toplayıcıdan muzdarip olmamasıdır. Bu, özellikle iPhone, Apple Watch veya iPad gibi dokunsal bir cihazda (gecikmenin sinir bozucu olduğu ve kullanıcıların bir uygulamanın bozuk olduğunu algılamasına neden olduğu) duyarlı grafikler ve kullanıcı girişi için kullanılacak herhangi bir programlama dili için önemli bir faktördür.

5. Swift daha az kod gerektirir

Swift, tekrarlayan ifadeler ve dize manipülasyonu için gereken kod miktarını azaltır. Objective-C'de, metin dizeleriyle çalışmak çok ayrıntılıdır ve iki bilgi parçasını birleştirmek için birçok adım gerektirir. Swift, Objective-C'de eksik olan bir "+" operatörü ile birlikte iki dizeyi eklemek gibi modern programlama dili özelliklerini benimser. Bunun gibi karakterleri ve dizeleri birleştirme desteği, bir kullanıcıya ekranda metin görüntüleyen herhangi bir programlama dili için esastır.

Swift'deki tür sistemi, derleyici türleri çözebildiği için kod ifadelerinin karmaşıklığını azaltır. Bir örnek olarak, amaç-Cı özel bir katar belirteçleri ezberlemek (programcılar gerektirir %s, %d, %@her bir belirteci yerine değişken bir virgülle ayrılmış listesini) ve sağlar. Swift, jetonları ezberleme ihtiyacını ortadan kaldıran ve programcıların bir etiket veya düğme başlığı gibi kullanıcıya dönük bir dizeye doğrudan satır içi değişkenler eklemesine olanak tanıyan dize enterpolasyonunu destekler. Tür çıkarım sistemi ve dize enterpolasyonu, Objective-C'de yaygın olan yaygın bir çökme kaynağını azaltır.

Objective-C ile sırayı karıştırmak veya yanlış dize jetonunu kullanmak uygulamanın çökmesine neden olur. Burada Swift, metin dizelerini ve verileri işlemeye yönelik satır içi desteği nedeniyle, yazmak için daha az koda çeviri yaparak (artık daha az hataya meyilli olan koda) sizi yeniden defter tutma işinden kurtarır.

6. Swift daha hızlı

Eski C kurallarını kaldırmak, Swift'i kaputun altında büyük ölçüde iyileştirdi. Swift kod performansı için kıyaslamalar, Apple'ın Swift'in uygulama mantığını çalıştırma hızını artırmaya olan bağlılığına işaret etmeye devam ediyor.

Popüler GeekBench performans aracının yapımcıları olan Primate Labs'e göre Swift, Mandelbrot algoritmasını kullanarak Aralık 2014'te hesaplamaya bağlı görevler için C ++ performans özelliklerine yaklaşıyordu.

Şubat 2015'te Primate Labs, Xcode 6.3 Beta'nın Swift'in GEMM algoritması performansını (büyük dizilere sıralı erişimli belleğe bağlı bir algoritma) 1,4 kat artırdığını keşfetti. İlk FFT uygulaması - büyük dizilere rastgele erişime sahip bir belleğe bağlı algoritma - 2,6 kat performans artışı sağladı.

Swift'de en iyi uygulamalar uygulanarak daha fazla iyileştirme gözlendi ve bu da FFT algoritma performansında 8,5 kat artışla sonuçlandı (C ++ ile yalnızca 1,1 kez performans kazancı sağlandı). İyileştirmeler ayrıca Swift'in Mandelbrot algoritması için C ++ 'dan yalnızca 1.03 kat daha iyi performans göstermesini sağladı.

Swift, hem FFT hem de Mandelbrot algoritmaları için C ++ ile neredeyse aynı seviyede. Primate Labs'e göre, GEMM algoritma performansı, Swift derleyicisinin C ++ derleyicisinin yapabileceği kodu vektörleştiremeyeceğini öne sürüyor - Swift'in bir sonraki sürümünde elde edilebilecek kolay bir performans kazancı.

7. Açık kaynaklı projeler ile daha az isim çakışması

Objective-C kodunu rahatsız eden bir sorun, dosya adı çarpışmalarını kodlamak için C ++ 'ın çözümü olan ad alanları için resmi desteğin olmamasıdır. Bu ad çakışması Objective-C'de gerçekleştiğinde, bu bir bağlayıcı hatasıdır ve uygulama çalışamaz. Geçici çözümler mevcuttur, ancak potansiyel tuzakları vardır. Genel kural, örneğin Facebook tarafından yazılan Objective-C kodunu kendi kodunuzdan ayırt etmek için iki veya üç harfli bir önek kullanmaktır.

Swift, aynı kod dosyasının birden çok projede bir derleme hatasına neden olmadan ve NSString (Apple'dan kovulduktan sonra Steve Jobs'un şirketi) veya CGPoint (Core Graphics) gibi adlar gerektirmeden var olmasına izin veren örtük ad alanları sağlar. Nihayetinde Swift'deki bu özellik, programcıları daha üretken kılıyor ve Objective-C'de var olan muhasebeyi yapmak zorunda olmadıkları anlamına geliyor. Swift'in etkisini, Objective-C'deki ad alanlarının eksikliğinden doğan NSArray, NSDictionary ve NSString yerine Array, Dictionary ve String gibi basit adlarla görebilirsiniz.

Swift ile ad alanları, bir kod dosyasının ait olduğu hedefi temel alır. Bu, programcıların ad alanı tanımlayıcısını kullanarak sınıfları veya değerleri farklılaştırabileceği anlamına gelir. Swift'deki bu değişiklik çok büyük. Açık kaynak projeleri, çerçeveleri ve kitaplıkları kodunuza dahil etmeyi büyük ölçüde kolaylaştırır. Ad alanları, farklı yazılım şirketlerinin, açık kaynaklı projeleri entegre ederken çarpışmalardan endişe etmeden aynı kod dosya adlarını oluşturmasına olanak tanır. Artık hem Facebook hem de Apple, FlyingCar.swift adlı bir nesne kodu dosyasını herhangi bir hata veya hata olmadan kullanabilir.

8. Swift, dinamik kitaplıkları destekler

Swift'de yeterince dikkat çekmeyen en büyük değişiklik, büyük nokta sürümlerinde (iOS 8, iOS 7 vb.) Güncellenen statik kitaplıklardan dinamik kitaplıklara geçiş oldu. Dinamik kitaplıklar, bir uygulamaya bağlanabilen çalıştırılabilir kod parçalarıdır. Bu özellik, mevcut Swift uygulamalarının, zaman içinde gelişen Swift dilinin daha yeni sürümleriyle bağlantı kurmasını sağlar.

Geliştirici, uygulamayı, bütünlüğü sağlamak için her ikisi de geliştirme sertifikasıyla dijital olarak imzalanmış kütüphanelerle birlikte gönderir (merhaba, NSA). Bu, Swift'in modern bir programlama dili için bir gereklilik olan iOS'tan daha hızlı gelişebileceği anlamına geliyor. Kitaplıklardaki değişikliklerin tümü, App Store'daki bir uygulamanın en son güncellemesine dahil edilebilir ve her şey basitçe çalışır.

Dinamik kitaplıklar, Mac'te çok uzun süredir desteklense de, Swift ve iOS 8 piyasaya sürülene kadar iOS'ta hiçbir zaman desteklenmedi. Dinamik kitaplıklar, uygulama çalıştırılabilirinin dışındadır, ancak App Store'dan indirilen uygulama paketine dahil edilir. Harici kod yalnızca kullanıldığında bağlandığından, belleğe yüklenirken bir uygulamanın başlangıç ​​boyutunu azaltır.

Apple Watch'ta bir mobil uygulamada veya yerleşik bir uygulamada yüklemeyi erteleme yeteneği, kullanıcı için algılanan performansı artıracaktır. Bu, iOS ekosistemini daha duyarlı hale getiren farklardan biridir. Apple yalnızca varlıkları, kaynakları yüklemeye odaklandı ve artık anında derlenmiş ve bağlantılı kodlar oluşturdu. Anında yükleme, ekranda görüntülenmesi için bir kaynağa gerçekten ihtiyaç duyulana kadar ilk bekleme sürelerini azaltır.