
معرفی swift زبان برنامه نویسی Apple
۹۵/۶/۲۲ دوشنبه - تعداد بازدید : 4667سیستمعاملهای iOS 8.0 و Mac OS X 10.10 مهمترین موضوعاتي بودند که به آنها پرداخته شد و در کنار آنها محصول جذاب دیگری معرفي شد. اپل از زبان برنامهنویسی جدیدی برای توسعه برنامه و اپلیکیشن برای دیوایسهای اپلی با نام سوییفت (Swift) یا چابک پردهبرداری کرد. ادعا شده است این زبان بسیار سریع، سبک و برنامهنویسی با آن جذاب خواهد بود. Objective-C زبانی است که شرکت اپل تا کنون آن را توسعه داده و با وجود محبوبیت زیاد، توسعهدهندگان آن را به کشیدن دندان که بسیار پردردسر و دردآور است تشبیه میکنند.
شاید اپل از معرفی زبان جدید و جایگزین برای Objective-C خجالتزده باشد، اما در نقطه مقابل توسعهدهندگان خوشحالاند که مشکلات همیشگی آنها به طریقی در حال حل شدن است و در همان مدت توسعه میتوانند اپلیکیشنهای بیشتری را توسعه دهند و در اکوسیستم تولید نرمافزارهای مبتنی بر اپل روانتر خواهد بود. دیگر بسیاری از توسعهدهندگان از فاز پشتیبانی اپلیکیشنها ترسی نخواهند داشت. سوالاتی که اینجا وجود دارد این است که زبان برنامهنویسی سوییفت دقیقا چیست؟ چرا با وجود زبان آبجکتیو-سی به زبانی جدید که در آن در حدود 50 درصد افزایش کارایی نسبت به زبان کنونی شاهد هستیم، مهاجرت کنیم؟ و سوالاتی از این دست.
سوییفت چیست؟
برای شروع باید به این اشاره کنیم که زبان برنامهنویسی سوییفت با معماری پردازنده که با همین نام وجود دارد، یعنی سوییفت (A6) یا زبان اسکریپتنویسی موازی سوییفت هیچ ارتباطی ندارد. این تشابه اسمی کاملا تصادفی است و شاید زمانی که اپل ساخت این زبان را آغاز كرده است، این تکنولوژیهای دیگر با نام سوییفت وجود نداشت.
سوییفت را میتوان همان زبان آبجکتیو-سی در نظر گرفت، ولی با تغییرات بنیادی و اساسی برای بهینه شدن. شرکت اپل در وبسایت خود اين گونه ميگويد: «سوییفت یک زبان امن، مختصر و تعاملی است.» کدهای سوییفت شما در Xcode IDE بهصورت زنده (Live) تفسیر و رندر میشوند.
زبان سوییفت در دسته زبانهای کامپایلری چند مدلی یا همان multi-paradigm قرار میگیرد. برای مثال، زبان C++ یک زبان چند مدلی بوده و همزمان از روشهای برنامهنویسی شیءگرا و ساختیافته پشتیبانی میکند. سوییفت هم به همین شکل طراحی شده و بنابراین برنامهنویس میتواند مبتنی بر هر کدام از مدلها که تسلط دارد، کدنویسی کند. ساختار اصلی این زبان برنامهنویسی که قرار است جایگزینی برای آبجکتیو-سی باشد، بهصورت شیءگرا بوده ولی با فریمورکهای کوکوا (Cocoa) برای پلتفرم Mac OS و فریمورک کوکوا تاچ که برای پلتفرم iOS هستند، هماهنگ است. به علاوه کدهای سوییفت میتواند در کنار کدهای آبجکتیو-سی قرار بگیرد. این ویژگی باعث میشود فرایند کوچ از آبجکتیو-سی به آرامی و بدون مقاومت به سمت سوییفت انجام بگیرد؛ مقاومتی که در پذیرش هر چیز جدیدی همیشه وجود دارد. از این زبان اختصاصی اپل میتوان برای تولید نرمافزارهایی برای سیستمعاملهای iOS و Mac استفاده کرد.
کار روی زبان سوییفت در 2010 و توسط کریس لاتنر شروع شد و از زبانهای بسیاری که مهمترین آنها Objective-C، Rust، Haskell، Ruby، Python، C# وCLU هستند، الهام گرفته شده است. اولین نسخه آن در کنفرانس چند روز پیش معرفی شد و هنوز در مرحله بتا قرار دارد. توجه داشته باشید که هیچ تضمینی وجود ندارد که با انتشار نسخه نهایی سوییفت، برنامههایی که با نسخه بتای آن طراحی شدهاند، بهدرستی عمل کنند. همزمان با معرفی این اپلیکیشن، خود اپل اولین کتاب آموزشی این زبان را منتشر و در فروشگاه آیتیونز خود قرار داده است. این کتاب به آدرس goo.gl/6PnvR2 قابل سفارش است. به علاوه اگر در اپل حساب کاربری توسعهدهنده (Developer) داشته باشید میتوانید نسخه ششم Xcode را دانلود و برای کدنویسی مبتنی بر سوییفت استفاده کنید.
در کنفرانس WWDC اپل، Craig Federighi به صحنه آمد و برای نمایش این زبان جدید چند نمودار نشان داد که کارایی و سرعت سوییفت نسبت به آبجکتیو-سی در حدود 40 تا 50 درصد افزایش دارد. از طرفی میدانیم هم سوییفت و هم آبجکتیو-سی هر دو زبانهای کامپایلری هستند و از ماشین مجازی LLVM استفاده میکنند؛ بنابراین چنین افزایش کارایی به نظر اغراقآمیز میآید. احتمالا اپل مشخصات و قابلیتهایی که در آبجکتیو-سی به کندی و ضعف شهرت پیدا کرده بودند را انتخاب و در سوییفت با رفع و مقایسه کارایی آنها، به این اعداد دست پیدا کرده است.
این سوال برای خیلی از افراد به وجود میآید که با وجود یک زبان مانند آبجکتیو-سی یا زبانهای دیگری که هماکنون مورد استفاده قرار میگیرند، چرا اپل یک زبان جدید طراحی و ارايه میکند؟ دلایل زیادی برای این کار وجود دارد. اولین دلیل را میتوان سختی یادگیری آبجکتیو-سی در نظر گرفت که حالا بهخاطر سادگی بیشتر سوییفت، توسعهدهندههای بیشتری سراغ آن میروند تا برای محصولات اپل اپلیکیشن توسعه دهند. توسعهدهنده بیشتر به اپلیکیشن بیشتر، کاربر و سهم بازار بیشتر برای اپل و در نهایت درآمد بیشتر منتهی میشود.
از طرف دیگر میتوان به این دلیل اشاره کرد که زبان آبجکتیو-سی که بهتازگي جشن سی سالگی خود را پشت سر گذاشت، یک زبان پیر و قدیمی به حساب میآید و از جهاتی پاسخگوی روشهای نوین توسعه نرمافزار نیست. سوییفت يك تازه نفس با قدرت، انعطاف و قابلیت اطمینان بیشتر محسوب میشود.
بهعنوان دلیلی پنهانی برای ارائه زبان جدید سوییفت، میتوان به تداخل در اکوسیستم تولید اپلیکیشن برای اندروید اشاره کرد. اپلیکیشنهای مبتنی بر زبان C ميان این دو پلتفرم مشترک هستند و ابزارهای گوناگون برای تبدیل کدهای آبجکتیو-سی به جاوا و ارائه نسخه اندرویدی از یک اپلیکیشن طراحی شده برای iOS وجود دارد. حالا با این روند یک ضربه هر چند کوچک به اپلیکیشنهای اندرویدی وارد میشود.
شباهت و تفاوت با آبجکتیو-سی
آن دسته از توسعهدهندگانی که با آبجکتیو-سی کار کردهاند، در یادگیری زبان سوییفت مشکل خاصی ندارند و در ساختار کلی بسیار شبیه هم هستند. حتی از جهاتی سوییفت یک زبان مدرن به حساب میآید و یادگیری این زبان برای برنامهنویسانی که با دیگر زبانها کار کردهاند بسیار آسان خواهد بود.
اما در زمينه تفاوت سوییفت با آبجکتیو-سی میتوان به این موارد اشاره کرد. برای مشخص کردن انتهای هر خط دستور، دیگر نیازی به نقطه ویگرول یا همان سمیکالن (;) نیست. گرچه اگر بخواهید چند دستور را در یک خطر بنویسید، در آن صورت در پایان هر دستور باید از نقطه ویرگول استفاده کنید. دیگر به استفاده از فایلهای سرصفحه (Header Files) نیازی نیست. استفاده از روش کامنتگذاری شبکهای با استفاده از روش /* ... */ ممکن شده است و بهراحتی میتوان چند خط کد را با کامنت کردن از کامپایل شدن خارج کرد. سوییفت یک زبان با نوعگذاری قوی (Strong typing) است و دیگر در آرایهها و دیکشنریها نمیتوان چند نوع مقدار ذخیره کرد و همگی بايد از یک نوع باشند. این درحالی است که در آبجکتیو-سی که يك زبان با نوعگذاری ضعیف است، هر نوع دادهای را میتوان در یک آرایه و دیکشنری ذخیره کرد. به این ترتیب ویژگی اعتماد به کد در سوییفت بالاتر رفته است.
در سوییفت قابلیتی با عنوان first-class functions اضافه شده است که به برنامهنویس اجازه میدهد یک تابع را بهعنوان آرگومان به یک تابع دیگر ارسال کند و حتی یک تابع را بهعنوان خروجی دریافت کند. این قابلیت در برخی از زبانها با عنوان anonymous functions شناخته میشود. مبحثfirst-class functions بسیار گسترده و کاربردی و از حوصله این مقاله خارج است.
قابلیت سربارگذاری عملگرها یا همان operator overloading به سوییفت آمده است. به این ترتیب میتوان همه عملگرها را برای کلاسهاي مختلف باز تعریف کرد. با وجود اینکه سربارگذاری عملگرها انعطاف یک زبان را بالا میبرد، اما قابلیت خواندن آن کمتر و احتمال خطای منطقی بالا میرود. خبر خوش اين است که از Unicode در این زبان به شكلي قوي پشتیبانی میشود. نهتنها تمام کاراکترهای یونیکد بلکه بیشتر آنها در این زبان قابل استفادهاند و به عنوان نام میتوان از آنها بهره برد.
بسیاری از خطاهای برنامهنویسی رایج در زبانهای خانواده C در زبان سوییفت برطرف شده یا تغییر یافته است که برخی از آنها به این شرح هستند:
اولین خطای رفعشده همان خطای معروف No pointers exist است. به این ترتیب دیگر نیازی نیست برنامهنویس نامگذاریها را برای اشاره کردن دنبال کند. خطای رفع شده بعدی به «عدم بازگشت مقداری» در Assignmentها برمیگردد. برای مثال، اگر در زمان نوشتن یک شرط به جای نوشتن (if ( var == 0 عبارت (if ( var = 0 نوشته میشود، یک خطای کدنویسی رخ داده است و پیغام خطای Assignments do not return a value یا هیچ مقداری باز نمیگردد، در زمان کامپایل به برنامهنویس نمایش داده میشد. حالا دیگر این موضوع در سوییفت رفع شده است.
دیگر نیازی به نوشتن دستور break برای جدا کردن حالات به Switch نیست و بهصورت خودکار با شروع Case بعدی، زبان انتهای Case قبلی را تشخیص میدهد. Overflow متغیرهای عدد صحیح (Integer) در زمان اجرای برنامه و رخ دادن خطا، در زبانهای خانواده C موضوعی بسیار رایج است، اما در سوییفت راهکارهایی مانند تعیین min و max برای متغیرهای عدد صحیح ارائه شده است که به توسعهدهنده کمک میکند چنین خطاهايی در زمان اجرا برای اپلیکیشنهای آنها رخ ندهد.
سخن پایانی
به نظر میرسد زبان سوییفت پتانسیل لازم برای جایگزینی به جای آبجکتیو-سی را دارد و توسعهدهندگان بهراحتی میتوانند به سراغ آن بروند. اگر شما نیز تا کنون با آبجکتیو-سی کار نکردهاید و دوست دارید توسعهدهنده اپل شوید، پیشنهاد میشود مستقیما به سراغ زبان سوییفت بروید که بهزودی منابع زیادی برای مطالعه و دیباگینگ اپلیکیشنهای مبتنی بر سوییفت شکل میگیرند و بدون نیاز به گذراندن مراحل قبلی که همان زبان Objective-C است، مستقیما یک توسعهدهنده مدرن اپلی به حساب خواهید آمد.
نظرات خود را اشتراک بگذارید: