تبلیغات
تبلیغات

کلمه کلیدی vararg در کاتلین – نامحدود کردن تعداد پارامتر یک تابع

تصور کنید بتوان تابعی نوشت که قابلیت دریافت بی‌نهایت (یعنی به تعداد نامحدودی) پارامتر را داشته باشد! البته این موضوع چیز عجیبی نیست و برای مثال اگر با آرایه‌ها کار کرده باشید، تابع arrayOf را دیده‌اید که به همین صورت عمل کرده و می‌تواند تعداد نامحدودی ورودی دریافت کند. برای مثال:

در اینجا 12 پارامتر ارسال کرده‌ایم و این در حالیست که می‌توانیم کمتر یا بیشتر از این تعداد را هم به داخل تابع ارسال کنیم؛ تا از روی آنها یک آرایه ساخته و return (برگردانده) شود.

کلمه کلیدی vararg

برای ایجاد یک تابعی که بتواند به صورت نامعلومی پارامتر دریافت کند، بایستی آخرین ورودی تابع را از نوع vararg تعریف کرد! توجه داشته باشید که قبل از آخرین ورودی یک تابع، می‌توان ورودی‌های دیگری قرار داد، ولی آخرین ورودی تنها می‌تواند vararg باشد که باعث می‌شود به صورت بی‌نهایتی دربیاید! اجازه دهید با مثالی این موضوع را دنبال کنیم.

فرض کنید قصد داریم تابعی بنویسیم تا اعدادی دریافت کرده و سپس بگوید کدام یک از آنها بزرگتر است! و البته که می‌توان در ورودی این تابع، یک آرایه‌ی عددی تعریف کرد؛ ولی ما نمی‌خواهیم یک متغیر از جنس آرایه به داخل آن ارسال کنتیم! بلکه قصد داریم پارامتر ارسال کنیم!

پیاده‌سازی اول

ابتدا برای شروع، آن را به کمک یک آرایه می‌نویسیم:

همانطور که می‌بینید، یک آرایه در ورودی دریافت شده و سپس بزرگترین عدد داخل آن توسط الگوریتم نوشته شده بررسی می‌شود (کاری با الگوریتم نداریم چون خارج از این بحث است). و اگر بخواهیم از این تابع استفاده کنیم، برای مثال می‌توان نوشت:

اما همانطور که گفته شد، ما قصد داریم تا اعداد را به صورت پارامتر به داخل تابع max ارسال کنیم؛ ولی در بالا، به صورت یک متغیر آرایه‌ای ارسال شده است!

پیاده‌سازی دوم

بنابراین می‌توان تابع max را به صورت زیر با پارامتر بی‌نهایت تعریف کرد:

چیزی که می‌بینید شاید برایتان عجیب باشد! پشت آخرین پارامتر تعریف شده، کلیدواژه‌ی vararg را قرار داده‌ایم تا به صورت بی‌نهایتی دربیاید! اما گرچه نوع آن یک آرایه نیست، ولی داخل تابع، همانند یک آرایه با آن برخورد کرده‌ایم و در واقع numbers، یک آرایه است! پس برای استفاده از این تابع، می‌توان همان کد قبل را به صورت زیر نوشت:

نمی‌توان داخل تابع max دومی، به جای ورودی numbers، یک متغیر آرایه‌ای ارسال کرد! گرچه داخل تابع، ویژگی‌های یک آرایه را دارد؛ ولی همچنان vararg است!

کانال تلگرام فول کده
تبلیغات

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

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک‌گذاری اطلاعات در هر زمینه‌ای
برنامه‌نویس فول استک

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه