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

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

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

عملگرها، علائم یا کاراکترهایی هستند که عمل خاصی را روی عملوندها (متغیرها و مقادیر) اجرا می‌کنند. برای مثال در اغلب زبان‌های برنامه‌نویسی از جمله کاتلین از عملگر + برای جمع کردن دو عدد استفاده می‌شود. در درس دوم با متغیرها و تخصیص مقادیر به آن‌ها آشنا شدید. در این درس یاد می‌گیرید چگونه روی متغیرها عملیات انجام دهید. با توجه به واضح بودن مثال‌ها از توضیحات اضافه پرهیز شده است.

۱- عملگرهای ریاضی

لیست پایین فهرست عملگرهای ریاضی را در کاتلین نشان می‌دهد:

  • + : جمع (همچنین برای اتصال رشته‌ها به کار می‌رود)؛
  • – : تفریق
  • * : ضرب
  • / : تقسیم
  • % : باقی‌مانده

مثال:

fun main(args: Array<String>) {

val number1 = 12.5
val number2 = 3.5
var result: Double

result = number1 + number2
println(“number1 + number2 = $result”)

result = number1 – number2
println(“number1 – number2 = $result”)

result = number1 * number2
println(“number1 * number2 = $result”)

result = number1 / number2
println(“number1 / number2 = $result”)

result = number1 % number2
println(“number1 % number2 = $result”)
}

 

خروجی:

number1 + number2 = 16.0
number1 – number2 = 9.0
number1 * number2 = 43.75
number1 / number2 = 3.5714285714285716
number1 % number2 = 2.0

 

عملگر + برای اتصال رشته‌ها نیز به کار می‌رود. مثال:

fun main(args: Array<String>) {

val start = “Talk is cheap. ”
val middle = “Show me the code. ”
val end = “- Linus Torvalds”

val result = start + middle + end
println(result)
}

 

خروجی:

Talk is cheap. Show me the code. – Linus Torvalds

 

عملگرهای ریاضی چگونه در کاتلین کار می‌کنند؟

فرض کنید با عملگر + قصد دارید مجموع دو عدد a و b را محاسبه کنید. کاتلین در پشت صحنه، عبارت a+b را به صورت (a.plus(b فرخوانی می‌کند. plus تابعی است که در نسخه‌های مختلفی Overload شده است تا انواع عملوندها از جمله رشته‌ها را نیز قبول کند. (البته به جزء Char و Boolean).

// + operator for basic types
operator fun plus(other: Byte): Int
operator fun plus(other: Short): Int
operator fun plus(other: Int): Int
operator fun plus(other: Long): Long
operator fun plus(other: Float): Float
operator fun plus(other: Double): Double

// for string concatenation
operator fun String?.plus(other: Any?): String

 

بخوانید  کاهش حجم فایل‌های PNG

شما نیز با Overload کردن تابع plus می‌توانید از عملگر + برای انواعی که خودتان تعریف کرده‌اید استفاده کنید. Overload کردن به صورت خلاصه یعنی تعریف چندین نسخه از یک تابع با نام یکسان ولی با تعداد یا پارامترهای مختلف (در بعضی از زبان‌ها با مقدار بازگشتی متفاوت). مثلا هر وقت کاربر تابع plus را با آرگومان Int فرخوانی کرد آن نسخه‌ای که پارامتر Int دریافت می‌کند را اجرا کن و هر موقع یک عدد Float وارد شد، نسخه‌‌ی Float آن تابع اجرا شود. در آینده راجع Overload کردن متدها بیشتر توضیح می‌دهم.

لیست عملگرهای ریاضی و توابع معادل:

کاربردنام تابعتابع معادل
a + bplusa.plus(b)
a – bminusa.minus(b)
a * btimesa.times(b)
a / bdiva.div(b)
a % bmoda.mod(b)

۲- عملگرهای تخصیص

عملگرهای تخصیص برای تخصیص مقادیر به متغیرها به کار می‌روند. یکی از این عملگرها را قبلاً استفاده کرده‌ایم: عملگر =

val age = 5

 

در این مثال مقدار ۵ به متغیر age تخصیص داده شده که این کار توسط عملگر = صورت گرفته است.

فهرست کامل عملگرهای تخصیص:

عبارتحالت معادلتابع معادل
a +=ba = a + ba.plusAssign(b)
a += ba = a + ba.minusAssign(b)
a *= ba = a * ba.timesAssign(b)
a /= ba = a / ba.divAssign(b)
a %= ba = a % ba.modAssign(b)

مثال:

fun main(args: Array<String>) {
var number = 12

number *= 5 // number = number*5
println(“number = $number”)
}

 

خروجی:

number = 60

 

عملگرهای تخصیص را هم می‌توان Overload کرد که در درس‌های بعدی توضیح خواهم داد.

۳- عملگرهای یگانه

تعدادی از عملگرها در کاتلین فقط یک عملوند نیاز دارند. لیست کاملشان را می‌توانید ببینید:

عملگرتوضیحکاربردتابع معادل
+جمع تکی+aa.unaryPlus()
تفریق تکی-aa.unaryMinus()
!نفی!aa.not()
++اضافه کردن عدد یک به عملوند++aa.inc()
کاهش عدد یک از عملوند–aa.dec()
بخوانید  قسمت دوم :اکتیویتی ها

مثال:

fun main(args: Array<String>) {
val a = 1
val b = true
var c = 1

var result: Int
var booleanResult: Boolean

result = -a
println(“-a = $result”)

booleanResult = !b
println(“!b = $booleanResult”)

–c
println(“–c = $c”)
}

 

خروجی:

-a = -1
!b = false
–c = 0

 

۴- عملگرهای سنجش تساوی و مقایسه عملوندها

عملگرتوضیحکاربردتابع معادل
>بزرگتر ازa > ba.compareTo(b) > 0
<کوچکتر ازa < ba.compareTo(b) < 0
>=بزرگتر یا مساوی باa >= ba.compareTo(b) >= 0
<=کوچکتر یا مساوی باa < = ba.compareTo(b) <= 0
==مساوی باa == ba?.equals(b) ?: (b === null)
!=مساوی نیست باa != b!(a?.equals(b) ?: (b === null))

این عملگرها بیشتر برای کنترل جریان برنامه به کار می‌رود و در حلقه‌ها و عبارات شرطی کاربرد فراوان دارند.
مثال:

fun main(args: Array<String>) {

val a = -12
val b = 12

// use of greater than operator
val max = if (a > b) {
println(“a is larger than b.”)
a
} else {
println(“b is larger than a.”)
b
}

println(“max = $max”)
}

 

خروجی:

b is larger than a.
max = 12

 

۵- عملگرهای منطقی

در کاتلین دو عملگر منطقی || و && وجود دارد.

عملگرتوضیحکاربردتابع معادل
||هر یک از دو عملوند true بود نتیجه true است(a>b)||(a<c)(a>b)or(a<c)
&&هرگاه دو عملوند true بودند نتیجه true خواهد بود(a>b)&&(a<c)(a>b)and(a<c)

این عملگرها نیز به وفور در عملیات شرطی و کنترل جریان برنامه کاربرد دارند.
مثال:

fun main(args: Array) {
val a = 10
val b = 9
val c = -1
val result: Boolean

// result is true is a is largest
result = (a>b) && (a>c) // result = (a>b) and (a>c)
println(result)
}

 

خروجی:

true

 

۶- عملگر in

این عملگر نشان می‌دهد که مقداری متعلق به یک مجموعه هست یا نه.

عملگرکاربردتابع معادل
ina in bb.contains(a)
!ina !in b!b.contains(a)

مثال:

fun main(args: Array<String>) {

val numbers = intArrayOf(1, 4, 42, -3)

if (4 in numbers) {
println(“numbers array contains 4.”)
}
}

 

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

خروجی:

numbers array contains 4.

 

۷- عملگرهای index

این عملگرها در کاتلین به منظور دسترسی به مقادیر یک مجموعه استفاده می‌شوند. مثلاً دسترسی به عنصر پنجم یک آرایه.

کاربردتابع معادل
a[i]a.get(i)
a[i, n]a.get(i, n)
a[i1, i2, ..., in]a.get(i1, i2, ..., in)
a[i] = ba.set(i, b)
a[i, n] = ba.set(i, n, b)
a[i1, i2, ..., in] = ba.set(i1, i2, ..., in, b)

مثال:

fun main(args: Array<String>) {

val a = intArrayOf(1, 2, 3, 4, – ۱)
println(a[1])
a[1]= 12
println(a[1])
}

 

خروجی:

۲
۱۲

 

۸- عملگرهای invoke

کاربردتابع معادل
a()a.invoke()
a(i)a.invoke(i)
a(i1, i2, ..., in)a.inkove(i1, i2, ..., in)
a[i] = ba.set(i, b)

در کاتلین، پرانتز به تابع معادلش یعنی invoke ترجمه می‌شود.

عملگرهای بیتی

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

  • shl: شیفت علامت‌دار به چپ
  • shr: شیفت علامت‌دار به راست
  • ushr: شیفت بی‌علامت به راست
  • and
  • or
  • xor
  • inv: معکوس‌ساز

عملگرهای بیتی به همراه مثال در درس‌های بعدی آموزش داده می‌شود.

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

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

0 دیدگاه

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