در این تکلیف، در مورد عملگرها و نوعها در زبان برنامه نویسی کاتلین میآموزید.
گام 1: کشف عملگرهای عددی
1. برنامه IntelliJ IDEA را باز کنید، اگر پیش از این باز نکردید.
2. برای باز کردن Kotlin REPL، به مسیر Tools > Kotlin > Kotlin REPL بروید.
مانند سایر زبانها، کاتلین از + ، - ، * و / برای جمع، تفریق، ضرب و تقسیم استفاده میکند. کاتلین همچنین از نوع عددهای متفاوت پشتیبانی میکند، مانند Int ، Long ، Double ، و Float.
3. این عبارات را در REPL تایپ کنید. برای دیدن نتایج، Control+Enter را فشار دهید.
در این آزمایشگاه کد، نماد ⇒ نشانگر خروجی کد شما است. در آخرین نسخه از REPL، خروجی شامل عدد حاصل و نوع نتیجه میشود.
1+1 ⇒ res8: kotlin.Int = 2
53-3 ⇒ res9: kotlin.Int = 50
50/10 ⇒ res10: kotlin.Int = 5
1.0/2.0 ⇒ res11: kotlin.Double = 0.5
2.0*3.5 ⇒ res12: kotlin.Double = 7.0
توجه کنید نتیجه عملیات نوع عملیات را نگهمیدارد، پس 0=1/2، اما 5.0=1.0/2.0.
4. چند عبارت ترکیبی از عدد صحیح و اعشاری را امتحان کنید.
6*50 ⇒ res13: kotlin.Int = 300
6.0*50.0 ⇒ res14: kotlin.Double = 300.0
6.0*50 ⇒ res15: kotlin.Double = 300.0
5. چند متد روی اعداد صدا بزنید. کاتلین عددها را اولیه (premitive) نگهمیدارد، اما به شما اجازه میدهد روی اعداد متد صدا بزنید، مثل یک شی.
2.times(3) ⇒ res5: kotlin.Int = 6
3.5.plus(4) ⇒ res8: kotlin.Double = 7.5
2.4.div(2) ⇒ res9: kotlin.Double = 1.2
قرار دادن اعداد در پوشش آبجکت امکان پذیر است، که به نام جعبهسازی (boxing) شناخته میشود. جعبهسازی خودکار انجام میشود، مثل مجموعهها (collection) که در آن جعبه سازی اعداد بر اساس نیاز انجام میشود.
پوشش شی، حافظه بیشتری نسبت به نگهداشتن یک عدد اولیه نیاز دارد. از جعبه سازی استفاده نکنید مگر زمانی که احتیاج دارید، مانند مجموعهها که بعدتر به آنها میپردازیم.
گام 2: تمرین استفاده از نوعها
کاتلین به شیوه ضمنی (implicitly) بین نوعهای عددی تبدیل نمیشود، پس شما نمیتوانید یک مقدار کوتاه [Int] را مستقیما به یک متغیر Long اختصاص بدهید، یا اختصاص یک مقدار Byte به یک متغیر Int امکان پذیر نیست. به این دلیل که تبدیل ضمنی عدد منبع خطاهای متعدد برنامه نویسی است. شما همیشه میتوانید مقدارها با نوعهای مختلف را با معین کردن (casting) به هم اختصاص دهید.
1. این یک معین کردن است، یک متغیر از نوع Int در REPL تعریف کنید.
val i: Int = 6
2. یک متغیر جدید بسازید، بعد نام متغیری که بالا نمایش داده شد را وارد کنید، به همراه to.
val b1 = i.to
برنامه IntelliJ IDEA یک لیست از تکمیلهای احتمالی نمایش میدهد. این تکمیلخودکار برای متعیرها و شیها از هر نوع کار میکند.
3. از لیست ()toByte را انتخاب کنید، بعد متغیر را چاپ کنید.
val b1 = i.toByte() println(b1) ⇒ 6
4. یک مقدار Byte به متغیرها از نوع های مختلف اختصاص دهید.
val b2: Byte = 1 println(b2) ⇒ 1
val i1: Int = b2 ⇒ error: type mismatch: inferred type is Byte but Int was expected
val i2: String = b2 ⇒ error: type mismatch: inferred type is Byte but String was expected
val i3: Double = b2 ⇒ error: type mismatch: inferred type is Byte but Double was expected
5. برای واگذاریهایی که خطا برمیگرداند، از معین کردن (casting) استفاده کنید.
val i4: Int = b2.toInt() // OK! println(i4) ⇒ 1
val i5: String = b2.toString() println(i5) ⇒ 1
val i6: Double = b2.toDouble() println(i6) ⇒ 1.0
6. برای راحتتر خوانده شدن ثابتهای عددی (constant) بلند، کاتلین به شما اجازه میدهد تا هر کجا که برای شما قابل فهم است زیرخط بگذارید. وارد کردن ثابتهای عددی مختلف را امتحان کنید.
val oneMillion = 1_000_000
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
چون کاتلین قدرتمند تایپ میشوند، کامپایلر میتواند نوع متغیرها را نتیجهگیری کند، پس شما نیاز ندارید صریح اعلام کنید.
گام 3: یادگیری مقدار انواع متغیر
کاتلین از 2 نوع متغیر پشتیبانی میکند، قابل تغییر و غیر قابل تغییر. با val شما میتوانید یک مقدار را یکبار اختصاص بدهید. اگر میخواهید چیزی دوباره اختصاص بدهید، یک خطا میگیرید. با var میتوانید یک مقدار اخصاص بدهید، و در آینده مقدار را در برنامه تغییر بدهید.
1. با استفاده از val و var متغیرهایی تعریف کنید و بعد مقادیر جدید به آنها اختصاص بدهید.
var fish = 1 fish = 2 val aquarium = 1 aquarium = 2 ⇒ error: val cannot be reassigned
شما میتوانید به fish یک مقدار بدهید، بعد یک مقدار جدید به آن بدهید، چون آن را با var تعریف کردید. تلاش برای اختصاص یک مقدار جدید به aquarium یک خطا میدهد چون با val تعریف شد.
نوعی که در یک متغیر نگهداری میکنید وقتی کار میکند که کامپایلر بتواند آن را از متن برداشت کند. اگر میخواهید، میتوانید با استفاده از علامت دو نقطه (:) یک نوع از متغیر را صریح تعریف کنید.
2. چند متغیر تعریف کنید و نوع آنها را صریح تعیین کنید.
var fish: Int = 12 var lakes: Double = 2.5
وقتی یک نوع توسط شما یا کامپایلر اختصاص داده شود، نمیتوانید نوع را تغییر بدهید، یا با یک خطا مواجه میشوید.
گام 4: درباره رشتهها یادبگیرید
رشتهها در کاتلین تا حد زیادی مثل سایر زبانهای برنامه نویسی با استفاده از رشتهها و کاراکترها کار میکند، شما میتوانید رشتهها را با استفاده از عملگر + پیوند بزنید. شما میتوانید با ترکیب آنها با مقادیر قالب رشته (string template) بسازید: variable$ با متنِ نمایشدهنده مقدار جایگزین میشود. به این درونیابی متغیر گفته میشود.
1. یک قالب رشته بسازید.
val numberOfFish = 5 val numberOfPlants = 12 "I have $numberOfFish fish" + " and $numberOfPlants plants" ⇒ res20: kotlin.String = I have 5 fish and 12 plants
2. یک قالب رشته با یک عبارت در آن بسازید. مثل سایر زبانها، مقدار میتواند نتیجه یک عبارت باشد. از اکولاد برای تعریف عبارت استفاده کنید.
"I have ${numberOfFish + numberOfPlants} fish and plants" ⇒ res21: kotlin.String = I have 17 fish and plants