کلاس و شی در کاتلین – آموزش برنامه نویسی kotlin ، در این قسمت از آموزش زبان Kotlin به مفهوم class و object در زبان کاتلین پرداخته ایم. در کاتلین هم مانند جاوا ما شی گرایی را کامل داریم حتی با سینتکس بسیار ساده تر و راحتتر ! درباره شی گرایی خیلی توضیح نمیدیم چون بصورت کامل در چند پست از تجاری اپ شی گرایی را آموزش داده ایم
همچنین بخوانید : آموزش شی گرایی
کلاس ها در کاتلین به چندین نوع تبدیل خواهند شد که در ادامه این پست تمامی نوع هارو بررسی خواهیم کرد 🙂
برای ساخت یک کلاس ساده در کاتلین بصورت ساده تنها کافیست کلمه کلیدی class و نام مورد نظر کلاس را بنویسیم:
class Person {
var name = "Ali"
var age = 21
}
در بلاک فوق ما یک کلاس با دو متغیر ساختیم و همینطور که میبینید دیگر نیازی به نوشتن public نیست چون بطور پیشفرض کلاس ها پابلیک تعریف میشوند
اما اگر بخواهیم کلاس را با سطح دسترسی دیگری مثلا private یا protected تعریف کنیم باید آنها را ذکر کنیم
در نهایت هم برای استفاده از این کلاس کافیست دستورات زیر را بنویسیم:
val a = Person()
val b = Person()
println("${a.age} ${b.age}") // Prints "21 21"
a.age = 42
println("${a.age} ${b.age}") // Prints "42 21"
همونطور که میبینید ما getter و setter ی برای فیلدهای کلاس نذاشتیم چو در کاتلین getter و setter ساده که فقط مقدار را return کنه (برگرداند) و یا مقداردهی کند برای فیلد ساخته میشود و دیگر نیازی به ساختن ما نیست اما اگر بخواهیم getter و setter سفارشی سازی شده ای (مثلا شرطی یا کد دیگری زمان برگرداندن و مقداردهی کردن) اعمال کنیم میتونیم متدهای get ، set کاتلین رو فراخوانی کنیم.
برای مثال :
class Person(age: Int) {
var age = 0
set(value) {
if (value < 0) throw IllegalArgumentException(
"Age cannot be negative")
field = value
}
init {
this.age = age
}
}
کلاس ها میتوانند یک سازنده اصلی که زمان ساخت شی صدا زده میشود داشته باشند که با ساختار زیر پیاده میشود:
class Person(firstName: String, lastName: String, yearOfBirth: Int) {
val fullName = "$firstName $lastName"
var age: Int
init {
age = 2018 - yearOfBirth
}
}
همونطور که مشاهده میکنید سازنده درواقع جلوی نام کلاس پیاده میشود و پارامترهای مورد نیاز را دریافت میکند ،همچنین بلاک init که بلاک مقداردهی ست که کاتلین در اختیار ما قرار میده برای مقدار دهی اولیه (زمان ساخت شی) متغیر ها.
اما شما میتوانید به هر تعداد دیگر سازنده در بلاک کلاس بصورت زیر بسازید:
class Person(val name: String, var age: Int) {
constructor(name: String) : this(name, 0)
constructor(yearOfBirth: Int, name: String)
: this(name, 2018 - yearOfBirth)
}
با کلمه کلیدی constructor میتونید سازنده با هر تعداد پارامتر بسازید اما درنظر داشته باشید که سازنده ای که میسازید باید از سازنده اصلی کلاس (سازنده ای که جلوی نام کلاس پیاده شده) پیروی کند ،که این عمل پیروی با علامت : (در ادامه بیشتر در باره ارث بری در کاتلین توضیح خواهیم داد) انجام میشود پس سازنده ای که میسازید باید مقادیری که سازنده اصلی کلاس نیاز دارد را تامین کند ،ولی اگر سازنده اصلی شما پارامتری نداشته باشد بلاک بالا بدین صورت خواهد شد:
class Person() {
constructor(name: String) : this()
constructor(yearOfBirth: Int, name: String)
: this()
}
و در ادامه برای استفاده از این کلاس ها کافیست دستورات زیر رو بنویسید:
val a = Person("ali", 35)
val b = Person("reza") // age = 0
val c = Person(1374, "amir") // age = 23
نکته:
Data classes
نوعی از کلاس های کاتلین درواقع Data class ها هستند که کمی بیشتر از کلاس های دیگر برای ذخیره و بازیابی داده ها استفاده میشوند . چرا؟
چون data class ها برای شما عملگرهای equals() برای مقایسه ، toString() برای برگرداندن داده ها بصورت رشته مرتب ، hashCode() برای برگرداندن داده ها بصورت هش شده و دیگر عملگر های پرکاربرد را فراهم میکند تا بتوانید بیشتر با داده های خود بازی کنید 🙂
در پست بعدی درباره ارث بری در کاتلین صحبت خواهیم کرد.
1 Comment
سلام ممنون از شما از مطلب استفاده و باذکر نام کپی کردم.