اشیای Companion در کاتلین
دراین نصیب از نوشتهعلمی فراگیری کاتلین به یاری برخی نمونهها به تحقیق اشیای Companion درین گویش نرم افزارنویسی خوا هیم پرداخت. قبل از آن که در امر طراحی اپلیکیشن در مشهد اشیای Companion کلام کنیم، به نظارت مثالی از دسترس به اعضای یک کلاس میپردازیم.
1class Person {
2 fun callMe() = println("I\'m called.")
3}
4
5fun main(args: Array) {
6 val p1 = Person()
7
8 // calling callMe() method using object p1
9 p1.callMe()
10}
در نمونه فوق یک شیء به اسم p1 از کلاس Pedrson ساخت کردیم تا سیاق ()callMe را فراخوانی کنیم. نحوه عمل شی ها به طور معمول این سیرتکامل میباشد. با این هم اکنون، در کاتلین میقدرت اسلوب ()callMe را با استعمال از کلاس اسم نیز فراخوانی کرد که در این باره Person میباشد. بهاین مراد می بایست یک شیء Companion را با به کارگیری از کلیدواژه companion روی اعلان شیء ساخت کنیم.
مثالی از اشیای companion
1class Person {
2 companion object Test {
3 fun callMe() = println("I\'m called.")
4 }
5}
6
7fun main(args: Array) {
8 Person.callMe()
9}
خروجی نرم افزار فوق به طور تحت میباشد:
I\'m called.
در اپلیکیشن فوق، اعلان شیء Test با کلیدواژه companion علامتگذاری شدهاست تا یک شیء companion ساخت گردد. از این رو قابلیت و امکان فراخوانی سیاق ()callMe با استعمال از اسم کلاس به طور ذیل وجود دارااست:
Person.callMe()
اسم شیء companion ازروی اراده میباشد و قادر است نادیده گرفته گردد.
1class Person {
2
3 // name of the companion object is omitted
4 companion object {
5 fun callMe() = println("I\'m called.")
6 }
7}
8
9fun main(args: Array) {
10 Person.callMe()
11}
در حالتیکه با جاوا آشنا باشید، می توانید اشیای companion را به متدهای استاتیک تشبیه نمائید، هر یکسری روش شغل آن ها به طور داخلی به طور کاملً مختلف میباشد. اشیای companion میتوانند به اعضای سری کلاس دسترسی داشته باشند. از این رو میاقتدار از آنها برای پیادهسازی الگوهای اسلوب فکتوری استفاده نمود.
تابع گسترش (Exteension) در کاتلین
درین نصیب از نوشتهعلمی یادگرفتن کاتلین با نحوه توسعه یک کلاس با کارکردهای تازه با استعمال از تابعهای توسعه آشنا خوا هیم شد. فرض فرمائید مایحتاج میباشد یک کلاس را با کارکرد جدیدی توسعه و گسترش دهید. در اکثر اوقات گویشهای نرم افزارنویسی بدین مراد یک کلاس نو مشتق میشود یا این که از نوع الگوی پیاده سازی بهاین مراد منفعت میگیرند. با این حالا، در کاتلین از تابع Extension برای توسعه و گسترش یک کلاس با کارکردهای تازه به کار گیری می کنیم. تابع توسعه و گسترش محور یک تابع عضو کلاس میباشد که در سوا کلاس تعریف و تمجید می گردد.
برای مثال فرض فرمائید مایحتاج میباشد یک اسلوب تازه در کلاس String داشته باشید که یک حرفه نو را با حذف کاراکترهای اولیه و پایان فن ارائه گردیده رجوع دهد. این اسلوب از پیشین در کلاس String نیست و بایستی از تابع Extension برای اجرای این وظیفه استعمال کنیم.
مثالی از حذف کاراکتر نخستین و انتها از حرفه
1fun String.removeFirstLastChar(): String = this.substring(1, this.length - 1)
2
3fun main(args: Array) {
4 val myString= "Hello Everyone"
5 val result = myString.removeFirstLastChar()
6 println("First character is: $result")
7}
خروجی اپ فوق به طور تحت میباشد:
First character is: ello Everyon
در صورتی نرمافزار فوق تابع توسعه و گسترش First character is: ello Everyon به کلاس String اضافه گردیده است. اسم کلاس، نوع دریافتی (در این زمینه String) میباشد. کلیدواژه this باطن تابع توسعه به شیء اخذکننده اشاره داراست.
درحالتی که موردنیاز باشد که کاتلین را در یک پروژه جاوا مخلوط فرمایید، نیازی به عوض کردن آحاد کد کاتلین نیست. فقط کافی میباشد از تابعهای توسعه برای اضافه کردن کارکردهای متبوع سود بگیرید. مفهوم این صحبت آن میباشد که اشخاص می توانند به آسانی از توان تابعهای پیشرفت سوءبه کارگیری نمایند. به این ترتیب می بایست دربارهی کمیت و چگونگی به کار گیری از این قابلیت و امکان در کاتلین با حفظ متعددی فعالیت کنیم.
Overload کردن عملگر در کاتلین
دراین نوشتهی علمی به تحقیق شیوه overload کردن عملگر در کاتلین به یاری بعضا نمونهها می پردازیم. هنگامی که از یک عملگر در کاتلین به کارگیری می کنیم، تابع عضو متناظر آن فراخوانی میگردد. برای مثال عبارت a+b در پسموضوع به a.plus(b) ترجمه می گردد.
1fun main(args: Array) {
2 val a = 5
3 val b = 10
4
5 print(a.plus(b)) // print(a+b)
6}
خروجی نرمافزار فوق به طور تحت میباشد:
15
در واقع تابع ()plus برای شغل با اشکال مقدماتی متعدد کاتلین و String به طور overload درآمده میباشد.
1// + operator for basic types
2operator fun plus(other: Byte): Int
3operator fun plus(other: Short): Int
4operator fun plus(other: Int): Int
5operator fun plus(other: Long): Long
6operator fun plus(other: Float): Float
7operator fun plus(other: Double): Double
8
9// for string concatenation
10operator fun String?.plus(other: Any?): String
همینطور قابلیت تعریفوتمجید روش شغل عملگر برای اشیای متفاوت از روش overload کردن تابعهای متناظر آن ها نیز وجود داراست. برای مثال بایستی روش عمل عملگر + را از روش overload کردن تابع ()plus برای اشیای متعدد تمجید کنیم.
مثالی از overload کردن عملگر +
1fun main(args: Array) {
2 val p1 = Point(3, -8)
3 val p2 = Point(2, 9)
4
5 var sum = Point()
6 sum = p1 + p2
7
8 println("sum = (${sum.x}, ${sum.y})")
9}
10
11class Point(val x: Int = 0, val y: Int = 10) {
12
13 // overloading plus function
14 operator fun plus(p: Point) : Point {
15 return Point(x + p.x, y + p.y)
16 }
17}
مشاهده بدون نقص کدها
خروجی اپلیکیشن فوق به طور پایین میباشد:
sum = (5, 1)
در اپ فوق تابع ()plus با کلیدواژه operator نشانگذاری گردیدهاست تا به کامپایلر اعلام گردد که عملگر + به طور overload گردیده درآمده میباشد. عبارت p1+p2 در پسقضیه به طور p1.plus(p2) ترجمه میشود.
مثالی از overload کردن عملگر --
دراین قسمت با مثالی از overload کردن عملگر -- آشنا خواهیم شد. عبارت a- در پسقضیه به طور ()a.dec ترجمه می شود. تابع عضو ()dec هیچ آرگومانی نمیگیرد.
1fun main(args: Array) {
2 var point = Point(3, -8)
3 --point
4
5 println("point = (${point.x}, ${point.y})")
6}
7
8class Point(var x: Int = 0, var y: Int = 10) {
9 operator fun dec() = Point(--x, --y)
10}
خروجی اپ فوق به طور ذیل میباشد:
point = (2, -9)
به خیال داشته باشید که پاراگراف تحت:
operator fun dec() = Point(--x, --y)
هم اندازه جمله پایین میباشد:
1operator fun dec(): Point {
2 return Point(--x, --y)
3}
تعدادی نکته حائض اهمیت در امر overload کردن عملگرها
هنگامی که عملگرها را overload می کنیم، می بایست غرض مهم عملگر نگهداری گردد. به نمونه تحت اعتنا فرمایید:
1fun main(args: Array) {
2 val p1 = Point(3, -8)
3 val p2 = Point(2, 9)
4
5 var sum = Point()
6 sum = p1 + p2
7
8 println("sum = (${sum.x}, ${sum.y})")
9}
10
11class Point(val x: Int = 0, val y: Int = 10) {
12
13 // overloading plus function
14 operator fun plus(p: Point) = Point(x - p.x, y - p.y)
15}
مشاهده بدون نقص کدها
با این که اپلیکیشن فوق از دید فنی درست میباشد، البته از عملگر + برای تفریق مشخصههای متناظر دو شیء مصرف شده میباشد که موجب ساخت سردرگمی در اپلیکیشن میگردد. برخلاف گویشهایی مانند اسکالا، فقط گروه خاصی از عملگرها در کاتلین می توانند overload شوند.
تودهبندی فراگیری کاتلین
براین اساس به واپسین قسمت این نوشتهعلمی با مسئله یادگرفتن کاتلین میرسیم. لهجه نرمافزارنویسی کاتلین اکنون از سوی کمپانیهای متعددی از قبیل Netflix ،Pinterest و Corda برای ایجاد کرد نرم افزارهای توانمند اندروید گزینه به کارگیری قرار می گیرد. در حین به عبارتی بازه کوتاه چهار ساله از فرصت معرفی کاتلین، این لهجه محبوبیت متعددی یافته و قابلیت و امکانهای اپنویسی اکثری به آن اضافه گردیده است. پیشبینی میگردد که در زمان سالهای آینده از کاتلین برای پیشرفت بازیهای چندپلتفرمی و همینطور پیشرفت نرم افزارهای چندپلتفرمی مصرف شود. از سوی دیگر به کار گیری از کاتلین در نصیب اسکریپتنویسی سمت سرور و میکروسرویسها و همینطور یادگیری ماشین و بررسی داده رو به فزونی میرود.
حرف آخری
بدین ترتیب به نقطه پایان این نوشته ی علمی جامع دربارهی فراگیری کاتلین میرسیم. با این که کارایی کردهایم درین نوشته ی علمی اکثر اوقات مباحث اساسی پیرامون این لهجه اپنویسی را توضیح دهیم، ولی شما می بایست این نوشتهی علمی را تحت عنوان یک راهنمای مقدماتی برای فراگیری لهجه کاتلین در حیث بگیرید، به این دلیلکه مباحث تخصصی و توسعه یافته متعددی وجود داراهستند که می بایست دراین حوزه آموخته شوند. با این اکنون میتوانید این نوشتهی علمی را تحت عنوان یک مرجع برای یاد آوری بعضا مفاهیم مقدماتی این گویش در لحاظ بگیرید و هر فرصت که با مشکلی در زمینهی یکی مباحث مقدماتی این گویش مواجه شدید، جهت یاداوری مفاهیم مجدد بهاین مقاله مراجعهکنید.
اشیای Companion در کاتلین
دراین نصیب از نوشتهعلمی فراگیری کاتلین به یاری برخی نمونهها به تحقیق اشیای Companion درین گویش نرم افزارنویسی خوا هیم پرداخت. قبل از آن که در امر طراحی اپلیکیشن در مشهد اشیای Companion کلام کنیم، به نظارت مثالی از دسترس به اعضای یک کلاس میپردازیم.
1class Person {
2 fun callMe() = println("I\'m called.")
3}
4
5fun main(args: Array) {
6 val p1 = Person()
7
8 // calling callMe() method using object p1
9 p1.callMe()
10}
در نمونه فوق یک شیء به اسم p1 از کلاس Pedrson ساخت کردیم تا سیاق ()callMe را فراخوانی کنیم. نحوه عمل شی ها به طور معمول این سیرتکامل میباشد. با این هم اکنون، در کاتلین میقدرت اسلوب ()callMe را با استعمال از کلاس اسم نیز فراخوانی کرد که در این باره Person میباشد. بهاین مراد می بایست یک شیء Companion را با به کارگیری از کلیدواژه companion روی اعلان شیء ساخت کنیم.
مثالی از اشیای companion
1class Person {
2 companion object Test {
3 fun callMe() = println("I\'m called.")
4 }
5}
6
7fun main(args: Array) {
8 Person.callMe()
9}
خروجی نرم افزار فوق به طور تحت میباشد:
I\'m called.
در اپلیکیشن فوق، اعلان شیء Test با کلیدواژه companion علامتگذاری شدهاست تا یک شیء companion ساخت گردد. از این رو قابلیت و امکان فراخوانی سیاق ()callMe با استعمال از اسم کلاس به طور ذیل وجود دارااست:
Person.callMe()
اسم شیء companion ازروی اراده میباشد و قادر است نادیده گرفته گردد.
1class Person {
2
3 // name of the companion object is omitted
4 companion object {
5 fun callMe() = println("I\'m called.")
6 }
7}
8
9fun main(args: Array) {
10 Person.callMe()
11}
در حالتیکه با جاوا آشنا باشید، می توانید اشیای companion را به متدهای استاتیک تشبیه نمائید، هر یکسری روش شغل آن ها به طور داخلی به طور کاملً مختلف میباشد. اشیای companion میتوانند به اعضای سری کلاس دسترسی داشته باشند. از این رو میاقتدار از آنها برای پیادهسازی الگوهای اسلوب فکتوری استفاده نمود.
تابع گسترش (Exteension) در کاتلین
درین نصیب از نوشتهعلمی یادگرفتن کاتلین با نحوه توسعه یک کلاس با کارکردهای تازه با استعمال از تابعهای توسعه آشنا خوا هیم شد. فرض فرمائید مایحتاج میباشد یک کلاس را با کارکرد جدیدی توسعه و گسترش دهید. در اکثر اوقات گویشهای نرم افزارنویسی بدین مراد یک کلاس نو مشتق میشود یا این که از نوع الگوی پیاده سازی بهاین مراد منفعت میگیرند. با این حالا، در کاتلین از تابع Extension برای توسعه و گسترش یک کلاس با کارکردهای تازه به کار گیری می کنیم. تابع توسعه و گسترش محور یک تابع عضو کلاس میباشد که در سوا کلاس تعریف و تمجید می گردد.
برای مثال فرض فرمائید مایحتاج میباشد یک اسلوب تازه در کلاس String داشته باشید که یک حرفه نو را با حذف کاراکترهای اولیه و پایان فن ارائه گردیده رجوع دهد. این اسلوب از پیشین در کلاس String نیست و بایستی از تابع Extension برای اجرای این وظیفه استعمال کنیم.
مثالی از حذف کاراکتر نخستین و انتها از حرفه
1fun String.removeFirstLastChar(): String = this.substring(1, this.length - 1)
2
3fun main(args: Array) {
4 val myString= "Hello Everyone"
5 val result = myString.removeFirstLastChar()
6 println("First character is: $result")
7}
خروجی اپ فوق به طور تحت میباشد:
First character is: ello Everyon
در صورتی نرمافزار فوق تابع توسعه و گسترش First character is: ello Everyon به کلاس String اضافه گردیده است. اسم کلاس، نوع دریافتی (در این زمینه String) میباشد. کلیدواژه this باطن تابع توسعه به شیء اخذکننده اشاره داراست.
درحالتی که موردنیاز باشد که کاتلین را در یک پروژه جاوا مخلوط فرمایید، نیازی به عوض کردن آحاد کد کاتلین نیست. فقط کافی میباشد از تابعهای توسعه برای اضافه کردن کارکردهای متبوع سود بگیرید. مفهوم این صحبت آن میباشد که اشخاص می توانند به آسانی از توان تابعهای پیشرفت سوءبه کارگیری نمایند. به این ترتیب می بایست دربارهی کمیت و چگونگی به کار گیری از این قابلیت و امکان در کاتلین با حفظ متعددی فعالیت کنیم.
Overload کردن عملگر در کاتلین
دراین نوشتهی علمی به تحقیق شیوه overload کردن عملگر در کاتلین به یاری بعضا نمونهها می پردازیم. هنگامی که از یک عملگر در کاتلین به کارگیری می کنیم، تابع عضو متناظر آن فراخوانی میگردد. برای مثال عبارت a+b در پسموضوع به a.plus(b) ترجمه می گردد.
1fun main(args: Array) {
2 val a = 5
3 val b = 10
4
5 print(a.plus(b)) // print(a+b)
6}
خروجی نرمافزار فوق به طور تحت میباشد:
15
در واقع تابع ()plus برای شغل با اشکال مقدماتی متعدد کاتلین و String به طور overload درآمده میباشد.
1// + operator for basic types
2operator fun plus(other: Byte): Int
3operator fun plus(other: Short): Int
4operator fun plus(other: Int): Int
5operator fun plus(other: Long): Long
6operator fun plus(other: Float): Float
7operator fun plus(other: Double): Double
8
9// for string concatenation
10operator fun String?.plus(other: Any?): String
همینطور قابلیت تعریفوتمجید روش شغل عملگر برای اشیای متفاوت از روش overload کردن تابعهای متناظر آن ها نیز وجود داراست. برای مثال بایستی روش عمل عملگر + را از روش overload کردن تابع ()plus برای اشیای متعدد تمجید کنیم.
مثالی از overload کردن عملگر +
1fun main(args: Array) {
2 val p1 = Point(3, -8)
3 val p2 = Point(2, 9)
4
5 var sum = Point()
6 sum = p1 + p2
7
8 println("sum = (${sum.x}, ${sum.y})")
9}
10
11class Point(val x: Int = 0, val y: Int = 10) {
12
13 // overloading plus function
14 operator fun plus(p: Point) : Point {
15 return Point(x + p.x, y + p.y)
16 }
17}
مشاهده بدون نقص کدها
خروجی اپلیکیشن فوق به طور پایین میباشد:
sum = (5, 1)
در اپ فوق تابع ()plus با کلیدواژه operator نشانگذاری گردیدهاست تا به کامپایلر اعلام گردد که عملگر + به طور overload گردیده درآمده میباشد. عبارت p1+p2 در پسقضیه به طور p1.plus(p2) ترجمه میشود.
مثالی از overload کردن عملگر --
دراین قسمت با مثالی از overload کردن عملگر -- آشنا خواهیم شد. عبارت a- در پسقضیه به طور ()a.dec ترجمه می شود. تابع عضو ()dec هیچ آرگومانی نمیگیرد.
1fun main(args: Array) {
2 var point = Point(3, -8)
3 --point
4
5 println("point = (${point.x}, ${point.y})")
6}
7
8class Point(var x: Int = 0, var y: Int = 10) {
9 operator fun dec() = Point(--x, --y)
10}
خروجی اپ فوق به طور ذیل میباشد:
point = (2, -9)
به خیال داشته باشید که پاراگراف تحت:
operator fun dec() = Point(--x, --y)
هم اندازه جمله پایین میباشد:
1operator fun dec(): Point {
2 return Point(--x, --y)
3}
تعدادی نکته حائض اهمیت در امر overload کردن عملگرها
هنگامی که عملگرها را overload می کنیم، می بایست غرض مهم عملگر نگهداری گردد. به نمونه تحت اعتنا فرمایید:
1fun main(args: Array) {
2 val p1 = Point(3, -8)
3 val p2 = Point(2, 9)
4
5 var sum = Point()
6 sum = p1 + p2
7
8 println("sum = (${sum.x}, ${sum.y})")
9}
10
11class Point(val x: Int = 0, val y: Int = 10) {
12
13 // overloading plus function
14 operator fun plus(p: Point) = Point(x - p.x, y - p.y)
15}
مشاهده بدون نقص کدها
با این که اپلیکیشن فوق از دید فنی درست میباشد، البته از عملگر + برای تفریق مشخصههای متناظر دو شیء مصرف شده میباشد که موجب ساخت سردرگمی در اپلیکیشن میگردد. برخلاف گویشهایی مانند اسکالا، فقط گروه خاصی از عملگرها در کاتلین می توانند overload شوند.
تودهبندی فراگیری کاتلین
براین اساس به واپسین قسمت این نوشتهعلمی با مسئله یادگرفتن کاتلین میرسیم. لهجه نرمافزارنویسی کاتلین اکنون از سوی کمپانیهای متعددی از قبیل Netflix ،Pinterest و Corda برای ایجاد کرد نرم افزارهای توانمند اندروید گزینه به کارگیری قرار می گیرد. در حین به عبارتی بازه کوتاه چهار ساله از فرصت معرفی کاتلین، این لهجه محبوبیت متعددی یافته و قابلیت و امکانهای اپنویسی اکثری به آن اضافه گردیده است. پیشبینی میگردد که در زمان سالهای آینده از کاتلین برای پیشرفت بازیهای چندپلتفرمی و همینطور پیشرفت نرم افزارهای چندپلتفرمی مصرف شود. از سوی دیگر به کار گیری از کاتلین در نصیب اسکریپتنویسی سمت سرور و میکروسرویسها و همینطور یادگیری ماشین و بررسی داده رو به فزونی میرود.
حرف آخری
بدین ترتیب به نقطه پایان این نوشته ی علمی جامع دربارهی فراگیری کاتلین میرسیم. با این که کارایی کردهایم درین نوشته ی علمی اکثر اوقات مباحث اساسی پیرامون این لهجه اپنویسی را توضیح دهیم، ولی شما می بایست این نوشتهی علمی را تحت عنوان یک راهنمای مقدماتی برای فراگیری لهجه کاتلین در حیث بگیرید، به این دلیلکه مباحث تخصصی و توسعه یافته متعددی وجود داراهستند که می بایست دراین حوزه آموخته شوند. با این اکنون میتوانید این نوشتهی علمی را تحت عنوان یک مرجع برای یاد آوری بعضا مفاهیم مقدماتی این گویش در لحاظ بگیرید و هر فرصت که با مشکلی در زمینهی یکی مباحث مقدماتی این گویش مواجه شدید، جهت یاداوری مفاهیم مجدد بهاین مقاله مراجعهکنید.

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