استنتاج نوع (Type Inference)
یک کدام از خصوصیتهای خوب کاتلین، امکان استنتاج نوع (Type Inference) میباشد. این یعنی شما مدام نیازی به عنوان کردن مصرح نوع داده متغیر طراحی اپلیکیشن در مشهد ندارید. کاتلین قادر است نوع متغیر را مبنی بر مقدار اولای که به آن میدهید، پیش بینی بزند:
val age = ۳۰ // Kotlin inferres Int
var name = "سارا" // Kotlin inferres String
val price = ۹۹.۹۹ // Kotlin inferres Double
با این درحال حاضر، چنانچه بخواهید میتوانید نوع را به طور مصرح هم معین فرمایید:
val age: Int = ۳۰
var name: String = "سارا"
val price: Double = ۹۹.۹۹
این عمل در مواردی که پیچیدگی وجود دارااست یا این که می خواهید خوانایی کد را ارتقاء دهید، موءثر میباشد.
چرا دو نوع متغیر؟
داشتن val و var به شما قابلیت میدهد تا صریحاً قصد خویش را در باب قابلیت و امکان تغییر و تحول یک متغیر مطرح نمائید. این عمل به تایپ کردن کدی یاری مینماید که:
خواناتر میباشد: با یک نگاه می فهمید که کدام دادهها اثبات و کدام قابل تغییر تحول میباشند.
ایمنخیس میباشد: احتمال خطاهایی که ناشی از تغییرو تحول ناخواسته دادهها میباشند را کاهش می دهد.
عملکرد بهتری دارااست: کامپایلر کاتلین قادر است برای متغیرهای val با صرفهسازیهای بیشتری اجرا دهد.
به همین استدلال، شایسته ترین سفارش در کاتلین این میباشد که تا حد قابلیت از val استعمال فرمائید و فقط در شکل نیاز حقیقی وواقعی به تغییرو تحول مقدار یک متغیر، از var استعمال فرمائید.
همینطور بخوانید» فلاتر یا این که کاتلین | جاوا یا این که کاتلین | پایتون یا این که کاتلین
نکات اساسی در زمینه ی متغیرها
اسم متغیر می بایست با حروف خرد آغاز خواهد شد و میتواند مشتمل بر حروف، اعداد و زیرخط (_) باشد.
اسم متغیر نباید واژه کلیدی یا این که اسم رزرو گردیده لهجه نرمافزار نویسی باشد.
نوع داده متغیر می بایست با پاره ای که به آن تخصیص داده می شود منطبق داشته باشد.
از متغیرها به صورت درست و در دامنه تعریف و تمجید گردیده آن ها استعمال فرمائید.
برای خوانایی بیشتر کد، اسمهای متغیر را بدیهی و بیان کننده تعیین فرمایید.
همینطور بخوانید» اشکال رینگ ها در کاتلین
تبدیل متغیرها به همدیگر در لهجه نرمافزار نویسی کاتلین
در کاتلین، تبدیل متغیرها به یکدیگر (دارای اسم و رسم به Type Conversion یا این که Type Casting) به طور مصرح (Explicit) اجرا میشود. این یک تفاوت اساسی با بعضا گویشها مانند جاوا میباشد که در مواقعی تبدیلهای ضمنی (Implicit) را مجاز می دانند (از جملهً int به long). فلسفه کاتلین این میباشد که از تبدیلهای ناخواسته که می تواند سبب ساز به از دست رفتن دادهها یا این که خطاهای نهفته گردد، دوری نماید.
کاتلین گروهای از توابع تبدیل را برای اشکال دادههای اول مهیا مینماید.
۱. تبدیل اشکال عددی به یکدیگر
برای تبدیل از یک نوع عددی به نوع دیگر، بایستی از توابع تبدیل معین به کارگیری فرمائید:
toByte()
toShort()
toInt()
toLong()
toFloat()
toDouble()
toChar() (برای تبدیل اعداد به کاراکترهای یونیکد متساوی)
نمونه:
fun main() {
val myInt: Int = ۱۰۰
// تبدیل Int به Long
val myLong: Long = myInt.toLong()
println("Int به Long: $myLong") // خروجی: ۱۰۰
// تبدیل Int به Double
val myDouble: Double = myInt.toDouble()
println("Int به Double: $myDouble") // خروجی: ۱۰۰.۰
// تبدیل Int به Float
val myFloat: Float = myInt.toFloat()
println("Int به Float: $myFloat") // خروجی: ۱۰۰.۰
// تبدیل Long به Int (ممکن است منجر به از دست رفتن داده شود)
val largeLong: Long = 2_000_000_000_000L // عدد بزرگتر از محدوده Int
val convertedInt: Int = largeLong.toInt()
println("Long به Int: $convertedInt") // خروجی: ۱۴۱۰۰۶۵۴۰۸ (داده از دست رفته)
val smallLong: Long = 50L
val convertedInt2: Int = smallLong.toInt()
println("Long به Int (محدوده مجاز): $convertedInt2") // خروجی: ۵۰
// تبدیل Double به Int (قسمت اعشاری حذف میشود)
val myDoubleValue: Double = ۹۹.۷۵
val intFromDouble: Int = myDoubleValue.toInt()
println("Double به Int: $intFromDouble") // خروجی: ۹۹
// تبدیل Int به Char (به کد ASCII/Unicode)
val charCode: Int = ۶۵ // کد ASCII برای \'A\'
val myChar: Char = charCode.toChar()
println("Int به Char: $myChar") // خروجی: A
}
نکات اصلی در تبدیل عددی:
تبدیل مصرح: شما به طبعً بایستی تابع تبدیل را فراخوانی فرمائید.
val x: Int = 10
val y: Long = x // اشتباه! بایستی x.toLong() باشد.
از دست رفتن داده (Data Loss): هنگام تبدیل از یک نوع با محدوده بزرگتر به یک نوع با محدوده کوچکتر (به عنوان مثالً Long به Int یا این که Double به Int)، ممکن میباشد دادهها از دست بروند یا این که تخمین شکل گیرد. کاتلین این زمینه را به شما گوشزد مینماید.
همینطور بخوانید: یادگرفتن اندروید استودیو از صفر تا صد
۲. تبدیل حرفه به عدد و برعکس
عدد به حرفه: از تابع toString() به کار گیری نمایید. این برای هر نوع دادهای در کاتلین قابل استعمال میباشد.
Kotlin
val num: Int = ۱۲۳
val numAsString: String = num.toString()
println("عدد به حرفه: $numAsString") // خروجی: "۱۲۳"
val piValue: Double = ۳.۱۴
val piAsString: String = piValue.toString()
println("Double به حرفه: $piAsString") // خروجی: "۳.۱۴"
حرفه به عدد: از توابع مانند toInt(), toLong(), toDouble(), toFloat() استعمال فرمایید. اصلی: درحالتی که حرفه دربردارنده مقدار عددی معتبری نباشد، این توابع یک NumberFormatException پرتاب مینمایند. برای دوری از این نادرست، میتوانید از توابع toIntOrNull(), toLongOrNull(), toDoubleOrNull(), toFloatOrNull() به کارگیری فرمائید که در شکل عدم توفیق null برمیگردانند.
Kotlin
val stringNumber: String = "۴۵۶"
val parsedInt: Int = stringNumber.toInt()
println("حرفه به Int: $parsedInt") // خروجی: ۴۵۶
val invalidString: String = "abc"
// val parsedIntWithError: Int = invalidString.toInt() // این خط سبب NumberFormatException می گردد!
val safeParsedInt: Int? = invalidString.toIntOrNull()
println("حرفه به Int (ایمن): $safeParsedInt") // خروجی: null
val validDecimalString: String = "۱۲۳.۴۵"
val parsedDouble: Double? = validDecimalString.toDoubleOrNull()
println("فن اعشاری به Double (ایمن): $parsedDouble") // خروجی: ۱۲۳.۴۵
۳. تبدیل میان گونه های شیء (Object Types) – Casting
در کاتلین، زمانی با گونه های شیء (کلاسها) سروکار دارید، می توانید از عملگرهای as و as? برای تبدیل نوع به کارگیری فرمائید.
as (Unsafe Cast – تبدیل ناایمن): این عملگر برای تبدیل مصرح یک شیء به نوع دیگری به کار گیری میشود. چنانچه شیء قابل تبدیل به آن نوع نباشد، یک ClassCastException پرتاب مینماید.
Kotlin
open class Animal
class Dog : Animal() {
fun bark() = println("Woof!")
}
class Cat : Animal() {
fun meow() = println("Meow!")
}
fun petAnimal(animal: Animal) {
val dog = animal as Dog // اگر animal واقعاً Dog نباشد، خطا میدهد
dog.bark()
}
fun main() {
val myDog = Dog()
petAnimal(myDog) // خروجی: Woof!
// val myCat = Cat()
// petAnimal(myCat) // Runtime Error: ClassCastException (Cat cannot be cast to Dog)
}
as? (Safe Cast – تبدیل ایمن): این عملگر کوشش مینماید شیء را به نوع متبوع تبدیل نماید. در شرایطی که تبدیل توفیقآمیز باشد، شیء تبدیل گردیده را برمیگرداند. درصورتی که شیء قابل تبدیل نباشد، به مکان پرتاب استثنا، null برمیگرداند. این طرز بسیار ایمنخیس میباشد.
استنتاج نوع (Type Inference)
یک کدام از خصوصیتهای خوب کاتلین، امکان استنتاج نوع (Type Inference) میباشد. این یعنی شما مدام نیازی به عنوان کردن مصرح نوع داده متغیر طراحی اپلیکیشن در مشهد ندارید. کاتلین قادر است نوع متغیر را مبنی بر مقدار اولای که به آن میدهید، پیش بینی بزند:
val age = ۳۰ // Kotlin inferres Int
var name = "سارا" // Kotlin inferres String
val price = ۹۹.۹۹ // Kotlin inferres Double
با این درحال حاضر، چنانچه بخواهید میتوانید نوع را به طور مصرح هم معین فرمایید:
val age: Int = ۳۰
var name: String = "سارا"
val price: Double = ۹۹.۹۹
این عمل در مواردی که پیچیدگی وجود دارااست یا این که می خواهید خوانایی کد را ارتقاء دهید، موءثر میباشد.
چرا دو نوع متغیر؟
داشتن val و var به شما قابلیت میدهد تا صریحاً قصد خویش را در باب قابلیت و امکان تغییر و تحول یک متغیر مطرح نمائید. این عمل به تایپ کردن کدی یاری مینماید که:
خواناتر میباشد: با یک نگاه می فهمید که کدام دادهها اثبات و کدام قابل تغییر تحول میباشند.
ایمنخیس میباشد: احتمال خطاهایی که ناشی از تغییرو تحول ناخواسته دادهها میباشند را کاهش می دهد.
عملکرد بهتری دارااست: کامپایلر کاتلین قادر است برای متغیرهای val با صرفهسازیهای بیشتری اجرا دهد.
به همین استدلال، شایسته ترین سفارش در کاتلین این میباشد که تا حد قابلیت از val استعمال فرمائید و فقط در شکل نیاز حقیقی وواقعی به تغییرو تحول مقدار یک متغیر، از var استعمال فرمائید.
همینطور بخوانید» فلاتر یا این که کاتلین | جاوا یا این که کاتلین | پایتون یا این که کاتلین
نکات اساسی در زمینه ی متغیرها
اسم متغیر می بایست با حروف خرد آغاز خواهد شد و میتواند مشتمل بر حروف، اعداد و زیرخط (_) باشد.
اسم متغیر نباید واژه کلیدی یا این که اسم رزرو گردیده لهجه نرمافزار نویسی باشد.
نوع داده متغیر می بایست با پاره ای که به آن تخصیص داده می شود منطبق داشته باشد.
از متغیرها به صورت درست و در دامنه تعریف و تمجید گردیده آن ها استعمال فرمائید.
برای خوانایی بیشتر کد، اسمهای متغیر را بدیهی و بیان کننده تعیین فرمایید.
همینطور بخوانید» اشکال رینگ ها در کاتلین
تبدیل متغیرها به همدیگر در لهجه نرمافزار نویسی کاتلین
در کاتلین، تبدیل متغیرها به یکدیگر (دارای اسم و رسم به Type Conversion یا این که Type Casting) به طور مصرح (Explicit) اجرا میشود. این یک تفاوت اساسی با بعضا گویشها مانند جاوا میباشد که در مواقعی تبدیلهای ضمنی (Implicit) را مجاز می دانند (از جملهً int به long). فلسفه کاتلین این میباشد که از تبدیلهای ناخواسته که می تواند سبب ساز به از دست رفتن دادهها یا این که خطاهای نهفته گردد، دوری نماید.
کاتلین گروهای از توابع تبدیل را برای اشکال دادههای اول مهیا مینماید.
۱. تبدیل اشکال عددی به یکدیگر
برای تبدیل از یک نوع عددی به نوع دیگر، بایستی از توابع تبدیل معین به کارگیری فرمائید:
toByte()
toShort()
toInt()
toLong()
toFloat()
toDouble()
toChar() (برای تبدیل اعداد به کاراکترهای یونیکد متساوی)
نمونه:
fun main() {
val myInt: Int = ۱۰۰
// تبدیل Int به Long
val myLong: Long = myInt.toLong()
println("Int به Long: $myLong") // خروجی: ۱۰۰
// تبدیل Int به Double
val myDouble: Double = myInt.toDouble()
println("Int به Double: $myDouble") // خروجی: ۱۰۰.۰
// تبدیل Int به Float
val myFloat: Float = myInt.toFloat()
println("Int به Float: $myFloat") // خروجی: ۱۰۰.۰
// تبدیل Long به Int (ممکن است منجر به از دست رفتن داده شود)
val largeLong: Long = 2_000_000_000_000L // عدد بزرگتر از محدوده Int
val convertedInt: Int = largeLong.toInt()
println("Long به Int: $convertedInt") // خروجی: ۱۴۱۰۰۶۵۴۰۸ (داده از دست رفته)
val smallLong: Long = 50L
val convertedInt2: Int = smallLong.toInt()
println("Long به Int (محدوده مجاز): $convertedInt2") // خروجی: ۵۰
// تبدیل Double به Int (قسمت اعشاری حذف میشود)
val myDoubleValue: Double = ۹۹.۷۵
val intFromDouble: Int = myDoubleValue.toInt()
println("Double به Int: $intFromDouble") // خروجی: ۹۹
// تبدیل Int به Char (به کد ASCII/Unicode)
val charCode: Int = ۶۵ // کد ASCII برای \'A\'
val myChar: Char = charCode.toChar()
println("Int به Char: $myChar") // خروجی: A
}
نکات اصلی در تبدیل عددی:
تبدیل مصرح: شما به طبعً بایستی تابع تبدیل را فراخوانی فرمائید.
val x: Int = 10
val y: Long = x // اشتباه! بایستی x.toLong() باشد.
از دست رفتن داده (Data Loss): هنگام تبدیل از یک نوع با محدوده بزرگتر به یک نوع با محدوده کوچکتر (به عنوان مثالً Long به Int یا این که Double به Int)، ممکن میباشد دادهها از دست بروند یا این که تخمین شکل گیرد. کاتلین این زمینه را به شما گوشزد مینماید.
همینطور بخوانید: یادگرفتن اندروید استودیو از صفر تا صد
۲. تبدیل حرفه به عدد و برعکس
عدد به حرفه: از تابع toString() به کار گیری نمایید. این برای هر نوع دادهای در کاتلین قابل استعمال میباشد.
Kotlin
val num: Int = ۱۲۳
val numAsString: String = num.toString()
println("عدد به حرفه: $numAsString") // خروجی: "۱۲۳"
val piValue: Double = ۳.۱۴
val piAsString: String = piValue.toString()
println("Double به حرفه: $piAsString") // خروجی: "۳.۱۴"
حرفه به عدد: از توابع مانند toInt(), toLong(), toDouble(), toFloat() استعمال فرمایید. اصلی: درحالتی که حرفه دربردارنده مقدار عددی معتبری نباشد، این توابع یک NumberFormatException پرتاب مینمایند. برای دوری از این نادرست، میتوانید از توابع toIntOrNull(), toLongOrNull(), toDoubleOrNull(), toFloatOrNull() به کارگیری فرمائید که در شکل عدم توفیق null برمیگردانند.
Kotlin
val stringNumber: String = "۴۵۶"
val parsedInt: Int = stringNumber.toInt()
println("حرفه به Int: $parsedInt") // خروجی: ۴۵۶
val invalidString: String = "abc"
// val parsedIntWithError: Int = invalidString.toInt() // این خط سبب NumberFormatException می گردد!
val safeParsedInt: Int? = invalidString.toIntOrNull()
println("حرفه به Int (ایمن): $safeParsedInt") // خروجی: null
val validDecimalString: String = "۱۲۳.۴۵"
val parsedDouble: Double? = validDecimalString.toDoubleOrNull()
println("فن اعشاری به Double (ایمن): $parsedDouble") // خروجی: ۱۲۳.۴۵
۳. تبدیل میان گونه های شیء (Object Types) – Casting
در کاتلین، زمانی با گونه های شیء (کلاسها) سروکار دارید، می توانید از عملگرهای as و as? برای تبدیل نوع به کارگیری فرمائید.
as (Unsafe Cast – تبدیل ناایمن): این عملگر برای تبدیل مصرح یک شیء به نوع دیگری به کار گیری میشود. چنانچه شیء قابل تبدیل به آن نوع نباشد، یک ClassCastException پرتاب مینماید.
Kotlin
open class Animal
class Dog : Animal() {
fun bark() = println("Woof!")
}
class Cat : Animal() {
fun meow() = println("Meow!")
}
fun petAnimal(animal: Animal) {
val dog = animal as Dog // اگر animal واقعاً Dog نباشد، خطا میدهد
dog.bark()
}
fun main() {
val myDog = Dog()
petAnimal(myDog) // خروجی: Woof!
// val myCat = Cat()
// petAnimal(myCat) // Runtime Error: ClassCastException (Cat cannot be cast to Dog)
}
as? (Safe Cast – تبدیل ایمن): این عملگر کوشش مینماید شیء را به نوع متبوع تبدیل نماید. در شرایطی که تبدیل توفیقآمیز باشد، شیء تبدیل گردیده را برمیگرداند. درصورتی که شیء قابل تبدیل نباشد، به مکان پرتاب استثنا، null برمیگرداند. این طرز بسیار ایمنخیس میباشد.

معایب سبک ایده پردازی و فروش آن و درآمد از اندروید