زبان برنامه نویسی سوئیفت | Swift

زبان برنامه نویسی سوئیفت

در سال های گذشته، طوفان برنامه ها و اپلیکیشن های تلفن همراه سراسر جهان را در هم نوردید  و روش استفاده  ما از اینترنت برای کار یا تفریح را تغییر داد.  در گذر زمان، فناوری های مختلفی ظهور کرد تا برنامه های تلفن همراه و فرایندهای توسعه جدیدی ساخته شود که کم کم دارندگان تلفن همراه را به شهروندان درجه اول تبدیل کرده است. اما با اینکه تلفن همراه و موبایل در همه جا حضور دارد بازهم آینده تازه شروع شده است. ما با نسلهای جدید وسایل متحرک و سیاری مثل وسایل پوشیدنی یا وسایل متحرک فراوانی روبرو خواهیم شد که اینترنت چیزها یا به اختصار چیزنت را می سازند. در سال های آتی، با انواع جدید رابطهای کاربر برای نمایش و ارائه داده ها و پذیرش فرمان ها مواجه خواهیم شد و درباره شرکتهایی خواهیم شنید که واقعا متحرک و سیار شده اند. همه این مسایل تاثیر چشمگیری بر شیوه طراحی، توسعه و تست نرم افزار در سالهای آینده دارند.

اپل به تازگی، زبان برنامه نویسی سوئیفت را منتشر کرده است. سوئیفت، زبان برنامه نویسی برای توسعه iOSو OSX تا نسخه ۱ است. سوئیفتِ اپل را با زبان اسکریپتینگ موازی قدیمیتر اشتباه نگیرید. سوئیفت کار توسعه iOSوOSX را ساده تر و لذت بخش تر کرده است. در مقاله حاضر، ۵ ویژگی شگفت انگیز سوئیفت و دلایل بهترین بودن آن را توضیح می دهم.

اپل قبل از این هم زبان برنامه نویسی Objective-C را معرفی کرده بود پس چرا زبان برنامه نویسی دیگری را معرفی می کند؟ زبان Objective-C وقتی معرفی شد بسیار مدرن و متفاوت بود اما با گذر زمان، دیگر ویژگیهای لازم برای زبان های مدرن دنیای امروز را نداشت. مثلا امروزه کاربران از زبان های اسکریپتینگ مثل روبی استفاده می کنند چون ساختار گویا و منظمی ارائه می کند. در جهان تخصصی برنامه نویسی هم زبان های type safe با استنباط نوع ترجیح داده می شود و تلاش شده مفاهیمی که عموما در زبان های کارکردی مثل Lambdas وجود دارد، در زبان هایی مثل C# و جاوا گنجانده شوند. Objective-C فاقد چیزهایی مثل ساختار و نحو منظم و استنباط نوع است. سوئیفت تلاش می کند این کمبود را جبران کند.

این بدان معنا نیست که Objective-C زبان برنامه ریزی خوبی نیست بلکه حقیقتا زبان بینظیر و خوبی است اما فضای کافی برای موفق شدن زبان های جایگزین Objective-C هم وجود دارد. بنابراین به لطف خوبیهای سوئیفت، تعجبی ندارد که این زبان در سطح جهان گسترده شود.

حال بیایید روی ویژگی های سوئیفت تمرکز کنیم. از منظر زبان، سوئیفت محشر و عالی است. اپل زبانهای مدرن مثل اسکالا یا C# را مورد توجه قرار داد و زبان فوق العاده ساده اما قدرتمندی ساخت. این زبان، مخلوط شیرینی از پارادایم های برنامه نویسی شی گرا و تابعی ارائه می کند. حال ۵ ویژگی شگفت انگیز سوئیفت را بیان میکنم.

۱-Syntax Goodies

سوئیفت از نظر ترکیب و نحو یا syntax عالی است. این زبان، بسیار ساده و گویا و قابل فهم است و قابلیت خوانایی بسیار عالی حتی بر اساس استانداردهای امروز دارد. در زمان طراحی زبان متوجه می شوید که سادگی، نکته مهمی است. مثلا  قرار دادن سمی کولن در پایان جملات را در نظر بگیرید. اپل این کار را اختیاری کرده و تلاش می کند ترکیب و نحو را تا حد ممکن، گویا و قابل فهم کند.

نمونه های دیگر عبارتند از string interpolation  یا درج مقدار جدید در رشته و پشتیبانی زبان از کار با آرایه ها و حلقه ها.

String interpolation

Loops

Arrays

اینها فقط چند مثال از پشتیبانی زبان سوئیفت از این نوع کارهاست. مثلا توجه کنید بهم پیوند زدن آرایه ها را میتوان با متد “append” در Array class انجام داد اما حقیقت این است اپل تلاش کرد این کار را به صورت بخشی از زبان درآورد تا هدفش از ساخت سوئیفت را نشان دهد.

اگر می خواهید سوئیفت را یاد بگیرید و بعضی از این کدها را امتحان کنید، Playground in Xcode 6  بسیار خوب است. Playground به شما امکان می دهد همزمان با تایپ کردن کد، آن را فورا تست کنید. این، هرچیزی که در Playground تایپ می کنید را اجرا کنید و اطلاعات جامع درباره مقدار متغیرها، مقادیر بازگشتی function calls و تعداد دفعاتی که  بلوک های کد ویژه اجرا شده، ارائه می کند. باز کردن Playground in Xcode 6 بسیار ساده است.

Playground اینگونه به نظر می رسد:

۲-function ها یا توابع، اشیای مرتبه اول (first class) هستند

توابع، اشیای مرتبه اول هستند و توابع مرتبه بالاتر را می توان در زبان های دیگر پیدا کرد. برای مثال، اخیرا جاوا۸ ،Lambdas را معرفی کرده است. این مفهوم بسیار ساده است و اجازه می دهد توابع کارکردهای دیگری مثل پارامترها یا توابع برگشتی را هم انجام دهند.

سادگی این مفهوم در قدرتش پنهان شده چون امکان مختصرنویسی بیشتر را فراهم می کند. مثلا تابع “filter” که روی یک آرایه بکار رفته را در نظر بگیرید. تابع فیلتر به شما امکان می دهد یک آرایه خاص را براساس آیتمهایی که معیارهای خاصی را رعایت می کنند، فیلتر کنید. نکته کلیدی این است که بتوان تابع را به شکل پارامتر دریافت کرد. برای تعریف تابع بهتر است ترکیب و syntaxرا بررسی کنیم.

سوئیفت، ترکیب و syntax  برای تعریف توابعی دارد که تا حدودی شبیه زبان های کارکردی مثل Haskell هستند. در سمت چپ پیکان  پارامترها و در سمت راست آن، Return Type را دارید. در مثال فوق، می خواهیم لیستی از اعداد را  براساس یک عدد خاصی که می خواهیم یک Bool را برگرداند، فیلتر کنیم. در این مورد، نوع تابع ما چنین است:

به این معنا که یک Int دریافت کرده و یک Bool برمی گردانید. بدیهی است می توانید چند پارامتر داشته باشید اما نمی دانید که می توانید چند مقدار را هم برگردانید بدون اینکه مجبور باشید یک container object بسازید. در این حالت، تابع یک tuple را برمی گرداند.

تعریف یک تابع برای فیلتر کردن اعداد صحیح چنین است:

حال که تابع خود را داریم اجازه دهید به تابع “filter” نگاه کنیم که یک تابع را به صورت پارامتر می دهد.

در این مثال، فیلتر، یک تابع مرتبه بالاتر است چون تابع را به صورت یک پارامتر ارائه می دهد. در توابع سوئیفت، اشیا هم وجود دارند که یعنی می توانیم تابع را به صورت درخط تعریف کنیم.

یا می توانیم تابع را به یک متغیر اختصاص داده و بعد از آن استفاده کنیم.

با استفاده از توابع به عنوان اشیا می توانید از آنها به عنوان پارامتر استفاده کنید. اما این کار در سوئیفت بسیار ساده انجام می شود و مفهوم اصلی است که با type inference  ،حتی بهتر انجام می شود.

۳- strongly typed با type inference

در جهان تخصصی، عادت داریم روی شبکه ایمنی strongly typed خود کار کنیم. درحالی که زبان های strongly typed می توانند اطمینان بیشتری به شما بدهند که چیزها اگر کامپایل شوند، نمی شکنند، اما وقتی این زبان ها، type inference را انجام دهند، تجربه بهتری خواهید داشت. بنابراین برای مثال، می توان این کار را انجام داد:

توجه کنید در جمله دوم، یک type وجود ندارد. از آنجا که سوئیفت می داند “bar” یک رشته است، لازم نیست آن را به این صورت تعریف کنیم. این موضوع زمانی جالب می شود که این type ، نوع توابعی است که به آن استنباط می شود.

بنابراین چگونه می توان توابع را از روی مثال های قبلی خود تعریف کرد بدون اینکه type را تعریف کنیم؟ حال توضیح می دهیم سوئیفت چگونه این کار را می کند.

خیلی تمیز و گویاست. اگر بیشتر از یک پارامتر داشته باشید و می خواهید به پارامترها بر اساس نام، استنباط کنید، می توانید چنین کنید:

۴-  Generics

یک ویژگی دیگر در این زبان که می تواند بسیار جالب باشد، generics است. در دنیای زبان های برنامه نویسی، generics اولین بار در C# معرفی شد و بعد ها، در جاوا ایجاد شد. شما با استفاده از Generics می توانید از type casts خلاص شوید. آنها به کامپایلر امکان می دهند type check  را انجام دهند که معمولا در زبان های بدون generics وجود ندارد( درست است که generics وقتی در C# معرفی شد، بحثی ایجاد نکرد بلکه در میان طرفداران C# و جاوا، کاملا پذیرفته شد).

Generics  راهی برای نادیده گرفتن یک type ارائه می دهد که معمولا مربوط به پارامترها و return type است. اگرچه این کار پیچیده به نظر می رسد اما با یک مثال ساده می توان آن را بهتر درک کرد.

اگرچه این مثال واقعی نیست اما می بینید دانستن type شی داخل آرایه در زمان کامپایل، چقدر ساده است. برای مثال ساده تر، توجه کنید چگونه کامپایلر می داند آرایه حاوی رشته هاست:

Generics محدود به پارامترها نیست ، می توانید generic class،شماره ها و ساختارها را تعریف کنید. در حقیقت، در مثال قبلی، نوع لیست اینگونه است:

 

<Array<String

ممکن است فکر کنید Generics در سوئیفت شبیه پروتکل ها در Objective-C است اما علی رغم شباهت ها از نظر ترکیب و syntax ، مفاهیم کاملا باهم متفاوت هستند. Objective-C از Generics پشتیبانی نمی کند. پروتکل ها روشی ارائه می کنند که نشان میدهد یک اجرا با messaging contract تطابق دارد یا خیر اما contract باید از قبل تعیین شده باشد. برای مثال، نمی توانید با پروتکل ها کاری کنید که همه آیتم در یک آرایه از یک type باشند اما با generics می توانید این کار را بکنید. جدا از این حقیقت که این دو مفهوم با هم متفاوتند اما سوئیفت به اندازه Objective-C از پروتکل ها پشتیبانی نمی کند.

۵- Tuples

Tupels مفهوم بسیار ساده ای است، می توانید یک گروه منظم از مقادیر را تعریف کنید. Tuples می توانند زمانی بسیار مفید باشد که باید بیشتر از یک مقدار را به عنوان یک پارامتر یا نتیجه استفاده از یک تابع- انتقال دهید. در Tuples نیازی به تعریف کردن type برای مقادیر ندارید، همه چیز استنباط شده و type در زمان کامپایل چک می شود. syntax تعریف یک tuple به صورت زیر است:

در این مورد، یک tuple با سه مقدار داریم، اولی، یک عدد صحیح ، دومی یک string و سومی، آرایه ای از رشته هاست. در نگاه اول، شبیه آرایه ها به نظر می رسد اما این مفهوم کاملا متفاوت است. نمی توانید یک آیتم را از یک tuple اضافه یا کم کنید . توجه کنید که کامپایلر چگونه نوع دقیق هر مقدار را می داند:

می توانید به مقادیر مختلف یک tuple بر اساس مکان داخل tuple استنباط کنید مثل آنچه در عکس می بینید یا می توانید هریک از این مقادیر را نام گذاری کنید. این کار زمانی خیلی جالب است که یک تابع باید چندین مقدار را برگرداند و تعریف کردن یک class یا struct فقط برای آن تابع، کار اضافی است. به مثال زیر توجه کنید.

Tuple ها راه ساده ای برای کار با چند مقدار بدون کار اضافیِ تعریف یک class یا struct ارائه می دهد.

یک نکته دیگر:

سوئیفت، ویژگی های بینظیر دیگری  مثل property observers، optional chaining و extensions هم دارد.

به عقیده من، سوئیفت همه شرایط لازم برای تبدیل شدن به یک زبان برنامه نویسی رایج برای iOSو OSX در دنیای مصرف کننده و دنیای برنامه نویسی را دارد. خصوصیت strongly-typed با type inference این زبان را برای جهان تخصصی مناسب و مطلوب کرده درحالی که syntax ساده و گویا، کسانی که  را جذب می کند که روی پروژه های مصرف کننده ها کار می کنند.

 


منبع : infoq


 

لینک کوتاه: https://Tjjc.ir/WgWDC

دیدگاهتان را بنویسید