چه انتظاراتی از سوئیفت 3 داشته باشیم؟ - بخش اول
چنانچه در حوزه توسعه اپلیکیشن برای سیستم عامل آی او اس در حال فعالیت باشید، به احتمال زیاد می دانید که سوئیفت 3 تا اواخر سال منتشر می شود، این نسخه نتیجه تلاش یک تیم فوق العاده است، پروپوزال های متعددی ارسال شد و بالاخره اپل در 2015 سوئیفت را اپن سورس کرد، این پروپوزال ها پس از بررسی و ارزیابی دقیق توسط تیم اصلی پذیرفته شدند. در این مقاله به مهم ترین تغییرات این نسخه از سوئیفت پرداخته خواهد شد، با ما همراه باشید.
سوئیفت 3 چه ویژگی دارد؟
تیم اصلی یک هدف بسیار روشن و واضح از انتشار سوئیفت 3 داشتند، هدف آنها خلق اساس و پایه محکم برای زبان برنامه نویسی سوئیفت بوده است. در کنفرانس WWDC 2016، آقای Chris Lattner تاکید کرد که سوئیفت 3 به معرفی تغییرات بنیادی و تاثیرگذار خواهد پرداخت. این شرایط به معنای تغییر امکانات فعلی، حذف برخی از قابلیت ها و ارتقای پایه و اساس زبان می باشد.
پروژه Swift evolution برای تمامی افراد درگیر در انجمن سوئیفت یک داستان موفقیت قلمداد می شود و نتیجه تعامل بسیار زیاد و گسترده سوئیفت 3 شده است.
اپل درباره فرآیند انتشار بسیار شفاف عمل می کند و تصاویر سوئیفت 3 در وب سایت سوئیفت در دسترس می باشند و در Xcode 8 نیز گنجانده شده اند.
نسخه سوم سوئیفت تنها بر روی زبان برنامه نویسی سوئیفت متمرکز نشده، بلکه شامل تغییرات قابل توجه در ابزارها، کتابخانه استاندارد و قابلیت همکاری زبان با Cocoa می باشد. به یاد داشته باشید که سوئیفت تنها یک زبان نیست، وقتی که درباره سوئیفت صحبت می کنیم عموما تنها درباره زبان می اندیشیم، اما سوئیفت شامل کتابخانه استاندارد و پکیج منیجر نیز می باشد.
سازگاری منبع
چنانچه با سوئیفت کار کرده باشید، می دانید که انتقال کد از یک نسخه به دیگری کار چندان آسانی نیست و متاسفانه انتقال پروژه به سوئیفت 3 نیز از این لحاظ متفاوت نمی باشد.
از طرفی هدف اولیه سوئیفت 3 اطمینان از این بابت است که انتقال از سوئیفت 3 به نسخه های بعدی زبان این مشکل را نخواهد داشت، سازگاری منبع نقطه تمرکز کلیدی سوئیفت 3 می باشد.
ظاهر بسیار خوب
سوئیفت با هدف تبدیل به یک زبان برنامه نویسی مدرن طراحی شده، اما ظاهر و عملکرد آن نیز در فرآیند طراحی مورد توجه قرار گرفته است و تیم سازنده در نسخه جدید سوئیفت نیز در حال کار بر روی ظاهر آن می باشد. تغییرات متعددی و محسوسی در این نسخه وجود دارند، اما نتیجه نهایی زبانی است که از ظاهر و احساس خوبی برخوردار خواهد بود و کار با سوئیفت 3 را لذت بخش خواهد کرد. برای نمونه ای از این تغییرات می توان به Core Graphics و Grand Central Dispatch اشاره کرد که بعدا مورد بحث قرار خواهند گرفت.
چه تغییراتی را در این نسخه شاهد هستیم؟
جدای از ظاهر خوب و بسیار زیبای سوئیفت 3، در ادامه می خواهیم بر روی تغییرات کلیدی که در این نسخه معرفی شدند متمرکز شویم، اما باید به یاد داشته باشید که سوئیفت 3 تا زمان انتشار رسمی آن تغییر کرده و بهبود خواهد یافت.
API
خوانایی
زمان و انرژی زیادی صرف ارتقای API زبان سوئیفت شده و تغییرات اعمال شده چشمگیرند، اما نتیجه کار بسیار خوب از آب در آمده است. هدف تیم اصلی در سوئیفت 3 ساخت API است که بر روی خوانایی و دسترس پذیری متمرکز شده باشد.
اکثر ما به طولانی نویسی آبجکتیو سی عادت کرده ایم، اما API جدید سوئیفت رویکرد متفاوتی را اتخاذ کرده و این کار از طریق تاکید و تمرکز بر روی ملزومات صورت پذیرفته است. نگاهی به مثال زیر از سوئیفت 2.2.1 بیندازید، چنانچه قبلا با سوئیفت یا آبجکتیو سی کار کرده باشید این مثال برای شما آشنا خواهد بود.
parentViewController.presentViewController(newViewController, animated: true, completion: nil)
در سوئیفت 3 این قطعه کد کمی متفاوت بوده و در زیر نمایش داده شده است:
parentViewController.present(newViewController, animated: true, completion: nil)
انجمن سوئیفت دریافت که نیازی به درج یک رفرنس به چیزی که در حال ارائه است نمی باشد، زیرا این اطلاعات هم اکنون نیز در پارامتر اول گنجانده شده اند. در نتیجه نام متد خواناتر و مختصرتر شده و می توان این تغییر را یک بهبود قطعی تلقی کرد.
بسیاری از پروپوزال هایی پذیرفته شده که در سوئیفت 3 جای گرفته اند، بر روی ساده سازی و حذف فایل های بیهوده از زبان متمرکز شده اند، API سوئیفت از ماهیت طولانی نویسی آبجکتیو سی به شدت تاثیر پذیرفته است.
خوانایی بسیار مهم است و سوئیفت 3 بدون اینکه خوانایی را تحت تاثیر قرار دهد، از طولانی نویسی می کاهد. انجمن سوئیفت بر این باور است که طراحی API همواره باید نحوه استفاده از API را مورد توجه قرار دهد و این امر به وضوح در تغییرات معرفی شده در سوئیفت 3 مشهود است.
پارمترهای برچسب گذاری
تغییر مهم دیگر که بسیاری از توسعه دهندگان آن را مورد استقبال قرار می دهند امضای سازگار توابع و متدها با درج برچسب پارامتر اول به صورت پیش فرض می باشد. در زیر یک تابع معمولی در سوئیفت 2.2.1 را مشاهده می کنید، به طور پیش فرض برچسب اولین پارامتر در زمان فراخوانی تابع حذف می شود.
func setupView(view: UIView, withConfiguration configuration: Configuration) {
// ...
}
setupView(view, withConfiguration: configuration)
اما شرایط مشابهی در سوئیفت 3 حاکم و پارامتر اول دیگر تغییری پیدا نخواهد کرد و این ویژگی مورد استقبال توسعه دهندگان قرار خواهد گرفت.
func setupView(view: UIView, withConfiguration configuration: Configuration) {
// ...
}
setupView(view: view, withConfiguration: configuration)
به سبب تغییر مذکور، شما در مثال بالا می توانید با حذف رفرنس به ویو در نام تابع آن را بهبود بخشید.
func setup(view: UIView, withConfiguration configuration: Configuration) {
// ...
}
setup(view: view, withConfiguration: configuration)
درج به عنوان عضو
کار با APIهای سی در سوئیفت همواره ظاهر و احساس ناخوشایندی داشته است. برای مثال توابع Core Graphics به عنوان توابع عمومی وارد می شوند که راه حل چندان خوبی به نظر نمی رسد و در نتیجه استفاده از Core Graphics در سوئیفت چندان مطلوب نیست.
همین شرایط برای Grand Central Dispatch نیز حاکم است، در مثال بعدی از Grand Central Dispatch برای ارسال یک تسک به صف پس زمینه به صورت ناهمگام استفاده شده است.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
// ...
}
API در سوئیفت 3 شباهت زیادی به API نیتیو سوئیفت دارد، توابع به عنوان متدها وارد شده اند و سینتکس زیر در سوئیفت 3 نتیجه می شود.
DispatchQueue.global(attributes: .qosBackground).async {
// ...
}
انجمن سوئیفت حذف تعدادی از ویژگی ها را نیز پذیرفته که در مقاله بعدی به آنها پرداخته خواهد شد، با ما همراه باشید.