در کاتلین، constructors و بلوکهای init برای مقداردهی اولیه کلاسها استفاده میشوند، اما اهداف و ویژگیهای متفاوتی دارند. در اینجا چهار تفاوت اصلی بین constructors و بلوکهای init در کاتلین آمده است:
1. نحوه تعریف کردن و Syntax:
مثال:
بلوک init:
مثال:
2. هدف ایجاد هرکدام به شرح زیر می باشد:
برای درک بهتر تفاوتها، مثال زیر را مطالعه کنید:
فرض کنید میخواهیم یک کلاس برای اطلاعات یک کتابخانه بسازیم.
مثال Primary Constructor:
برای پارامترهایی مانند نام کتاب، نام نویسنده و سال انتشار استفاده میشود. این سازنده به ما امکان میدهد که به سادگی اطلاعات اصلی یک کتاب را در هنگام ایجاد آن مقداردهی کنیم.
مثال Secondary Constructor:
مثال بلوک init:
در این مثال، Primary Constructor برای مقداردهی ویژگیها استفاده میشود، Secondary Constructor راهی جایگزین برای مقداردهی ارائه میدهد، و بلوک init برای بررسیهای اضافه و اعمال منطق اضافی پس از مقداردهی استفاده میشود.
3. ترتیب اجرا:
اجرای Primary constructor به شکل است که این Constructor ابتدا اجرا میشود و سپس بلوکهای init به ترتیب اجرا میشوند. اگر Secondary Constructor وجود داشته باشد، آن باید به Primary Constructor ارجاع دهد و بلوکهای init بعد از اتمام کار Primary Constructor اجرا میشوند.
4. مقداردهی ویژگیها(Property):
مقداردهیPrimary Constructor : بهترین گزینه برای مقداردهی مستقیم ویژگیها است. به این معنی است که میتوانید به راحتی مقادیر ویژگیها (Property) را هنگام ساخت شیء به آنها بدهید.
مقداردهیSecondary Constructor : میتواند ویژگیها را نیز مقداردهی کند، اما معمولاً برای یکپارچگی (سازگاری) به سازنده اصلی ارجاع میدهد تا کد تمیز و یکسانی داشته باشد.
مقدار دهی بلوک init : بلوک init برای مقداردهی ویژگیهایی که نیاز به منطق پیچیده دارند یا به ویژگیهای دیگر وابستهاند، بسیار مفید است و میتوان از آن برای تنظیم مقادیر پیشفرض یا انجام کارهای اضافی در زمان ساخت شیء استفاده کرد.
نتیجه گیری:
constructors در کاتلین عمدتاً برای انتقال پارامترها و مقداردهی به ویژگیها به کار میروند، در حالی که بلوکهای init برای اجرای منطق پیچیدهای هستند که باید بعد از سازنده اصلی اجرا شود. هر دو نقش مهمی در راهاندازی درست یک نمونه از کلاس دارند.
ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:
بقیه آموزش های من با نام (mister developer) را می توانید در تلگرام و اینستاگرام دنبال کنید!!
کانال تلگرام: mister_developerr
اینستاگرام: mister_developerr
موفق و پیروز باشید