آموزش زبان کاتلین – درس ۲ (متغیرها و انواع داده‌ اولیه)

نویسنده : سید ایوب کوکبی ۱۸ مرداد ۱۳۹۷

آموزش زبان کاتلین - درس 2 (متغیرها و انواع داده‌ اولیه)

خب در درس قبلی با ساخت اولین برنامه در کاتلین آشنا شدید. در این درس به بحث متغیرها و انواع داده‌ای در این زبان می‌پردازم. همانطور که می‌دانید، متغیر مکانی از حافظه است که داده را نگه‌داری می‌کند. هر متغیر باید نامی منحصر به فرد داشته باشد.

روش معرفی متغیر در کاتلین

برای تعریف متغیرها در کاتلین از کلمات کلیدی var یا val می‌توان استفاده می‌شود. مثال:

var language = “French”
val score = 95

 

فرق این دو روش را در ادامه توضیح می‌دهم. فعلاً تمرکزمان را روی تعریف متغیرها بگذاریم. در کد بالا language متغیری از نوع String و score متغیر دیگری از نوع Int است. در کاتلین نیازی به مشخص کردن نوع متغیر نیست. کامپایلر خودش این کار را برای ما انجام می‌دهد. در واقع وقتی کامپایلر مقدار “French” را می‌بینید متوجه می‌شود که نوع متغیر را باید String انتخاب کند و به همین صورت برای ۹۵ که یک مقدار عددی است نوع Integer (به صورت کوتاه 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”

 

کامپایلر خطا می‌دهد چون نوع متغیر را به صورت صریح مشخص نکرده‌ایم.

var language: String
language = 14 // Error

 

اینجا نوع متغیر String است ولی سعی کرده‌ایم یک مقدار عددی (۱۴) را داخلش ذخیره کنیم که منجر به بروز خطا می‌شود.

بخوانید  آموزش زبان کاتلین - درس 3 (عملگرها)

تفاوت بین var و val

  • val (ارجاع غیرقابل تغییر یا Immutable): متغیرهایی که با این کلمه تعریف می‌شوند به محض مقداردهی اولیه، دیگر امکان تغییر محتوایشان وجود ندارد. دقیقاً مثل متغیرهای final در جاوا؛
  • var (ارجاع قابل تغییر یا Mutable): متغیرهای تعریف شده با این کلمه، محتوایشان در طول برنامه قابل تغییر است. مانند متغیرهای معمولی جاوا.

مثال اول:

var language = “French”
language = “German”

 

متغیر language با کلمه var تعریف شده، پس در طول برنامه می‌توان به سادگی مقدارش را تغییر داد.

مثال دوم:

val language = “French”
language = “German” // Error

 

این کد خطا می‌دهد چرا؟ چون language را با val تعریف کرده‌ایم و در ادامه تلاش کرده‌ایم مقدارش را به German تغییر دهیم که این کار مجاز نیست. به همین خاطر کامپایلر اعلان خطا می‌کند.

خب حالا که با تعریف متغیرها و تفاوت val و var آشنا شدید، نوبت بررسی انواع داده‌ای است.

انواع داده ابتدایی (Basic Types) در کاتلین

کاتلین همانند جاوا یک زبان Statically typed است.  یعنی نوع متغیرها در طی کامپایل شناسایی می‌شود. به عنوان مثال:

val language: Int
val marks = 12.3

 

کامپایلر قبل از کامپایل می‌داند که language از نوع Int بوده و marks از نوع Double است.

انواع داخلی کاتلین به چهار دسته تقسیم می‌شوند:

  • اعداد
  • کاراکترها
  • مقادیر بولی
  • آرایه‌ها

انواع عددی

انواع عددی در کاتلبن همانند جاوا است. ۶ نوع مختلف عددی داریم:

  • Byte
  • Short
  • Int
  • Long
  • Float
  • Double

۱- Byte

نوع داده‌ای Byte تنها می‌تواند مقادیری در محدوده‌ ۱۲۸- تا ۱۲۷ را نگهداری کند. در مواردی که مقدار عددی در همین محدود باشد برای صرفه‌جویی در مصرف حافظه از این نوع استفاده می‌‌شود.

مثال:

fun main(args : Array<String>) {
val range: Byte = 112
println(“$range”)

// The code below gives error. Why?
// val range1: Byte = 200
}

 

خروجی:

۱۱۲

 

۲- Short:

این نوع مقادیری بین ۳۲۷۶۸- تا ۳۲۷۶۷ را نگه‌داری می‌کند که برای صرفه‌جویی در مصرف حافظه در موارد لزوم از آن استفاده می‌شود.

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

مثال:

fun main(args : Array<String>) {

val temperature: Short = -11245
println(“$temperature”)
}

 

خروجی:

۱۱۲۴۵-

 

۳- Int:

مقادیری بین ۲- به توان ۳۱ تا ۲ به توان ۳۱ منهای ۱ را می‌تواند نگه‌داری کند.

مثال:

fun main(args : Array<String>) {

val score: Int = 100000
println(“$score”)
}

 

خروجی:

۱۰۰۰۰۰

 

نکته: در صورت اعلام نکردن صریح نوع متغیر، تمامی مقادیری که در محدوده Int قرار داشته باشند از نوع Int انتخاب می‌شوند چه مقدار ۱ باشد چه ۱۰۰۰۰۰٫ مثال:

fun main(args : Array<String>) {

// score is of type Int
val score = 10
println(“$score”)
}

 

در صورتی که از Intellij IDEA استفاده می‌کنید، می‌توانید با قرار دادن کرسر ماوس روی متغیر و زدن کلیدهای Ctrl+Shift+P نوعش را بیینید.

مشاهده نوع متغیرهای کاتلین در Intellij IDEA

۴- Long

نوع داده‌ای Long قادر به ذخیره ارقامی در بازه ۲- به توان ۶۳ تا ۲ به توان ۶۳ منهای ۱ است.

مثال:

fun main(args : Array<String>) {

val highestScore: Long = 9999
println(“$highestScore”)
}

 

خروجی:

۹۹۹۹

 

در صورتی که مقدار ذخیره شده در متغیری بیش از ۲ به توان ۳۱ منهای ۱ یا کمتر از ۲- به توان ۳۱ (محدوده اعداد Int) باشد و نوع متغیر را هم صریح اعلان نکرده باشید، کامپایلر به صورت خودکار نوع Double را برای آن انتخاب می‌کند.

val distance = 10000000000 // distance variable of type Long

 

شما می‌توانید با حرف بزرگ L در انتهای مقدار مورد نظر (حتی اگر در محدوده‌ Int باشد)، نوع Long را برایش انتخاب کنید:

 

۵- Float

Float نوعی ۳۲ بیتی است و قادر به ذخیره اعدادی تا ۷ رقم اعشار است.

fun main(args : Array<String>) {

// distance is of type Float
val distance = 19.5F
println(“$distance”)
}

 

خروجی:

۱۹٫۵

 

دقت کنید در کد بالا ۱۹٫۵F به کار برده‌ایم چون در غیر این صورت نوع بزرگتر یعنی Double برای متغیر در نظر گرفته می‌شود. همچنین امکان تخصیص مقادیر در محدوده‌ Double به متغیرهای Float ار ندارید.

بخوانید  آموزش زبان کاتلین – درس 12 (تابع بازگشتی)

۶- Double

این نوع ۶۴ بیتی است و تا ۱۵ رقم اعشار را می‌تواند ذخیره کند.

مثال:

fun main(args : Array<String>) {

// distance is of type Double
val distance = 999.5
println(“$distance”)
}

 

خروجی:

۹۹۹٫۵

 

در صورتی که از مقداری که در متغیر ذخیره می‌شود مطمئن نیستید می‌توانید نوعش را Number انتخاب کنید. در این حالت متغیر همزمان از نوع Integer و اعشاری در نظر گرفته می‌شود. مثال:

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”)
}

 

خروجی:

۱۲٫۲
۱۲
۱۲۰

 

درباره ویژگی Smart Casts در کاتلین، در درس‌های بعد توضیح بیشتری می‌دهم.

Char

برای ذخیره یک کاراکتر از نوع Char استفاده می‌شود. برخلاف جاوا، اعداد را نمی‌توان به کاراکتر تفسیر کرد. مثال:

fun main(args : Array<String>) {

val letter: Char
letter = ‘k’
println(“$letter”)
}

 

خروجی:

k

 

در جاوا چنین کدی صحیح است:

char letter = 65;

 

اما در کاتلین مجاز نیست:

var letter: Char = 65 // Error

 

نوع بولی (منطقی)

نوع Boolean فقط می‌تواند دو مقدار true یا false را ذخیره کند.

مثال:

fun main(args : Array<String>) {

val flag = true
println(“$flag”)
}

 

انواع بولی به وفور در دستورات شرطی به کار گرفته می‌شوند که در درس‌های بعدی به آن خواهم پرداخت.

آرایه‌ها

آرایه همچون ظرفی، مقادیری از یک نوع مشخص را نگه‌داری می‌کند. مثلاً می‌توانید آرایه‌ای از نوع Int ایجاد کنید و ۱۰۰ مقدار Integer داخلش ذخیره کنید. در کاتلین آرایه  با کلاس Array ساحته میشود. این کلاس حاوی توابعی همچون get و set و پراپرتی‌هایی نظیر size و تعدادی توابع مفید دیگر است. در رابطه با آرایه‌ها ان‌شاءا… در درس‌های بعدی توضیحات کافی ارائه می‌دهم.

رشته‌ها

در کاتلین رشته‌ها توسط کلاس String مشخص می‌شوند. لیترال‌های رشته‌ای همچون «this is a string» نمونه‌ای پیاده‌سازی شده از این کلاس هستند. رشته‌ها خود بحث مفصلی است که بعداً توضیح خواهم داد.

سید ایوب کوکبی

نویسنده و مترجم...

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *