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

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

تعریف تابع: بدنه تابع را مشخص می کند.

توابع سوئیفت حاوی نوع پارامتر و نوع مقدار برگشتی آن می باشند.

تعریف یک تابع

در سوئیفت، تابع با کلید واژه “func” تعریف شده است. هنگامی که یک تابع به تازگی تعریف شده باشد ممکن است یک یا چند مقدار را به عنوان پارامترهای ورودی به تابع در نظر گیرد و توابع بدنه اصلی را پردازش کند و مقادیر را به به عنوان “انواع بازگشتی” تابع نشان دهد.
هر تابع برای خود نامی دارد که معمولا بیانگر نوع عملکرد آن می باشد. برای استفاده از یک تابع، کافی است نام آن تابع را صدا بزنید( فراخوانی کنید) و مقادیر ورودی را (آرگومان ها) که با انواع پارامترهای تابع مطابقت دارند، در آن قرار دهید. پارامترهای تابع نیز “tuples” نامیده می شوند.
آرگومان های یک تابع همیشه باید مشابه ترتیب لیست پارامترهای تابع ارائه شوند و مقادیر بازگشتی به همراه → آورده می شوند.

نحوه(سینتکس) نوشتن یک تابع

به کد زیر نگاهی بیندازید. نام student به عنوان داده های رشته ای تعریف شده در داخل تابع “student” اعلام شده است و وقتی تابع فراخوانی می شود ، نام دانش آموز را برمی گرداند:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

فراخوانی یک تابع

بگذارید تصور کنیم که تابعی با نام “display” تعریف کرده و مثلاً آن را برای نمایش اعداد یک تابع با نام تابع “display” در نظر گرفته ایم که ابتدا با شناسه “no1” که دارای نوع داده عدد صحیح است آغاز می شود. سپس شناسه “no1” به شناسه “a” اختصاص می یابد که در نهایت به همان عدد صحیح نوع داده اشاره می کند. اکنون شناسه “a” به تابع بازگردانده می شود. در اینجا تابع ()display بعنوان مقدار عدد صحیح مشخص شده و هر زمان که تابع فراخوانده می شود، مقادیر عدد صحیح را برمی گرداند.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

پارامترها و مقادیر بازگشتی

سوئیفت پارامترهای توابع انعطاف پذیر و مقادیر بازگشتی آن ها را از مقادیر ساده به پیچیده ارائه می دهد. مشابه عملکرد C و Objective C، توابع سوییفت نیز ممکن است اشکال مختلفی داشته باشند.

توابع با پارامترها

یک تابع با انتقال مقادیر پارامتر به بدنه خود قابل دسترسی است. ما می توانیم مقادیر پارامتر تکی و یا چند تایی را به عنوان tuples به تابع منتقل کنیم:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

توابع بدون پارامتر

همچنین ممکن است توابعی بدون هیچ پارامتری وجود داشته باشند.

سینتکس:

در ادامه مثالی با تابع بدون پارامتر آورده شده است:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

توابع با مقادیر بازگشتی

همچنین از توابع برای بازگرداندن مقادیر رشته ای، عدد صحیح و اعشاری بعنوان انواع مقادیر بازگشتی استفاده می شود. برای پیدا کردن بزرگترین و کوچکترین عدد در یک آرایه، تابع Ls به همراه نوع داده عددی صحیح کوچک و بزرگ معرفی می شود.

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

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

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

برخی از توابع ممکن است درون خود آرگومانهایی بدون هیچ گونه مقادیر بازگشتی داشته باشند. برنامه زیر a و b را به عنوان آرگومانهایی برای تابع ()sum مشخص می کند. در داخل تابع، مقادیر آرگومانهایی a و b با استناد به مقدار تعریفی تابع ()sum  مشخص شده و مقادیر آن چاپ می شوند و از این طریق مقادیر بازگشتی را از بین می برند.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

توابع با انواع بازگشتی Optional

سویفت برای خلاص شدن از شر مشکلات، ویژگی “optional” را بعنوان یک اقدام ایمن معرفی می کند. به عنوان مثال در نظر بگیرید که ما مقادیر تابع را به عنوان عدد صحیح اعلام می کنیم اما وقتی تابع یک مقدار رشته یا مقدار nil را برمیگرداند چه اتفاقی می افتد. در این حالت کامپایلر مقدار خطا را نشان می دهد. ” optional” برای خلاص شدن از شر این مشکلات معرفی شده است.
توابع Optional(اختیاری) دو شکل “value” و “nil” خواهند داشت. با استفاده از کاراکتر کلیدی ? کنترل می کنیم که آیا تابع Optional ما یک مقدار را برمیگرداند یا یک nil را.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

از Optionals برای بررسی مقادیر ناخواسته استفاده می شود و بدین ترتیب زمان زیادی برای اشکال زدایی صرف شده و کد را برای کاربر، کارآمد و قابل خواندن می کند.

اسامی پارامتری محلی و خارجی تابع

نام پارامترهای محلی: نام پارامترهای محلی فقط در داخل تابع قابل دسترسی است.
در اینجا آرگومان number در تابع sample بعنوان یک متغیر داخلی معرفی می شود از اینرو تنها بصورت داخلی توسط تابع sample() قابل دسترس می باشد. در اینجا آرگومان number بعنوان بک متغیر محلی معرفی می شود ولی برای ارجاع به متغیر از خارج از تابع باید از دستورات زیر استفاده کنید:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

نام پارامترهای خارجی: نام پارامترهای خارجی به ما این امکان را می دهد که پارامترهای تابع را برای روشن تر کردن هدف آنها مشخص کنیم. به عنوان مثال در زیر می توانید دو پارامتر تابع را نامگذاری کرده و سپس آن تابع را به شرح زیر تعریف کنید:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

پارامترهای variadic

هنگامی که می خواهیم تابعی را به همراه چندین آرگومان تعریف کنیم، می توانیم اعضا را بعنوان پارامترهای variadic تعریف کنیم. اگر بعد از اسامی پارامترها از کاراکترهای  استفاده کنید، آنگاه پارامترهای شما بعنوان پارامترهای variadic شناخته می شوند.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

پارامترهای ثابت، متغیر و I/O

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

پارامترهای I/O در سوئیفت این قابلیت را به شما ارائه می دهند تا مقادیر پارامتر را حتی بعد از فراخوانی تابع که مقادیر آن تغییر داده می شود، حفظ کند. در ابتدای تعریف پارامتر تابع، کلمه کلیدی inout معرفی می شود تا مقادیر را نگه دارد.

از کلمه کلیدی inout اینگونه می توان نتیجه گرفت که مقادیر آن در یک تابع گذاشته می شوند و توسط تابع در دسترس بوده و تغییر داده می شوند و مجددا به خروجی تابع بازگردانده می شوند تا آرگومان اصلی را تغییر دهند.

متغیرها تنها بعنوان یک آرگومان برای پارامتر in-out قرار داده می شوند از اینرو مقادیر آن در درون و بیرون تابع تغییر داده می شوند. بنابراین نیازی نیست تا رشته ها و لیترال ها را بعنوان پارامترهای in-out معرفی کنیم. اگر کاراکتر & را قبل از یک نام متغیر قرار دهیم بدان معنا است که ما آرگومان را در پارامتر in-out می گذاریم.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

انواع تابع و کاربرد آن

هر تابع با در نظر گرفتن پارامترهای ورودی عملکرد خاصی را دنبال می کند و نتیجه دلخواه را ارائه می دهد:

در اینجا مثالی آورده شده است:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

در اینجا تابع با دو شناسه no1 و no2 به عنوان انواع داده عدد صحیح آغاز می شود و نوع بازگشتی آن نیز تحت عنوان “int” اعلام می شود:

در اینجا تابع به عنوان داده های رشته ای اعلام می شود. توابع همچنین ممکن است دارای انواع داده های void باشند که چنین توابعی هیچ مقداری را برنمی گردانند:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

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

استفاده از انواع تابع

همانطور که در زیر ذکر شده است توابع ابتدا با آرگومان های نوع عدد صحیح، اعشاری و یا رشته و سپس به عنوان ثابت یا متغیر به تابع منتقل می شوند:

در اینجا Sum نام تابع است که دارای متغیرهای عددصحیح  و b می باشد که اکنون بعنوان یک متغیر برای تابعی به نام addition معرفی شده است. سپس هردو تابع addition و Sum دارای تعداد آرگومانهای مساوی هستند که از نوع عدد صحیح معرفی شده اند و مقادیر صحیح را بعنوان مرجع برمیگردانند:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

استفاده از تابع بعنوان پارامتر و مقدار بازگشتی

می توانیم خود تابع را بعنوان یک نوع پارامتر در تابع دیگری قرار دهیم:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

توابع تو در تو

یک تابع تودرتو این امکان را برای شما فراهم می آورد تا یک تابع خارجی را با فراخوانی یک تابع داخلی، فراخوانی کنید:

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

کلیدواژه ها :

این خبر را به اشتراک بگذارید :