دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۲
  • آبان

جلسه ۱۸ : بستارها (Closure) در Swift

  • دسته‌بندی‌ها :
جلسه ۱۸ : بستارها (Closure) در Swift
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش Swift را دنبال می کنند. Closure یا بستارها در Swift شبیه به توابع خود مختاری هستند که به عنوان بلوک ها سازماندهی شده اند و شبیه به زبان های C و Objective C در هر جایی قابل فرخوانی هستند همچنین ثابت ها و متغیرهایی که داخل توابع تعریف می شوند در داخل Closure ذخیره می شوند. برای آشنایی بیشتر با طرز کار با Closure در Swift در ادامه این مبحث با ما همراه باشید.

      کار با Closure در Swift

      در ادامه این آموزش شما با سینتکس و کاربردهای بستارها در Swift آشنا خواهید شد.

      آشنایی با بستارها در Swift

      توابع به عنوان یکی از موارد Closure در Swift محسوب می شوند و سه فرم زیر را دارند:

      توابع عمومیتوابع تودرتوشکل Closure
      دارای یک نام یوده و مقادیر را ذخیره نمی کند.دارای یک نام بوده و مقادیر تابع داخلی را ذخیره می کند.فاقد نام بوده و مقادیر را از توابع مجاور ذخیره می کند.

      عبارات Closure در Swift شامل بهینه سازی و سینتکس Style ها می باشد:

      • فراخوانی پارامتر و مقدار بازگشتی از متن.
      • بازگشت غیرمستقیم از Closure تک واژگان.
      • نام آرگومان کوتاه.
      • سینتکس Closure.

      سینتکس

      در زیر یک دستورالعمل عمومی برای تعریف بستارها در Swift است که پارامترها را قبول کرده و یک نوع داده را باز می گرداند:

      مثال : 

      این یک نمونه ی ساده از تعریف بستارها در Swift است:

      مثال : 

      نتیجه ی کامپایل و اجرای برنامه ی فوق به صورت زیر خواهد بود:

      مثال : 

      بستار زیر دو پارامتر را پذیرفته و یک مقدار Bool را برمی گرداند:

      مثال : 

      مثال:

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      عبارات در Closure

      توابع تودرتو یک راه مناسب برای نامگذاری و تعریف کد های بلوک را فراهم می کنند.

      در این مورد به جای استفاده از تابع والد از توابع کوتاه تر داخلی استفاده می شود.

      برنامه دستور صعودی

      مرتب سازی یک رشته توسط کلید ۴s در تابع “sorted” رزرو شده است که در کتابخانه standard  در دسترس است.

      تابع “sorted”  رشته های داده شده به ترتیب صعودی و عناصر را در یک آرایه جدید با همان اندازه و نوع داده شده ذکر شده در آرایه قدیمی باز می گرداند.

      دو آرگومان داخل تابع  “sorted” نمایش داده می شود:

      • مقادیر شناخته شده به عنوان آرایه ها.
      • محتویات آرایه (Int، Int) و مقدار بولین (Bool) را بازمی گرداند اگر آرایه به درستی مرتب شده باشد، مقدار true را نشان می دهد در غیر این صورت بازگشتی false خواهد شد.

       

      در مثال زیر یک تابع معمولی با پارامترهای ورودی رشته نوشته شده است که نتیجه ی مقایسه ی رشته ها را به برنامه ی اصلی بازگشت می دهد:

      مثال : 

      نتیجه ی اجرای کد فوق به صورت زیر خواهد بود:

      مثال : 

      درکد فوق دو پارامتر رشته در هنگام فراخوانی تابع مرتب سازی به آن تایع ارسال می شود.

      تابع هر دو رشته را با هم مقایسه کرد و سپس نتیجه را در قالب یک مقدار Bool برمی گرداند.

      سینتکس عبارات Closure :

      • constant parameters
      • variable parameters, and
      • inout parameters.

      عبارات Closure از مقادیر پیش فرض پشتیبانی نمی کند.

      پارامترهای Variadic و Tuples همچنین می توانند به عنوان انواع پارامترها و انواع بازگشتی استفاده شوند.

      مثال:

      مثال : 

      نتیجه ی اجرای کد فوق به صورت زیر خواهد بود:

      مثال : 

      پارامترها و نوع بازگشتی که در دستورات تابع ذکر می شوند می توانند داخل عبارات Closure با کلمه کلیدی ‘in’ نمایش داده شوند.

      بازگشت های عبارات نامحدود

      پارامتر دوم تابع sorted مشخص می کند که مقدار Bool باید توسط closure بازگردانده شود.

      از آنجا که بدنه closure شامل یک عبارت تکی (s1> s2) است که مقدار Bool را باز می گرداند، هیچ ابهامی وجود ندارد و کلید واژه بازگشت را می توان حذف کرد.

      برای بازگرداندن یک عبارت واحد تنها در عبارت closure کلمه ی کلیدی ‘return’ در قسمت اعلان آن حذف شده است.

      مثال:

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:

      مثال : 

      برنامه ی فوق بیان می کند که اگر string1 از string 2 بزرگتر باشد نتیجه ی true بازگردانده شده و در غیر این صورت نتیجه false خواهد بود.

      closureهای شناخته شده

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

      مثال:

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:

      مثال : 

      تعریف نام کوتاه پارامترها به عنوان closure

      Swift 4 به طور خودکار نام کوتاه آرگومان ها را برای closure خطی ارائه می دهد که می تواند برای ارجاع به مقادیر آرگومان های closure توسط نام های  $۰, $۱, $۲ استفاده شود.

      مثال :

      مثال : 

      در اینجا، $ ۰ و $ ۱ به اولین و دومین آرگومان String مربوط می شوند.

      نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:

      مثال : 

      Swift 4 کاربران را قادر می سازد تا بستارهای Inline را به عنوان نام کوتاه آرگومان ها بصورت  $ ۰، $ ۱، $ ۲ — $ n  نمایش دهد.

      زمانیکه از نام کوتاه آرگومان داخل عبارات closure استفاده می کنیم، لیست آرگومان های closure از بخش تعریف حذف می شود.

      از آنجایی که آرگومان با نام کوتاه در بدنه تریف شده است کلمه کلیدی ‘in’ حذف می شود.

      Closure ها به عنوان عملگر توابع

      Swift 4 ارائه ی عملگرهای توابع به عنوان closure یک راه آسان را برای دسترسی به اعضا فراهم می کند.

      در مثال قبلی در صورت برابر بودن دو رشته، کلمه کلیدی ‘Bool’ مقدار ‘true’ را برمی گرداند و در غیر این صورت مقدار بازگشتی ‘false’ بود.

      مثال:

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:

      مثال : 

      closure به عنوان تریلر

      ساختار:

      مثال : 

      مثال:

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:

      مثال : 

      دریافت مقادیر و انواع مرجع

      در Swift 4، گرفتن مقادیر ثابت و متغیر با کمک closure ها انجام می شود.

      ضبط مقادیر ثابت و متغیر با استفاده از تابع توزیع شده با نوشتن تابع در بدنه تابع دیگر به دست می آید.

      یک تابع داخلی موارد زیر را می گیرد:

      • آرگومان تابع بیرونی.
      • ضبط ثابت ها و متغیرهای تعریف شده در تابع بیرونی.

      شما می توانید بیش از دو متغیر را به عنوان closure بصورت زیر ارجاع دهید:

      مثال : 

      در اینجا متغیرهای oneDecrement و Decrement هر دو اشاره به یک حافظه به عنوان مرجع closure دارد:

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:

      مثال : 

      در مثال فوق تابع calcDecrement به عنوان یک closure عمل می کند.

      Swift 4 توابع مدیریت حافظه را با تخصیص و صرفه جویی در فضاهای حافظه در هنگام استفاده از متغیرها، مدیریت می کند.

      کلام آخر

      Closure یا بستارها در Swift شبیه به توابع خود مختاری هستند که به عنوان بلوک ها سازماندهی شده اند و شبیه به زبان های C و Objective C در هر جایی قابل فرخوانی هستند.

      QR:  جلسه ۱۸ : بستارها (Closure) در Swift
      به اشتراک بگذارید