tejariapp-new-logotejariapp-new-logotejariapp-new-logotejariapp-new-logo
  • صفحه اصلی
  • پروژه ها
    • پروژه طراحی سایت
    • پروژه های اندروید
    • پروژه های تحت ویندوز
    • UI & UX
    • ربات تلگرام
  • سفارش پروژه
    • انجام پروژه اندروید (Android)
    • طراحی و ساخت اپلیکیشن موبایل
    • انجام پروژه طراحی سایت با php
    • انجام پروژه طراحی سایت با Asp.net
    • انجام پروژه سی شارپ
    • فرم سفارش پروژه
  • مدرسه ی تجاری اپ
    • طراحی سایت
    • اندروید
    • سی شارپ
    • آموزش پایگاه داده
    • برنامه های کاربردی
  • لینک های مفید
    • پرداخت آنلاین
    • درباره تجاری اپ
    • تماس با ما
استخدام برنامه نویس متلب
سفارش پروژه
✕
            هیچ نتیجه ای یافت نشدمشاهده همه نتایج

            Delegation در کاتلین چیست ؟

            • صفحه نخست
            • مدرسه ی تجاری اپ آموزش اندروید
            • Delegation در کاتلین چیست ؟
            سورس اندروید اپلیکیشن کتاب آموزش پایتون 3
            سورس اندروید اپلیکیشن کتاب آموزش پایتون 3
            12 آبان 1398
            آموزش کلمه کلیدی lateinit در کاتلین
            آموزش lateinit در کاتلین
            13 آبان 1398
            منتشر شده توسط مهندس داودی
            مفهوم Delegation در کاتلین چیست

            مفهوم Delegation در کاتلین چیست

            Delegation در کاتلین چیست ؟ ما در کاتلین یک مفهوم بنام Delegation داریم که با دانستن همین مفاهیم است که میتوانیم با قاطعیت بگوییم از جاوا به کاتلین مهاجرت کردیم.چرا که تنها استناد به دانستن سینتکس کاتلین جهت کد نویسی کافی نیست بلکه باید از تمام یا حداقل اکثریت ویژگی هایی که کاتلین را نسبت به جاوا برتری داده استفاده کنیم و درباره آنها بدانیم.

            مفهوم Delegation در کاتلین چیست

            در علوم کامپیوتر Delegation به معنای واگذاری یک وظیفه یا اختیار از یک نمونه یا instance به نمونه دیگر است.درواقع Delegation میتواند به اندازه یک رابط استاتیک دائمی مانند ارث بری یا اینترفیس بین کلاس ها عمل کند.

            اما این جمله به چه معناست ؟

            فرض کنید ما میخواهیم از طریق کلاس B به عملکرد کلاس A دسترسی داشته باشیم بنابراین شما میتوانید ارث بری انجام دهید که به شما یک رابطه استاتیک دائمی بین کلاس ها میدهد.اما با Delegation شما میتوانید به هر تعداد کلاس با استفاده از کلمه کلیدی by دسترسی داشته باشید.

            خب احتمالا کمی دچار سردرگمی شده اید اما در ادامه با پیاده سازی چندین مثال تمامی ابهامی های شما رفع خواهد شد .

            توضیح مفهوم Delegation در Kotlin در قالب یک مثال

            به مثال زیر توجه کنید:

            class MainActivity : AppCompatActivity() {
            override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)
                setContentView(R.layout.activity_main)
            
                val person = Person(aliName())
                Log.d("delegationTest" , person.name)
                Log.d("delegationTest" , person.family)
             }
            }
            
            interface Nameable {
                 var name: String
                 var family: String
             }
            
            class aliName : Nameable {
                 override var name: String = "ali"
            override var family ="rahimi"
            }
            
            class Person(name: Nameable): Nameable by name
            
            

            مفهوم Delegation در کاتلین در کلاس Person مشخص شده ! همانطور که میبینید ما یک interface اینترفیس ایجاد کردیم که دو متغیر از نوع String دارد.

             interface Nameable {
                 var name: String
                 var family: String
             }
            

            در ادامه یک کلاس با نام aliName ایجاد کردیم که اینترفیس Nameable را implement یا پیاده سازی کرده پس مشخصا دو متغیر تغریف شد در اینترفیس را هم پیاده و مقداردهی کرده (تمامی بدنه اینترفیس باید در کلاس پیاده کننده مقداردهی شوند)

            همچنین بخوانید: آموزش Expandable RecyclerView در اندروید با کاتلین

             class aliName : Nameable {
                 override var name: String = "ali"
            override var family ="rahimi"
            }
            

            در نهایت یک کلاس person ایجاد کردیم که برای واسطی برای دسترسی به کلاس های دیگر(در این مثال کلاس aliName) است.برای پارامترهای کلاس person ما یک پارامتر از نوع اینترفیس Nameable ایجاد کردیم تا در ادامه بتوانیم کلاسی که این اینترفیس را پیاده کرده به آن پاس دهیم و نکته مهم در انتهای کلاس عبارت Nameable by name : است که با این عبارت ما Delegation را مشخص کردیم ( هر پارامتری که پیاده میکنید باید در انتها Delegation هم شده اشد )

            حال به متد اصلی کلاس اکتیویتی میرویم تا دستورات مورد نیاز برای نمایش خروجی این پروسه Delegation را بنویسیم

            val person = Person(aliName())
                     Log.d("delegationTest" , person.name)
                     Log.d("delegationTest" , person.family)
            

            همانطور که می بینید ما یک نمونه instance از کلاس Person با پارامتری که نیاز دارد (کلاسی که اینترفیس پارامتر شده کلاس Person را پیاده سازی میکند ) ایجاد کردیم و میتوانیم به فیلدهای اینترفیس دسترسی کامل داشته باشیم ، اگر ما برنامه را اجرا کنیم خروجی بدین صورت خواهد بود :

            delegationTest : ali
            delegationTest : rahimi

            چرا که مقادیر person.name و person.family در واقع همان مقادیری ست که ما در کلاس aliName برای این دو فیلد مشخص کردیم ، حال اگر کلاس دیگری بدین صورت بسازیم :

            همچنین بخوانید: معماری mvp در اندروید با کاتلین

             class kaveName : Nameable {
                 override var name: String = "kave"
            override var family ="maki"
            }
            

            و در دستورات اصلی کلاس فوق را به عنوان پارامتر به کلاس Person پاس دهیم

              val person = Person(kaveName())
                     Log.d("delegationTest" , person.name)
                     Log.d("delegationTest" , person.family)
            

            خواهیم دید خروجی در لاگ کت بدین صورت خواهد شد:

            delegationTest : kave
            delegationTest : maki

            به علاوه میتوانیم به هر تعداد کلاس به همین صورت دسترسی مستقیم داشته باشیم.برای مثال:

             interface job {
                 var jobTime: Int
                 fun doJob();
             }
            class kaveJob : Job{
                 override fun doJob() {
                     Log.d("delegationTest" , "kave doing job ! ")
                 }
            override var jobTime: Int  = 8
            }
            

            و در نهایت در کلاس Person هم پارامتر دیگری از نوع اینترفیس job بگیریم

             class Person(name: Nameable, job: Job):  Nameable by name, Job by job
            

            و در نهایت خواهیم دید که میتوانیم به تمامی بدنه اینترفیس Job هم دسترسی داشته باشیم

            val person = Person(JackName(), kaveJob())
                     Log.d("delegationTest" , person.name)
                     Log.d("delegationTest" , person.family)
                     person.doJob()
            

            در نهایت خروجی بدین صورت خواهد شد:

            delegationTest : kave
            delegationTest : maki
            ! delegationTest: kave doing job

            امیدوارم با مطالعه این پست به جواب سوال مفهوم Delegation در کاتلین چیست ؟ رسیده باشید.

            اشتراک گذاری

            پست های مرتبط

            دستورات جریان کنترل (Control flow statements) یا دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت Dart

            دستورات جریان کنترل (Control flow statements) یا دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت Dart

            30 بهمن 1400

            دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب
            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت یا Dart

            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت یا Dart

            30 بهمن 1400

            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب
            توابع در زبان برنامه نویسی دارت (Dart)

            توابع در زبان برنامه نویسی دارت (Dart)

            27 بهمن 1400

            توابع در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب

            دیدگاهتان را بنویسید لغو پاسخ

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

            ساخت اپلیکیشن های موبایل

            • ساخت اپلیکیشن فروشگاهی
            • ساخت اپلیکشن ابزاری و خدماتی
            • ساخت اپلیکیشن آموزشی
            • و هزاران موضوع دیگر

             
            کلیک کنید

            آخرین دیدگاه ها

            • 7 خرداد 1401

              داودی نظر در آموزش استفاده از ckeditor همراه با آپلود عکس در لاراول 6

            • 6 فروردین 1401

              yasaman نظر در راست چین کردن متن در فیگما Figma

            • 3 فروردین 1401

              رضا نظر در مفاهیم Observable و Observer در RxJava

            تجاری اپ در شبکه های اجتماعی

            لوگوی تایید پرداخت آنلاین

            2015-2022 © تمامي حقوق مادي و معنوي اين وب سايت نزد تجاری اپ محفوظ بوده و هر گونه کپي برداري از مطالب پيگرد قانوني به همراه دارد! | طراح سایت : ProgRun
            سفارش پروژه
                      هیچ نتیجه ای یافت نشدمشاهده همه نتایج