Amin Rahkan | امین راه کان
Amin Rahkan | امین راه کان
خواندن ۲ دقیقه·۲ سال پیش

درک بلاک Init در زبان کاتلین

درک بلاک Init در زبان کاتلین
درک بلاک Init در زبان کاتلین


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

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

class SumOfNumbers { SumOfNumbers() { } }

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

class Person(name:String,age:Int) { }

مثال بالا یک مثال از یک کلاس از کاتلین هست که یک سازنده اولیه ( Primary Constructor ) دارد. اما مشابه جاوا اگه ما مجبور باشیم یه سری کارها رو در سازنده اجرا کنیم چطوری باید این کار رو انجام بدیم ؟ چون این کار به نظر میاد در Primary Constructor امکان پذیر نباشد.

اگر چه برای این کار دو راه وجود دارد که یکیش استفاده از سازنده ثانویه یا Secondary Constructor هست و دیگری بلاک Init، اما ما اینجا فقط قصد داریم در مورد بلاک Init صحبت کنیم.

بیاید در قالب یک مثال بلاک Init رو بهتر متوجه بشیم.

توی مثال بالا در کلاس Person، اگر ما نیاز داشته باشیم چک کنیم که اگر person بزرگتر از سن من هست یا خیر ؟ به شکل زیر می تونیم این کار رو انجام بدیم.

class Person(name: String, age: Int) { val isOlderThanMe = false val myAge = 25 init { isOlderThanMe = age > myAge } }

در اینجا، ما دو متغییر isOlderThanMe و myAge رو به ترتیب با مقادیر پیش فرض false و 25 مقدار دهی کردیم.

حالا، در بلاک init ما متغییر age رو از primary constructor مقایسه می کنیم با متغییر myAge و اساین می کنیم مقدار این مقایسه رو به isOlderThanMe . اگر age بزرگتر از 25 بود مقدار اساین شده True خواهد بود و در غیر این صورت false خواهد بود.

برای بررسی کد زیر رو ببینید،

var person = Person(&quotHimanshu&quot, 26) print(person.isOlderThanMe)

این کد نتیجه مطلوب رو پرینت خواهد کرد. زمانی که کلاس Person با داده های ارسالی name با مقدار "Himanshu" و age با مقدار 26 مقدار دهی میشه، بلاک init به عنوان ابجکت ساخته شده فراخوانی خواهد شد و مقدار isOlderThanMe بر اساس شرایط تعریف شده ابدیت می شود.

نکات قابل توجه :

  • بلاک init همیشه بعد از سازنده Primary فراخوانی می شود.
  • یک فایل کلاس می تواند یک یا چند بلاک init داشته باشد که به صورت سری و پشت سر هم اجرا می شوند.

شاد باشید :)

امین راه کان

مطلب ترجمه ای بود از این پست

kotlinبرنامه نویسی
یک برنامه نویس و فعال حوزه کسب و کار
شاید از این پست‌ها خوشتان بیاید