Swift vs Objective-C: 10 sebab masa depan memilih Swift

Bahasa pengaturcaraan tidak mati dengan mudah, tetapi kedai pembangunan yang berpegang pada paradigma yang semakin pudar. Sekiranya anda mengembangkan aplikasi untuk peranti mudah alih dan anda belum menyelidiki Swift, perhatikan: Swift tidak hanya akan mengganti Objective-C ketika mengembangkan aplikasi untuk Mac, iPhone, iPad, Apple Watch, dan perangkat yang akan datang, tetapi ia juga akan menggantikan C untuk pengaturcaraan tertanam pada platform Apple.

Berkat beberapa ciri utama, Swift berpotensi menjadi bahasa pengaturcaraan de-facto untuk membuat aplikasi yang mendalam, responsif, dan berhadapan dengan pengguna selama bertahun-tahun yang akan datang.

Apple nampaknya mempunyai matlamat besar untuk Swift. Ini telah mengoptimumkan penyusun untuk prestasi dan bahasa untuk pengembangan, dan menyinggung Swift "dirancang untuk skala dari 'halo, dunia' ke seluruh sistem operasi" dalam dokumentasi Swift. Walaupun Apple belum menyatakan semua tujuannya untuk bahasa itu, pelancaran Xcode 6, Playgrounds, dan Swift bersama-sama menandakan niat Apple untuk menjadikan pembangunan aplikasi lebih mudah dan lebih mudah didekati daripada dengan rangkaian alat pengembangan lain.

Berikut adalah 10 sebab untuk memajukan permainan dengan mula bekerjasama dengan Swift sekarang.

1. Swift lebih senang dibaca

Objective-C menderita semua ketuat yang anda harapkan dari bahasa yang dibina berdasarkan C. Untuk membezakan kata kunci dan jenis dari jenis C, Objective-C memperkenalkan kata kunci baru menggunakan simbol @. Kerana Swift tidak dibangun di atas C, ia dapat menyatukan semua kata kunci dan membuang banyak @ simbol di depan setiap jenis Objektif-C atau kata kunci yang berkaitan dengan objek.

Swift menjatuhkan konvensyen warisan. Oleh itu, anda tidak lagi memerlukan titik koma untuk garis akhir atau tanda kurung untuk mengelilingi ungkapan bersyarat di dalam pernyataan jika / lain. Satu lagi perubahan yang besar adalah bahawa panggilan kaedah tidak bersarang di dalam satu sama lain menyebabkan kurungan neraka-bye-bye, [[[ ]]]. Kaedah dan panggilan fungsi di Swift menggunakan senarai parameter yang dipisahkan koma standard industri dalam kurungan. Hasilnya adalah bahasa yang lebih bersih dan ekspresif dengan sintaksis dan tatabahasa yang dipermudahkan.

Kod cepat lebih menyerupai bahasa Inggeris semula jadi, selain bahasa pengaturcaraan popular moden yang lain. Keterbacaan ini memudahkan pengaturcara yang ada dari JavaScript, Java, Python, C #, dan C ++ untuk mengadopsi Swift ke rantai alat mereka — tidak seperti itik jelek yang Objektif-C.

2. Swift lebih senang dijaga

Warisan adalah yang menahan Objektif-C kembali - bahasa tidak dapat berkembang tanpa C berkembang. C menghendaki pengaturcara untuk mengekalkan dua fail kod untuk meningkatkan masa pembuatan dan kecekapan pembuatan aplikasi yang dapat dilaksanakan, suatu syarat yang membawa kepada Objektif-C.

Swift menjatuhkan keperluan dua fail. Xcode dan penyusun LLVM dapat mengetahui kebergantungan dan melakukan peningkatan secara automatik di Swift 1.2. Akibatnya, tugas berulang untuk memisahkan daftar isi (header file) dari badan (file implementasi) adalah perkara masa lalu. Swift menggabungkan tajuk Objektif-C (.h) dan fail pelaksanaan (.m) menjadi satu fail kod (.swift).

Sistem dua fail Objective-C membebankan kerja tambahan pada pengaturcara - dan kerja yang mengalihkan perhatian pengaturcara dari gambaran yang lebih besar. Di Objective-C, anda harus menyegerakkan nama dan komen kaedah antara fail secara manual, semoga menggunakan konvensyen standard, tetapi ini tidak dijamin melainkan jika pasukan mempunyai peraturan dan tinjauan kod.

Xcode dan penyusun LLVM dapat melakukan kerja di belakang tabir untuk mengurangkan beban kerja pada pengaturcara. Dengan Swift, pengaturcara melakukan pembukuan lebih sedikit dan dapat menghabiskan lebih banyak masa untuk membuat logik aplikasi. Swift memotong kerja plat boiler dan meningkatkan kualiti kod, komen, dan ciri yang disokong.

3. Swift lebih selamat

Salah satu aspek Objektif-C yang menarik adalah cara penunjuk - terutamanya penunjuk nol (null) - ditangani. Dalam Objektif-C, tidak ada yang berlaku jika anda cuba memanggil kaedah dengan pemboleh ubah penunjuk yang tidak ada (tidak diinisialisasi) Ungkapan atau baris kod menjadi tanpa operasi (no-op), dan walaupun nampaknya bermanfaat bahawa ia tidak mengalami kerusakan, ia menjadi sumber bug yang besar. No-op membawa kepada tingkah laku yang tidak dapat diramalkan, yang merupakan musuh pengaturcara yang berusaha mencari dan memperbaiki kemalangan rawak atau menghentikan tingkah laku yang tidak menentu.

Jenis pilihan menjadikan kemungkinan nilai pilihan nihil sangat jelas dalam kod Swift, yang bermaksud ia dapat menghasilkan kesalahan penyusun semasa anda menulis kod buruk. Ini membuat gelung maklum balas pendek dan membolehkan pengaturcara membuat kod dengan niat. Masalah dapat diperbaiki semasa kod ditulis, yang akan mengurangkan jumlah masa dan wang yang akan anda habiskan untuk memperbaiki bug yang berkaitan dengan logik penunjuk dari Objective-C.

Secara tradisinya, dalam Objektif-C, jika suatu nilai dikembalikan dari suatu kaedah, adalah tanggungjawab pengaturcara untuk mendokumentasikan tingkah laku pemboleh ubah penunjuk yang dikembalikan (menggunakan komen dan konvensi penamaan kaedah). Dalam Swift, jenis dan jenis nilai pilihan menjadikannya jelas secara jelas dalam definisi kaedah jika nilainya ada atau jika berpotensi menjadi opsional (iaitu, nilainya mungkin ada atau mungkin nihil).

Untuk memberikan tingkah laku yang dapat diramalkan, Swift mencetuskan crash runtime jika pembolehubah pilihan nihil digunakan. Kerosakan ini memberikan tingkah laku yang konsisten, yang memudahkan proses pembetulan pepijat kerana memaksa pengaturcara untuk menyelesaikan masalah dengan segera. Kemalangan runtime Swift akan berhenti pada baris kod di mana pemboleh ubah pilihan nil telah digunakan. Ini bermaksud bug akan diperbaiki lebih cepat atau dielakkan sepenuhnya dalam kod Swift.

4. Swift disatukan dengan pengurusan memori

Swift menyatukan bahasa dengan cara yang tidak pernah dimiliki oleh Objective-C. Sokongan untuk Pengiraan Rujukan Automatik (ARC) lengkap di seluruh jalur kod prosedur dan berorientasikan objek. Dalam Objective-C, ARC disokong dalam API Kakao dan kod berorientasikan objek; ia tidak tersedia, bagaimanapun, untuk kod C prosedural dan API seperti Core Graphics. Ini bermaksud menjadi tanggungjawab pengaturcara untuk mengendalikan pengurusan memori ketika bekerja dengan Core Graphics API dan API tahap rendah lain yang tersedia di iOS. Kebocoran memori besar yang dapat dimiliki oleh pengaturcara dalam Objektif-C tidak mungkin dilakukan di Swift.

Seorang pengaturcara tidak harus memikirkan memori untuk setiap objek digital yang dihasilkannya. Kerana ARC menangani semua pengurusan memori pada waktu kompilasi, kekuatan otak yang seharusnya menuju ke pengurusan memori sebaliknya dapat difokuskan pada logik aplikasi teras dan fitur baru. Kerana ARC di Swift berfungsi di kedua-dua kod berorientasikan prosedur dan berorientasikan objek, ia tidak memerlukan peralihan konteks mental lagi untuk pengaturcara, walaupun mereka menulis kod yang menyentuh API tingkat bawah — masalah dengan versi Objektif-C terkini.

Pengurusan memori automatik dan berprestasi tinggi adalah masalah yang telah diselesaikan, dan Apple telah membuktikan ia dapat meningkatkan produktiviti. Kesan sampingan yang lain ialah kedua Objective-C dan Swift tidak mengalami pengumpulan sampah yang membersihkan untuk memori yang tidak digunakan, seperti Java, Go, atau C #. Ini adalah faktor penting untuk setiap bahasa pengaturcaraan yang akan digunakan untuk grafik responsif dan input pengguna, terutama pada perangkat taktil seperti iPhone, Apple Watch, atau iPad (di mana ketinggalan membuat frustrasi dan membuat pengguna merasakan aplikasi rosak).

5. Swift memerlukan kod yang lebih sedikit

Swift mengurangkan jumlah kod yang diperlukan untuk penyataan berulang dan manipulasi rentetan. Dalam Objektif-C, bekerja dengan rentetan teks sangat verbose dan memerlukan banyak langkah untuk menggabungkan dua bahagian maklumat. Swift menggunakan ciri bahasa pengaturcaraan moden seperti menambahkan dua rentetan bersama dengan operator "+", yang tidak ada di Objective-C. Sokongan untuk menggabungkan watak dan rentetan seperti ini adalah asas bagi setiap bahasa pengaturcaraan yang memaparkan teks kepada pengguna di skrin.

Sistem jenis di Swift mengurangkan kerumitan penyataan kod - kerana penyusun dapat mengetahui jenisnya. Sebagai contoh, Objektif-C memerlukan programmer untuk menghafal tokens rentetan khas ( %s, %d, %@) dan menyediakan senarai-dipisah-koma pembolehubah untuk menggantikan setiap token. Swift menyokong interpolasi rentetan, yang menghilangkan keperluan untuk menghafal token dan membolehkan pengaturcara memasukkan pemboleh ubah secara langsung sebaris dengan rentetan yang dihadapi pengguna, seperti label atau tajuk butang. Jenis sistem inferensi dan interpolasi rentetan mengurangkan sumber kemalangan yang biasa di Objektif-C.

Dengan Objective-C, mengacaukan pesanan atau menggunakan token rentetan yang salah menyebabkan aplikasi mogok. Di sini, Swift sekali lagi melegakan anda dari pekerjaan pembukuan, yang diterjemahkan menjadi lebih sedikit kod untuk ditulis (kod yang kini kurang ralat) kerana sokongan sebaris untuk memanipulasi rentetan teks dan data.

6. Swift lebih pantas

Menjatuhkan konvensyen C lama telah meningkatkan Swift di bawah tudung. Tanda aras untuk prestasi kod Swift terus menunjukkan dedikasi Apple untuk meningkatkan kelajuan di mana Swift dapat menjalankan logik aplikasi.

Menurut Primate Labs, pembuat alat prestasi GeekBench yang popular, Swift mendekati ciri-ciri prestasi C ++ untuk tugas-tugas terikat pada bulan Disember 2014 menggunakan algoritma Mandelbrot.

Pada Februari 2015, Primate Labs mendapati bahawa Xcode 6.3 Beta meningkatkan prestasi algoritma GEMM Swift - algoritma terikat memori dengan akses berurutan array besar - dengan faktor 1.4. Pelaksanaan FFT awal - algoritma terikat memori dengan akses rawak array besar - mempunyai peningkatan prestasi 2.6 kali ganda.

Peningkatan lebih lanjut diperhatikan di Swift dengan menerapkan amalan terbaik, menghasilkan peningkatan 8.5 kali lipat untuk prestasi algoritma FFT (meninggalkan C ++ dengan hanya peningkatan prestasi 1.1 kali). Peningkatan ini juga membolehkan Swift mengungguli C ++ untuk algoritma Mandelbrot dengan faktor 1.03.

Swift hampir setaraf dengan C ++ untuk kedua algoritma FFT dan Mandelbrot. Menurut Primate Labs, prestasi algoritma GEMM menunjukkan bahawa penyusun Swift tidak dapat vektorkan kod yang dapat disusun oleh penyusun C ++ - keuntungan prestasi yang mudah yang dapat dicapai dalam versi Swift seterusnya.

7. Lebih sedikit pertembungan nama dengan projek sumber terbuka

Satu masalah yang melanda kod Objektif-C adalah kurangnya dukungan formal untuk ruang nama, yang merupakan penyelesaian C ++ untuk pelanggaran nama fail kod. Apabila pelanggaran nama ini berlaku di Objective-C, itu adalah kesalahan penghubung, dan aplikasi tidak dapat dijalankan. Penyelesaian ada, tetapi mereka mempunyai kemungkinan perangkap. Konvensyen umum adalah menggunakan awalan dua atau tiga huruf untuk membezakan kod Objektif-C yang ditulis, katakan, oleh Facebook berbanding kod anda sendiri.

Swift menyediakan ruang nama tersirat yang membolehkan fail kod yang sama wujud di pelbagai projek tanpa menyebabkan kegagalan membina dan memerlukan nama seperti NSString (Langkah Selanjutnya - syarikat Steve Jobs setelah dipecat dari Apple) atau CGPoint (Core Graphics). Pada akhirnya, ciri ini di Swift menjadikan pengaturcara lebih produktif dan bermaksud mereka tidak perlu melakukan pembukuan yang ada di Objective-C. Anda dapat melihat pengaruh Swift dengan nama-nama sederhana seperti Array, Kamus, dan String, bukan NSArray, NSDictionary, dan NSString, yang lahir dari kekurangan ruang nama di Objective-C.

Dengan Swift, ruang nama didasarkan pada sasaran yang dimiliki oleh fail kod. Ini bermaksud pengaturcara dapat membezakan kelas atau nilai menggunakan pengecam ruang nama. Perubahan Swift ini sangat besar. Ini sangat memudahkan menggabungkan projek sumber terbuka, kerangka kerja, dan perpustakaan ke dalam kod anda. Ruang nama membolehkan syarikat perisian yang berbeza untuk membuat nama fail kod yang sama tanpa perlu bimbang tentang perlanggaran ketika mengintegrasikan projek sumber terbuka. Sekarang Facebook dan Apple dapat menggunakan fail kod objek yang disebut FlyingCar.swift tanpa kesalahan atau kegagalan binaan.

8. Swift menyokong perpustakaan dinamik

Perubahan terbesar di Swift yang belum mendapat perhatian cukup adalah beralih dari perpustakaan statik, yang dikemas kini pada siaran utama (iOS 8, iOS 7, dan seterusnya), ke perpustakaan dinamik. Perpustakaan dinamik adalah sekumpulan kod yang boleh dilaksanakan yang dapat dihubungkan ke aplikasi. Fungsi ini membolehkan aplikasi Swift semasa untuk menghubungkan dengan versi bahasa Swift yang lebih baru kerana ia berkembang dari masa ke masa.

Pembangun menyerahkan aplikasinya bersama dengan perpustakaan, yang kedua-duanya ditandatangani secara digital dengan sijil pengembangan untuk memastikan integriti (halo, NSA). Ini bermakna Swift dapat berkembang lebih cepat daripada iOS, yang merupakan syarat untuk bahasa pengaturcaraan moden. Perubahan pada perpustakaan semuanya dapat disertakan dengan kemas kini terbaru aplikasi di App Store, dan semuanya berjalan lancar.

Perpustakaan dinamik tidak pernah disokong pada iOS sehingga pelancaran Swift dan iOS 8, walaupun perpustakaan dinamik telah disokong pada Mac untuk waktu yang sangat lama. Perpustakaan dinamik berada di luar aplikasi yang dapat dilaksanakan, tetapi termasuk dalam paket aplikasi yang dimuat turun dari App Store. Ini mengurangkan ukuran awal aplikasi karena dimuat ke dalam memori, kerana kod luaran hanya dihubungkan ketika digunakan.

Keupayaan untuk menangguhkan pemuatan dalam aplikasi mudah alih atau aplikasi yang disematkan di Apple Watch akan meningkatkan prestasi yang dirasakan oleh pengguna. Ini adalah salah satu perbezaan yang menjadikan ekosistem iOS terasa lebih responsif. Apple telah fokus untuk memuatkan hanya aset, sumber daya, dan kini menyusun dan menghubungkan kod dengan cepat. Pemuatan on-the-fly mengurangkan masa tunggu awal sehingga sumber daya sebenarnya diperlukan untuk dipaparkan di layar.