چنان که میدانید، متغیر در یک برنامه به مکانی از حافظه گفته میشود که دادهها را در خود نگهداری میکند. برای مشخص ساختن این ناحیه ذخیرهسازی، هر متغیر باید یک نام یکتا (شناسه) داشته باشد.
شیوه اعلان متغیر در کاتلین
برای اعلان یک متغیر در کاتلین میتوان از کلیدواژه var یا val استفاده کرد. به مثال زیر توجه کنید:
var language = "French"
val score = 95
اختلاف بین var و val در ادامه این بخش توضیح داده شده است. فعلاً روی شیوه اعلان متغیر تمرکز میکنیم. در کد فوق language یک متغیر از نوع String و Score نیز متغیری با نوع Int است. در کاتلین لزومی به اعلام صریح نوع متغیر وجود ندارد و این زبان خودش میتواند نوع متغیر را برای شما مشخص بکند. کامپایلر خودش تشخیص میدهد که “French” یک رشته (String) و 95 یک عدد صحیح (Int) است. این قابلیت در زبانهای برنامهنویسی به نام «استنباط نوع» (type inference) شناخته میشود.
با این حال، در صورت تمایل میتوانید نوع یک متغیر را به صورت صریح نیز تعیین کنید:
var language: String = "French"
val score: Int = 95
ما در مثال فوق متغیر را همزمان با اعلان، مقداردهی نیز کردهایم. با این حال، این کار لزومی ندارد. شما میتوانید یک متغیر را در یک گزاره اعلان و نوع آن را مشخص کنید و سپس در گزاره دیگری در ادامه برنامه آن را مقداردهی نمایید:
var language: String // variable declaration of type String
... .. ...
language = "French" // variable initialization
val score: Int // variable declaration of type Int
... .. ...
score = 95 // variable initialization
اما مثال زیر موجب بروز خطا میشود:
var language// Error
language = "French"
در مثال فوق، نوع متغیر language به صورت صریحی مشخص نشده است. همچنین متغیر نیز درون گزاره اعلان، مقداردهی نشده است.
var language: String language = 14// Error
در مثال فوق نیز تلاش کردهایم که مقدار 14 (عدد صحیح) را به متغیری از نوع متفاوت (String) نسبت دهیم که موجب بروز خطا شده است.
تفاوت بین var و val
- Val (ارجاع تغییرناپذیر) – متغیری که با استفاده از کلیدواژه val اعلان شود، پس از این که مقداری به آن انتساب یافت، دیگر نمیتواند تغییر داده شود. این وضعیت شبیه متغیر final در جاوا است.
- Var (ارجاع تغییرپذیر) – متغیری که با کلیدواژه var اعلان شود، میتواند در ادامه برنامه مقدار متفاوتی بگیرد. این کلیدواژه معادل متغیرهای معمولی جاوا است.
به مثالهای زیر توجه کنید:
var language = "French"
language = "German"
در مثال فوق متغیر language پس از مقداردهی اولیه، در ادامه مقدار German را گرفته است. از آنجا که این متغیر با استفاده از کلیدواژه var اعلان یافته است، این کد به درستی کار میکند.
val language = "French"
language = "German"// Error
در مثال فوق با خطا مواجه میشویم زیرا امکان مقداردهی مجدد به متغیر تعریف شده با کلیدواژه val وجود ندارد. اکنون که با مفهوم متغیرهای کاتلین آشنا شدید، نوبت آن رسیده است که با مقادیر مختلفی که یک متغیر کاتلین میتواند بگیرد نیز آشنا شوید.
انواع ابتدایی کاتلین
کاتلین یک زبان با نوعبندی استاتیک مانند جاوا است. معنی این حرف آن است که نوع یک متغیر در زمان کامپایل مشخص میشود. به مثال زیر توجه کنید:
val language: Int val marks = 12.3
در مثال فوق، کامپایلر پیش از کامپایل کردن کد میداند که language دارای نوع Int است و marks از نوع Double است.
انواع داخلی دادهها در زبان کاتلین به صورت زیر دستهبندی میشوند:
- اعداد
- کاراکترها
- مقادیر بولی
- آرایهها
نوع عددی
اعداد در کاتلین انواعی مشابه زبان جاوا دارند. شش نوع داده داخلی در کاتلین وجود دارد که اعداد را نمایش میدهند:
- Byte
- Short
- Int
- Long
- Float
- Double
نوع Byte
نوع داده byte مقادیری درباره 128- تا 127 میگیرد. این نوع معادل عدد صحیح مکمل دوی هشت بیتی علامتدار است. از این نوع داده در مواردی که عدد در بازه 128 -تا 127 قرار میگیرد، به جای نوع Int یا دیگر انواع داده صحیح برای صرفهجویی در مصرف حافظه استفاده میشود.
مثال
fun main(args : Array<String>) { val range: Byte = 112 println("$range")
// The code below gives error. Why? // val range1: Byte = 200
}
زمانی که برنامه فوق اجرا شود، خروجی زیر چاپ میشود:
112
نوع Short
نوع داده Short میتواند مقادیری بین 32678- تا 32677 داشته باشد که معادل عدد صحیح مکمل دوی 16 بیتی علامتدار است. در صورتی که مطمئن هستید مقدار یک متغیر در بازه [32767, 32768-] قرار دارد، میتوانید از این نوع داده به جای انواع داده دیگر استفاده کنید.
مثال
fun main(args : Array<String>) {
val temperature: Short = -11245 println("$temperature")
}
زمانی که برنامه را اجرا کنید، خروجی زیر تولید میشود:
-11245
نوع Int
نوع داده Int مقادیری بین −231−231 تا 231−1231−1 میگیرد که معادل عدد صحیح مکمل دوی 2 بیتی علامتدار است.
مثال
fun main(args : Array<String>) {
val score: Int = 100000 println("$score")
}
زمانی که برنامه را اجرا کنید، خروجی به صورت زیر خواهد بود:
100000
اگر یک عدد صحیحی را بدون انتساب صریح نوع، بین −231−231 تا 231−1231−1 به یک متغیر انتساب دهید، این متغیر از نوع Int خواهد بود. به مثال زیر توجه کنید:
fun main(args : Array<String>) {
// score is of type Int val score = 10 println("$score")
}
اگر از IntelliJ IDEA استفاده میکنید، میتوانید کرسر را روی متغیر قرار داده و با فشردن کلیدهای ترکیبی Ctrl+Shift+P نوع آن را ببینید.
نوع Long
نوع داده Long مقادیری بین −263−263 تا 263−1263−1 میگیرد که معادل عدد صحیح مکمل دوی 63 بیتی علامتدار است.
مثال
fun main(args: Array<String>)
fun main(args : Array<String>) {
val highestScore: Long = 9999 println("$highestScore")
}
زمانی که برنامه فوق را اجرا کنید، با خروجی زیر مواجه میشوید:
9999
اگر بدون تعیین صریح نوع یک متغیر مقداری بزرگتر از −231−231 تا 231−1231−1 به یک متغیر بدهید، این متغیر به صورت خودکار به نوع Long تبدیل میشود. به مثال زیر توجه کنید:
val distance = 10000000000 // distance variable of type Long
به طور مشابه میتوانید از حرف بزرگ L به صورت زیر برای تعیین نوع یک متغیر به صورت Long استفاده کنید:
val distance = 100L// distance value of type Long
نوع Double
نوع داده Double دارای دقت دو برابر اعشار 64 بیتی است.
مثال
fun main(args : Array<String>) {
// distance is of type Double val distance = 999.5 println("$distance")
}
زمانی که این برنامه را اجرا کنید، خروجی زیر تولید میشود:
999.5
نوع Float
نوع داده Float یک عدد اعشاری 32 بیتی با دقت منفرد است.
مثال
fun main(args : Array<String>) {
// distance is of type Float val distance = 19.5F println("$distance")
}
خروجی برنامه فوق به صورت زیر است:
19.5
توجه کنید که ما به جای 19.5 مقدار 19.5F را در برنامه فوق داریم. دلیل این امر آن است که 19.5 یک مقدار لفظی Double است و نمیتوان مقدار Double را به متغیر Float انتساب داد. برای این که به کامپایلر اعلام کنیم با عدد 19.5 به صورت Float برخورد کند، باید از حرف بزرگ F در انتهای آن استفاده کنیم.
اگر مطمئن نیستید یک متغیر در برنامه چه نوع عددی دریافت خواهد کرد، میتوانید از نوع Number استفاده کنید. این نوع داده امکان انتساب هر دو نوع اعداد صحیح و اعشاری را به متغیر میدهد. به مثال زیر توجه کنید:
fun main(args : Array<String>) {
var test: Number = 12.2 println("$test")
test = 12 // Int smart cast from Number println("$test")
test = 120L // Long smart cast from Number println("$test")
}
خروجی برنامه فوق به صورت زیر است:
12.2 12 120
نوع Char
برای نمایش یک کاراکتر در کاتلین از نوع داده Char استفاده میکنیم. برخلاف جاوا نوع داده Char در کاتلین میتواند به صورت عدد نیز استفاده شود.
fun main(args : Array<String>) {
val letter: Char letter = 'k' println("$letter")
}
خروجی برنامه فوق به صورت زیر است:
k
در جاوا میتوان مانند زیر عمل کرد:
char letter = 65;
با این حال کد زیر در کاتلین موجب تولید خطا میشود:
var letter: Char = 65 // Error
نوع Boolean
نوع داده Boolean دو مقدار به صورت True و False میتواند بگیرد.
مثال
fun main(args : Array<String>) {
val flag = true println("$flag")
}
مقادیر بولی در گزارههای تصمیمگیری استفاده میشوند.