<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های امـیـــــرحســـــین آریا</title>
        <link>https://virgool.io/feed/@iqson</link>
        <description>توسعه دهنده وب و نرم افزار - طراح تجربه کاربر و رابط کاربری | لینک بوت کمپ کاتلین https://vrgl.ir/69hcw</description>
        <language>fa</language>
        <pubDate>2026-06-10 13:02:17</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/146517/avatar/QDnzAg.png?height=120&amp;width=120</url>
            <title>امـیـــــرحســـــین آریا</title>
            <link>https://virgool.io/@iqson</link>
        </image>

                    <item>
                <title>کتاب بلاک‌چین: طرحی برای اقتصاد جدید</title>
                <link>https://virgool.io/@iqson/blockchain-blueprint-for-a-new-economy-lptbxaupkrnz</link>
                <description>Blockchain: Blueprint for a New Economyکتاب بلاک‌چین: طرحی برای یک اقتصاد جدید [یا به انگلیسی Blockchain: Blueprint for a New Economy] توسط Melanie Swan نوشته شد و در سال 2015 منتشر شد. قیمت این کتاب در فروشگاه آمازون 15 دلار است اما می‌توانید نسخه اصلی pdf کتاب را از این لینک دانلود کنید (برای استفاده های علمی).این کتاب سعی کرده است نشان دهد که بسیاری از مفاهیم و ویژگی های فناوری بلاکچین ممکن است به طور گسترده ای برای شرایط مختلف قابل گسترش باشد. این ویژگی ها فقط در زمینه ارز و پرداخت هاBlockchain 1.0 یا قراردادها ، دارایی و کلیه معاملات بازارهای مالی Blockchain 2.0 اعمال نمی شوند ، بلکه فراتر از بخشهای متنوعی همچون دولت ، بهداشت ، علوم ، سواد ، نشر ، توسعه اقتصادی ، هنر و فرهنگBlockchain 3.0، و احتمالاً حتی به طور گسترده تر برای دستیابی به سفارشات در مقیاس بزرگتر پیشرفت انسانی باشد.فناوریBlockchain می تواند کاملاً مکمل یک فضای ممکن برای دنیای آینده باشد که شامل مدلهای متمرکز و غیرمتمرکز است. مانند هر فناوری جدید ، بلاکچین ایده ای است که در ابتدا اختلال ایجاد می کند و با گذشت زمان می تواند توسعه یک اکوسیستم بزرگتر را که شامل روش قدیمی و نوآوری جدید است ، ارتقا دهد. برخی از نمونه های تاریخی این است که ظهور رادیو در واقع منجر به افزایش فروش رکوردها شده است ، و کتاب خوان های الکترونیکی مانند Kindle فروش کتاب را افزایش داده اند. اکنون ، اخبار را از نیویورک تایمز ، وبلاگ ها ، توییتر و فیدهای شخصی به طور یکسان به دست می آوریم. ما هم از شرکتهای بزرگ سرگرمی و هم از YouTube استفاده می کنیم. بنابراین ، با گذشت زمان ، فناوری بلاکچین می تواند در یک اکوسیستم بزرگتر با هر دو مدل متمرکز و غیرمتمرکز وجود داشته باشد.مجموعه بزرگی از ارزهای حکمی و ارزهای رمزپایه می‌توانند در کنار هم موجود باشند. فردریش هایک ، اقتصاددان ، در كتاب خود با عنوان ملی سازی پول ، تصور می كند كه ارزهای مكمل برای جلب توجه مصرف كنندگان رقابت خواهند کرد. او ارزهای مختلفی را در سطح موسسات مالی دید ، اما از آنجا که هرکسی اکنون از طریق وبلاگ ، حساب توییتر ، کانال یوتیوب و صفحه اینستاگرام خود دارای اخبار اختصاصی است ، بنابراین می تواند ارزهای رمزنگاری شده بسیار دلخواهی در سطح افراد یا گروه های خاص و جوامع خاص وجود داشته باشد. هر یک از این ارزهای رمزپایه می تواند در اقتصاد محلی آن وجود داشته باشد ، کاملاً مرتبط و معتبر برای مبادله ارزش و فعالیت اقتصادی در آن زمینه محلی ، مانند سکه جامعه Let’s Talk Bitcoin، Tatianacoin هنرمندان موسیقی یا سکه در جامعه بازار کشاورزان محلی شما ، آزمایشگاه سازنده DIY ، یا منطقه مدرسه. رمز محلی احتمالاً همیشه به راحتی قابل تبدیل به ارزهای رمزپایه روان و ارزهای حکمی است. این خاصیت تعدد و فراوانی فناوری بلاکچین است. فناوری بلاکچین قابلیت تعدد ارز را به شکل بسیاری از ارزهای بالقوه موجود در کنار هم ، که دارای جزییات بیشتری نسبت به ارزهای حکمی هستند ، امکان پذیر می کند ، هر کدام برای استفاده در شرایط خاص. اثر کلی می تواند ترویج طرز فکر فراوانی در مقابل کمبود در رابطه با مفهوم پول باشد ، به ویژه اگر همزمان با ابتکارات تضمین شده درآمد پایهGBI  همراه باشد که نیازهای اساسی بقا را برای همه افراد تحت پوشش قرار داده و بنابراین یک تمرکز شناختی در سطح بالاتر را امکان پذیر می کند. ارز می تواند در چارچوب اینکه چه نوع کنش هایی را در جامعه امکان پذیر می سازد ، در مقابل اینکه منحصراً وسیله ای برای به دست آوردن و ذخیره ارزش باشد ، تصور شود.ما باید در مورد بلاک چین به عنوان یک طبقه دیگر از شی نگاه کنیم همچون اینترنت – یک فناوری اطلاعات جامع با سطوح فنی طبقه بندی شده و چندین کلاس کاربردی برای هر نوع ثبت دارایی، موجودی و مبادله دارایی، که همه بخش های مالی، اقتصادی، و پول؛ دارایی‌های سخت (دارایی فیزیکی، خانه ها، اتومبیل ها)؛ و دارایی‌های معنوی (رای، ایده‌، قصد‌، داده‌های بهداشتی، اطلاعات و غیره.) را شامل می‌شود. اما مفهوم بلاک چین بیشتر است؛ یک الگوی جدید برای سازماندهی کشف، ارزیابی و انتقال کوانتاها (واحدهای گسسته) هر چیزی و به طور بالقوه برای هماهنگی همه فعالیت های انسانی در مقیاس بسیار بزرگتر از آنچه که قبلاً امکان پذیر بوده است.ممکن است ما در طلوع یک انقلاب جدید باشیم. این انقلاب با یک اقتصاد حاشیه‌ای جدید در اینترنت آغاز شد، یک ارز جایگزین به نام بیت کوین که نه توسط یک مرجع مرکزی، بلکه با توافق خودکار بین کاربران شبکه صادر و پشتیبانی می‌شود. خاصیت اصلی آن، در واقع این بود که نیازی به اعتماد کاربران به یکدیگر نداشت. از طریق خود پلیسی الگوریتمی، هرگونه تلاش مخرب برای کلاهبرداری از سیستم رد می‌شود. در یک تعریف دقیق و فنی، بین کوین پول نقد دیجیتالی است که از طریق اینترنت در یک سیستم غیرمتمرکز با استفاده از یک دفتر کل عمومی به نام بلاک چین معامله می‌شود. این یک شکل جدید از پول است که ترکیبی از اشتراک فایل بیت تورنت peer to peer با رمزنگاری کلید عمومی است. از زمان راه اندازی آن در سال 2009، بیت کوین گروهی از مقلدین را ایجاد کرده است- ارزهای جایگزین با استفاده از همان روش کلی اما با بهینه سازی ها و اصلاحات متفاوت. مهمتر از همه، فناوری بلاک چین می تواند به یک لایه اقتصادی یکپارچه تعبیه شده در وب تبدیل شود، زیرا به عنوان پشتیبانی زیرساخت فناوری برای پرداخت ها، مبادلات غیرمتمرکز، درآمد و هزینه رمزها، فراخوانی و انتقال دارایی های دیجیتال و صدور و اجرای قرارداد هوشمند عمل می‌کند. بیت کوین و فناوری بلاک چین، به عنوان یک روش غیرمتمرکز سازی، می تواند فناوری در هم گسیخته بعدی و الگوی محاسبات در سراسر جهان باشد (با پیروی از سیستم اصلی، رایانه شخصی، اینترنت و شبکه های اجتماعی / تلفن همراه)، با امکان پیکربندی مجدد همه فعالیت های انسانی فراگیر همانند وب.ارز، قراردادها، و برنامه های فراتر از بازارهای مالیفواید بالقوه بلاک چین فراتر از اقتصاد است که به حوزه های سیاست، بشر دوستانه، اجتماعی، و علمی گسترش می یابد – و ظرفیت تکنولوژیکی بلاک چین در حال حاضر توسط گروه های خاصی برای رفع مشکلات دنیای واقعی مورد استفاده قرار گرفته است. برای مثال، برای مقابله با حکومت های سیاسی سرکوبگر، فناوری از بلاک چین می تواند برای تصویب کردن عملکردهای ابری غیرمتمرکز استفاده کرد که پیش از این نیاز به مدیریت سازمان های قانونی محدود داشتند. بدیهی است این امر برای سازمان هایی مثل وی لیکس (در جایی که دولت های ملی از پذیرش کمک های مالی پردازنده های کارت اعتباری در موقعیت حساس ادوارد اسنودن جلوگیری می کردند) و همچنین سازمان هایی که از نظر دامنه ای فراملی هستند و از منظر سیاسی خنثی هستند، مانند گروه استاندارد های اینترنت ICANN و خدمات DNS مفید است. فراتر از این شرایط که در آن منافع عمومی باید از ساختارهای قدرت دولتی فراتر رود، دیگر بخش ها و طبقات صنعت می توانند از طرح های انحرافی نظارتی و صدور مجوز تحت ساختارهای سلسله مراتبی قدرت و نفوذ گروه های ویژه که به شدت مورد حمایت دولت ها هستند، خلاص شوند و مدل های جدید تجاری بدون واسطه را امکان پذیر سازند. حتی اگر مقررات لابی های نهادی به شدت استفاده کنندگان خدمات genome را محدود کند، مدل های جدید اقتصادی اشتراکی مثل Airbnb و Uberدر حملات قانونی از جانب مقامات قدرتمند ایستادند.علاوه بر مزایای اقتصادی و سیاسی، هماهنگی، ثبت سوابق، و غیرقابل برگشت بودن معاملات از طریق فناوری بلاک چین از ویژگی هایی است که می‌تواند برای پیش رفت رو به جلو در جامعه مانند مگنا کارتر یا رزتا استون اساسی باشد. در این حالت، بلاک چین می‌تواند به عنوان مخزن سوابق عمومی برای همه جوامع، از جمله ثبت تمام اسناد، وقایع، هویت ها، و دارایی ها باشد. در این سیستم، تمام دارایی ها می‌توانند به دارایی هوشمند تبدیل شوند. این مفهوم رمز گذاری هر دارایی در بلاک چین با یک شناسه منحصر به فرد است به طوری که می‌توان دارایی را در بلاک چین ردیابی، کنترل، و مبادله (خرید و فروش) کرد. این بدان معنی است که می توان تمام دارایی های مشهود (خانه ها ، اتومبیل ها) و دارایی های دیجیتالی را در بلاک چین ثبت و معامله کرد.به عنوان نمونه، ما می‌توانیم پتانسیل تغییر جهانی بلاک چین را در استفاده از آن برای ثبت و محافظت از مالکیت معنوی (IP) مشاهده کنیم. صنعت در حال ظهور هنر دیجیتال خدماتی را برای ثبت خصوصی محتوای دقیق هر دارایی دیجیتال (هر پرونده، تصویر، پرونده سلامت، نرم افزار، و ...) در بلاک چین ارائه می‌کند. بلاک چین می‌تواند جایگزین یا تکمیل کننده همه سیستم های مدیریت IP موجود شود. چگونگی کار آن این است که یک الگوریتم استاندارد از طریق یک فایل (هر پرونده) برای فشرده سازی آن در یک کد کوتاه از 64 کاراکتر (که Hash نامیده می‌شود) که مختص آن سند است اجرا می‌شود. هر چقدر پرونده بزرگ باشد (برای مثال، یک فایل ژنوم 9 گیگابایتی)، آن را به یک هش امن 64 کاراکتری فشرده می‌شود که نمی‌تواند به عقب محاسبه شود. سپس هش در یک معامله بلاک چین گنجانده می‌شود، که مهر زمان را اضافه می‌کند – اثبات وجود دارایی دیجیتال در آن لحظه. هش را می‌توان از طریق فایل اصلی (که به طور خصوصی در رایانه مالک ذخیره می‌شود، و نه روی بلاک چین)، محاسبه مججد کرد، که تایید می‌کند محتوای اصلی تغییر نکرده است. سازوکارهای استاندارد مانند قانون قرارداد گام های انقلابی برای جامعه بوده است، و دارایی معنوی IP بلاک چین (هنر دیجیتال) می‌تواند دقیقا یکی از نقاط عطف برای هماهنگی روان جوامع در مقیاس بزرگ باشد، زیرا فعالیت اقتصادی بیشتر و بیشتر ناشی از ساخت ایده ها می‌شود.بلاک چین 1.0 ، 2.0 ، و 3.0مزایای اقتصادی، سیاسی، بشردوستانه و سیستم حقوقی بیت کوین و فناوری بلاک چین شروع به روشن ساختن این می‌کند که این یک فناوری فوق العاده در هم گسیخته است که می‌تواند ظرفیت پیکربندی مجدد تمام جنبه های جامعه و عملکرد های آن را داشته باشد. برای سازماندهی و راحتی، انواع مختلف فعالیت های موجود و بالقوه در انقلاب بلاک چین به سه دسته تقسیم می‌شوند: بلاک چین 1.0 ، 2.0 ، 3.0. بلاک چین 1.0 ارز ، استقرار ارز رمز نگاری شده در برنامه های مرتبط با پول نقد، مانند انتقال ارز، حواله و سیستم های پرداخت دیجیتال. بلاک چین 2.0 قردادهایی است، طیف وسیعی از برنامه های اقتصادی، بازار و مالی با استفاده از بلاکچین کهاز معاملات نقدی ساده گسترده ترند: سهام، اوراق قرضه، معاملات آتی، وام، وام های رهنی، عنوان، دارایی هوشمند و قرادادهای هوشمند. بلاک چین 3.0 کاربردهای بلاک چین فراتر از ارز، امور مالی و بازارها است – به ویژه در زمینه های دولت، بهداشت، علوم، سواد، فرهنگ و هنر.بیت کوین چیست؟بیت کوین پول نقد دیجیتال است. این یک ارز دیجیتال و سیستم پرداخت آنلاین است که در آن از تکنیک های رمز گذاری برای تنظیم تولید واحدهای ارز و تایید انتقال وجود استفاده می ‌‎‌شود، و به طور مستقل از یک بانک مرکزی کار می‌کند. این اصطلاحات می‌تواند گیج کننده باشد زیرا ممکن است از کلمات بیت کوین و بلاک چین برای اشاره به هر سه بخش این مفهوم استفاده شود: فناوری زیر بلاکچین، پروتکل و مشتری که از طریق آنها معاملات انجام می‌شود و ارز رمز پایه (پول) واقعی. یا به طور گسترده تر برای اشاره به کل مفهوم ارزهای رمز پایه. مثل اینکه پی پل برای انتقال ارز پی پل اینترنت که پروتکل پی پل روی آن اجرا شود را پی پل بخواند. صنعت بلاک چین بعضی اوقات از این اصطلاحات به جای یکدیگر استفاده می‌کند زیرا هنوز در مرحله شکل گیری خود است که به احتمال زیاد به لایه های مستقر در یک پشته فناوری تبدیل می‌شود. بیت کوین در سال 2009 ایجاد شد ( در تاریخ 9 ژانویه 2009) توسط یک شخص ناشناس یا نهادی با استفاده از نام Satoshi Nakamoto منتشر شد. مفهوم و جزییات عملیاتی در یک مقاله مختصر و موجز، Bitcoin: A Peer-to-Peer Electronic Cash System شرح داده شده است. پرداخت ها با استفاده از ارز مجازی غیرمتمرکز در یک دفتر کل عمومی ثبت می‌شود که در بسیاری از رایانه های کاربران بیت کوین ذخیره می‌شود و به طور مداوم در اینترنت قابل مشاهده است. بیت کوین اولین و بزرگترین ارز رمز پایه غیرمتمرکز است. صداها ارز رمز نگاری شده دیگر &quot;altcoin&quot; (سکه جایگزین) وجود دارد، مانند Litecoin و Dogecoin، اما بیت کوین 90 درصد سرمایه بازار تمام ارزهای رمز پایه را تشکیل می‌دهد و استاندارد واقعی است. بیت کوین نام مستعار است (نه ناشناس) به این معنا که آدرس کلید عمومی (32-27 رشته الفبایی عددی؛ از نظر عملکرد شبیه آدرس ایمیل) برای ارسال و دریافت بیت کوین و ثبت معاملات استفاده می‌شود، در مقابل شناسایی شخصی اطلاعات. بیت کوین به عنوان پاداش کار پردازش محاسباتی، معروف به استخراج، ایجاد می‌شود که در آن کاربران قدرت محاسباتی خود را برای تایید و ثبت پرداخت ها به دفتر کل ارائه می‌دهند. افراد یا شرکت ها در ازای پرداخت معاملات و بین کوین های تازه ایجاد شده به استخراج مشغول می‌شوند. علاوه بر استخراج، بیت کوین را می‌توان مانند هر ارز در ازای دریافت پول، محصولات و خدمات دریافت کرد. کاربران می‌توانند با استفاده از نرم افزار کیف پول در رایانه شخصی، دستگاه تلفن همراه یا برنامه وب، بیت کوین را به صورت الکترونیکی با هزینه معامله اختیاری ارسال و دریافت کنند.بلاک چین چیست؟ بلاکچین دفتر عمومی کلیه معاملات بیت کوین است که تاکنون انجام شده است. بلاک چین به طور مداوم در حال رشد است زیرا ماینرها برای ثبت آخرین معاملات بلوک های جدیدی را به آن اضافه می‌کنند (هر 10 دقیقه). بلوک ها با ترتیب زمانی و خطی به زنجیره بلوک اضافه می شوند. هر گره کامل (یعنی هر رایانه متصل به شبکه بیت کوین با استفاده از کلاینتی که وظیفه اعتبار سنجی و بازپرداخت معاملات را دارد) دارای یک نسخه از بلاک چین است که با پیوستن ماینر به شبکه بیت کوین به طور خودکار بارگیری می‌شود. بلاک چین اطلاعات کاملی در مورد آدرس‌ها و مقدارها از بلوک ریشه (اولین معاملات انجام شده تاکنون) تا بلوک اخیراً تکمیل شده دارد. بلاک چین (زنجیره بلوک) به عنوان یک دفتر عمومی به این معنی است که جستجوی هر جستجوگر بلوک (مانند https://blockchain.info) برای معاملات مرتبط با یک آدرس بیت کوین خاص آسان است – به عنوان مثال، می‌توانید آدرس کیف پول خود را جستجو کنید تا معامله‌ای که در آن اولین کوین خود را دریافت کرده‌اید را ببینید. بلاک چین به عنوان اصلی ترین نوآوری در فناوری بیت کوین شناخته می‌شود زیرا به عنوان مکانیزم اثبات &quot;بدون اعتماد&quot; برای تمام معاملات در شبکه عمل می‌کند. کاربران می‌توانند به سیستم دفتر کل عمومی ذخیره شده در سراسر جهان در بسیاری از گره های غیر متمرکز مختلف که توسط &quot;حسابداران معدنچی&quot; نگهداری می‌شوند، اعتماد کنند، در مقابل اینکه با طرف معامله (شخص دیگر) یا واسطه شخص ثالث (مانند یک بانک) ایجاد و حفظ اعتماد کنند. بلاک چین به عنوان معماری سیستم جدید معاملات غیرمتمرکز بدون اعتماد نوآوری اصلی است. بلاک چین اجازه می‌دهد تا تمرکز زدایی و از بین بردن واسطه ها در همه معاملات از هر نوع بین طرف ها به صورت جهانی ممکن باشد. بلاک چین مانند یک لایه کاربردی دیگر است که روی مجموعه پروتکل های اینترنت موجود اجرا می‌شود، و یک لایه کاملاً جدید به اینترنت اضافه می‌کند تا معاملات اقتصادی، پرداخت بی واسطه ارز دیجیتال (در یک ارز رمز پایه جهانی) و قراردادهای مالی طولانی تر و پیچیده تر را ممکن می‌کند. هر ارز، قرارداد مالی یا دارایی سخت، یا نرم با سیستمی مانند بلاک چین می‌تواند معامله شود. بعلاوه، بلاک چین ممکن است نه فقط برای معاملات، بلکه به عنوان سیستم ثبت و موجودی برای ثبت کردن، ردیابی، نظارت و معامله کلیه دارایی ها نیز مورد استفاده قرار گیرد. بلاک چین به معنای واقعی کلمه مانند یک صفحه گسترده غول پیکر برای ثبت همه دارایی ها و یک سیستم حسابداری برای معامله آنها در مقیاس جهانی است که می‌تواند شامل همه اشکال دارایی های نگهداری شده توسط همه طرف ها در سراسر جهان باشد. بنابراین، بلاک چین می‌تواند برای هر شکلی از ثبت دارایی و معامله شامل همه حوزه های مالی، اقتصادی و پول مورد استفاده قرار گیرد. دارایی های سخت (دارایی فیزیکی)؛ و دارایی معنوی (آرا، ایده ها، شهرت، قصد، داده های بهداشتی و غیره).جهان متصل و بلاک چین: پنجمین پارادایم در هم گسیخته محاسباتیک مدل برای درک دنیای مدرن از طریق الگوهای محاسبات است، و به ترتیب هر دهه یک الگوی جدید به وجود می‌آید. ابتدا پارادایم های کامپیوترهای بزرگ و رایانه های شخصی وجود داشت، و سپس اینترنت انقلابی در همه چیز ایجاد کرد. شبکه های تلفن همراه و اجتماعی جدیدترین پارادایم بود. الگوی نوظهور فعلی این دهه می‌تواند دنیای متصل به محاسبات با تکیه بر رمزنگاری بلاک چین باشد(2015). دنیای متصل می‌تواند به طور مفیدی از فناوری بلاک چین به عنوان پوششی اقتصادی برای جهانی که به طور فزاینده ای به دنیای محاسبات چند دستگاهی متصل می ‌شود که شامل کامپیوترهای پوشیدنی، حسگرهای اینترنت اشیا (IoT)، تلفن های هوشمند، تبلت ها، لپ تاپ ها، دستگاه های خود ردیاب کمی (مانند FitBit) ، خانه هوشمند، اتومبیل خوشمند، و شهر هوشمند است. اقتصادی که بلاک چین امکان پذیر می‌کند، صرفاً حرکت پول نیست: این انتقال اطلاعات و تخصیص موثر منابعی است که پول در اقتصاد در مقیاس انسانی و شرکتی امکان پذیر کرده است. با داشتن پتانسیل انقلابی برابر با اینترنت، با تاثیرات شبکه اینترنت جهانی و ارتباطات سلولی معمول، فناوری بلاک چین می‌تواند بسیار سریع تر از اینترنت بکار گرفته و مورد استفاده قرار گیرد. همانطور که قابلیت های اجتماعی-موبایل پارادایم 4 با داشتن برنامه های تلفن همراه برای همه چیز و گروه گرایی به مانند یک ویژگی وب سایت (دوست داشتن، دیدگاه، دوستی، انجمن مشارکت) به یک ویژگی مورد انتظار از ویژگی های فناوری تبدیل شده است، بلاک چین پارادایم 5 نیز می‌تواند قابلیت تبادل ارزش داشته باشد. عملکرد پارادایم 5 می‌تواند تجربه یک لایه محاسباتی چند سیستمی همیشه متصل، یکپارچه، فیزیکی، با یک پوشش فناوری بلاک چین برای پرداخت ها باشد – نه فقط پرداخت های اساسی، بلکه پرداخت های خرد، مبادله غیرمتمرکز، درآمد و هزینه رمزها، فرخوانی دارایی های دیجیتال و انتقال، و صدور و اجرای قرداد هوشمند – به عنوان لایه اقتصادی که وب پیش از این نداشت. جهان در حال حاضر برای پول گسترده تر مبتنی بر اینترنت آماده شده است  Apple Pay (برنامه تلفن همراه مبتنی بر رمز نگاری اپل) و رقبای آن می‌توانند یک گام مهم واسطه ای برای حرکت به یک دنیای ارز رمز نگاری شده تمام عیار باشند که در آن بلاک چین به یک لایه اقصادی یکپارچه برای وب تبدیل می‌شود.شبکه پرداخت M2M/IoT Bitcoin برای اقتصاد ماشینیبلاک چین یک الگوی انقلابی برای دنیای بشر، &quot;اینترنت افراد&quot; است و همچنین می‌تواند ارز فعال کننده اقتصاد ماشینی باشد. گاتنر تخمین می‌زند اینترنت اشیا 26 میلیارد دستگاه و اقتصاد 1.9 تریلیون دلاری تا 2020 را شامل شود. برای مدیریت معاملات بین این دستگاه ها به ارز رمزنگاری شده &quot;اینترنت پول&quot; نیاز است، و پرداخت های خرد میان دستگاه های متصل می‌تواند به لایه جدیدی از اقتصاد تبدیل شود. سیسکو تخمین می‌زند که اتصالات M2M (ماشین به ماشین) با سرعت بیشتری نسبت به هر گروه دیگر رشد می‌کند (84 درصد) و پیش بینی می‌شود که از 2012 تا 2018 ترافیک IP جهانی سه برابر شود، اما ترکیب آن به نفع تلفن همراه، وای فای و ترافیک M2M تغییر می‌کند. همانطور که اقتصاد پول امکان تخصیص بهتر، سریعتر و کارآمدتر منابع در مقیاس انسانی را فراهم می‌کند، اقتصاد ماشین نیز می‌تواند یک سیستم قوی و غیرمتمرکز را برای رسیدگی به همین مسائل در مقیاس ماشین فراهم کند. برخی از نمونه های پرداخت های خرد متقابل می‌توانند اتومبیل های متصل باشند اگر در عجله هستند به طور خودکار از بزرگراه با سرعت بالاتر، که از جاده های همسان جلوگیری کرده و برنامه آرام‌تری دارند عبور کنند. هماهنگی هواپیمای بدون سرنشین شخصی برای حمل و نقل هوایی یکی دیگر از موارد استفاده بالقوه برای شبکه های خرد پرداخت دستگاه به دستگاه است که در آن ‌می‌توان اولویت های فردی را متعادل کرد. سنسورهای کشاورزی نمونه‌ای از نوع دیگری از سیستم است که می‌تواند با استفاده از اصول اقتصادی داده های بی ربط معمول را فیلتر کند اما وقتی شرایط آستانه محیطی (به عنوان مثال رطوبت) توسط یک گروه کافی از حسگرها در یک گروه مستقر برآورده می‌شود، داده های اولویت دار را تشدید می‌کند. مدل غیرمترمرکز فناوری بلاک چین در معاملات بدون اعتماد نظیر به نظیر در ابتدایی ترین سطح خود به معنی معاملات بدون واسطه است. با این حال، تغییر بالقوه به معاملات غیر متمرکز بی اعتماد بر اساس مقیاس گسترده جهانی برای هر نوع تعامل و معامله (انسان به انسان، انسان به ماشین، ماشین به ماشین) می‌تواند یک ساختار و عملکرد کاملا متفاوت جامعه را در روش هایی که هنوز نمی‌توان پیش بینی کرد اما در آنها روابط قدرت و سلسله مراتب حاضر به راحتی می‌توانند سودمندی خود را را از دست بدهند برسد.پذیرش جریان اصلی: اعتماد ، قابلیت استفاده ، سهولت استفادهاز آنجا که بسیاری از ایده ها و مفاهیم پشت بیت کوین و فناوری بلاک چین جدید و پیچیده است، یک شکایت شاید این بوده است که ارزهای رمز پایه برای اتخاذ به عنوان جریان اصلی بسیار پیچیده هستند. با این حال، این مورد درباره اینترنت صادق بود و به طور کلی در ابتدای هر دوره فن آوری جدید، جزییات فنی &quot;این چیست&quot; و &quot;چگونه کار می‌کند&quot; مورد توجه مخاطبان قرار دارد. این یک مانع واقعی نیست. برای ارسال ایمیل لازم نیست بدانید که TCP/IP چگونه کار می‌کند و برنامه های فن آوری جدید بدون در نظر گرفتن بیشتر جزییات فنی به استفاده عمومی می‌رسند تا زمانی که برنامه های فرانت اند مناسب، قابل استفاده و قابل اعتماد ساخته می‌شوند. به عنوان مثال، همه کاربران نیازی به دیدن جزییات ناخوشایند آدرس های عمومی 32 حرفی عددی ندارند. در حال حاضر شرکت های &quot;کیف پول جریان اصلی&quot; مانند Circle Internet Financial و Xapo در حال توسعه برنامه های فرانت اند هستند که به طور خاص با هدف اقتباس جریان اصلی از بیت کوین (با هدف &quot;جیمیلِ بیت کوین&quot; بودن از نظر شرایط کاربرد پذیری فرانت اند – و سهم بازار) هستند. از آنجا که بیت کوین و کیف پول الکترونیکی به پول مربوط می شوند ، حساسیت اضافی بیشتری در برنامه های کاربر نهایی و اعتماد مشتری وجود دارد که خدمات باید ایجاد کنند. برای ایجاد یک جامعه رمزپایه با کیف پول قابل استفاده ، بسیاری از مسائل مربوط به امنیت ارزهای رمزپایه وجود دارد که باید حل شوند، از جمله اینکه چگونه از پول خود پشتیبان تهیه کنید ، اگر کلید خصوصی خود را گم کنید چه کاری باید انجام دهید و اگر در معامله ای سکه منع شده (یعنی قبلاً به سرقت رفته) دریافت کردید و اکنون نمی توانید از شر آن خلاص شوید ، چه کاری باید انجام دهید. با این حال ، این مسائل توسط صنعت بلاکچین حل و فصل می‌شود و ارزهای جایگزین می توانند از مزیت گره دیگری در پیشرفت مداوم فناوری مالی(fintech) بودن استفاده کنند که شامل دستگاه های خودپرداز ، بانکداری آنلاین و اکنون Apple Pay است. پذیرش نرم افزار ارزی می تواند با فرانت اند های کاربردپذیر قابل اعتماد ساده باشد ، اما پذیرش موفقیت آمیز جریان اصلی برنامه های کاربردی بلاکچین فراتر از ارز می تواند ظریف تر باشد. به عنوان مثال ، خدمات اسناد رسمی مجازی برای ثبت آسان IP ، قراردادها ، وصیت نامه ها و اسناد مشابه ساده به نظر می رسد. بدون شک دلایل اجتماعی هست که مردم ترجیح می دهند با یک وکیل در مورد برخی موارد تعامل داشته باشند (شاید توصیه های انسانی ، روانکاوی یا اعتبار سنجی که وکلا می توانند ارائه دهند) ، و به همین دلایل ، پذیرش فناوری منحصراً مبتنی بر استدلال های کارایی ممکن است متزلزل شود . به طور کلی ، اگر بیت کوین و صنعت بلاکچین به بلوغ برسند ، به احتمال زیاد در فازهایی قرار می گیرد ، شبیه الگوی پذیرش اینترنت که ارزش آن به طور واضح برای مخاطبان بالقوه مختلف معرفی می شود ، و سپس آنها با فن آوری جدید وارد می شوند. در ابتدا ، اینترنت مشکلات تحقیق مشترک را برای یک زیر گروه: محققان دانشگاهی و ارتش حل کرد. سپس ، گیمرها و کاربران مشتاق سرگرمی آنلاین شدند و سرانجام ، همه وارد اینترنت شدند. در مورد بیت کوین ، تاکنون پذیرندگان اولیه خرده فرهنگ افرادی هستند که نگران پول و ایدئولوژی هستند و گام های بعدی برای پذیرش گسترده می تواند این باشد که فناوری بلاکچین مشکلات عملی دیگری را برای گروه های بزرگ دیگر حل می کند ، به عنوان مثال ، برخی از زیر گروه های برجسته فناوری بلاکچین یک مسئله اساسی را حل می کند ، شامل کسانی که تحت تأثیر سانسور اینترنت در رژیم های سرکوبگر سیاسی هستند ، جایی که خدمات DNS غیر متمرکز بلاک چین (سیستم نام دامنه) می تواند تفاوت زیادی ایجاد کند. به همین ترتیب ، در بازار IP ، می توان از فناوری blockchain برای ثبت زنجیره اختراع و امتیاز و ایجاد انقلابی در دادرسی IP در زمینه های حفاظت ، دسترسی و اختیار دارایی استفاده کرد.مبانی ارز رمزنگاری شدهبیت کوین و سایر آلت کوین ها پول نقد دیجیتال هستند، راهی برای خرید و فروش هر چیزی از طریق اینترنت. اولین قدم ایجاد کیف پول دیجیتالی است ، یا از طریق کیف پول وب مبتنی بر مرورگر یا با بارگیری کیف پول رومیزی یا تلفن هوشمند از Blockchain.info ، Mycelium ، Coinbase ، Electrum یا سایر ارائه دهندگان کیف پول بیت کوین. هنگام راه اندازی کیف پول آدرس Bitcoin و همچنین کلیدهای عمومی و خصوصی به طور خودکار تولید می شوند. آدرس بیت کوین شما به طور معمول یک شناسه از 26 تا 34 نویسه حرفی عددی است که با شماره 1 یا 3 شروع می شود ، که نشان دهنده یک مقصد امکان پذیر برای پرداخت بیت کوین است - به عنوان مثال ، 1JDQ5KSqUTBo5M3GUPx8vm9134eJRosLoH ، مانند این رشته از کاراکترها یا به شکل یک کد QR نشان داده شده است. (این مثال آدرس بیت کوین پادکست اطلاعاتی است که فناوری بلاکچین را پوشش می دهد به نام  Let’s Talk Bitcoin) آدرس بیت کوین شما مانند آدرس ایمیل شماست. افرادی که آدرس ایمیل شما را دارند می توانند برای شما ایمیل ارسال کنند. افرادی که آدرس کیف پول کلید عمومی شما را دارند می توانند برای شما بیت کوین ارسال کنند.از آنجا که بیت کوین پول نقد دیجیتال است ، کیف پول شما شامل پول نقد واقعی نیست (بنابراین اصطلاح کیف پول یک مقدار اشتباه است). کیف پول شما دارای آدرس ، کلیدهای عمومی و خصوصی و سابقه ای از مقدار بیت کوین است که در دفتر بلاکچین کنترل می کنید ، اما هیچ وجه نقدی واقعی وجود ندارد. برای محافظت از کلیدهای خصوصی شما باید کیف پول شما به اندازه هر کیف پول سنتی ایمن باشد، هر کسی که به آنها دسترسی داشته باشد ، به کنترل یا هزینه یا انتقال بیت کوین شما دسترسی دارد. نباید کلیدهای خصوصی خود را به شخص دیگری بدهید یا آنها را در صرافی ذخیره کنید (ضعف امنیت کلید خصوصی یکی از عوامل موثر در سرقت ها و کلاهبرداری های مربوط به بیت کوین بوده است). با آدرس شما ، هرکسی می تواند برای شما بیت کوین بفرستد (همانطور که هر کسی می تواند با آدرس ایمیل شما برای شما ایمیل ارسال کند). برای ارسال بیت کوین به شخص دیگری ، به آدرس وی و کلید خصوصی کیف پول خود نیاز دارید که در آنجا نرم افزار بررسی می کند که آیا شما بر بیت کوین هایی که می خواهید خرج کنید یا انتقال دهید کنترل دارید. برای ارسال بیت کوین به کسی ، کدQR آدرس کیف پول وی را اسکن می کنید یا در غیر این صورت نویسه های آدرس یا QRcode وی را بدست آورید به عنوان مثال ، از طریق ایمیل یا پیامک. فرستنده آدرس کدQR کیف پول گیرنده را اسکن کرده و از برنامه کیف پول برای وارد کردن اطلاعات بیشتر در مورد معامله استفاده می کند ، مانند مبلغ ، هزینه معامله (معمولاً مبلغ تعیین شده توسط نرم افزار کیف پول را تأیید می کند)، و هر پارامتر دیگر برای ارسال بیت کوین به گیرنده. هنگامی که فرستنده معامله را ارسال می کند ، پیامی از طرف صاحب آدرس ارسال کننده به شبکه پخش می شود که تعداد x عدد سکه از آن آدرس متعلق به آدرس جدید است. این عملیات توسط کلید خصوصی فرستنده مجاز می‌شود. اگر آن کیف پول کلید خصوصی مربوط به آن سکه ها را نداشته باشد ، سکه ها قابل خرج نیستند. معامله صادقانه تقریباً بلافاصله در برنامه کیف پول گیرنده با وضعیت &quot;تأیید نشده&quot; دریافت می شود. پس از آن حدود 10 دقیقه طول می کشد تا معامله تأیید شود و در بلاک چین برای هر استخراج کننده بلاکچین ثبت شود. بنابراین ، برای خریدهای بزرگ مانند اتومبیل یا املاک و مستغلات ، می خواهید صبر کنید تا معامله را تأیید کنید ، اما برای خرید قهوه زحمت چنین کاری را نخواهید داشت.رمزگذاری کلید عمومی / کلید خصوصی 101وقتی کیف پول برای اولین بار ساخته یا تنظیم می شود ، یک آدرس ، کلید عمومی و کلید خصوصی به طور خودکار تولید می شود. بیت کوین بر اساس رمزگذاری کلید عمومی است ، به این معنی که شما می توانید کلید عمومی را آزادانه ارائه دهید اما باید کلید خصوصی را برای خود نگه دارید. آدرسهای بیت کوین توسط نرم افزاری یک عدد تصادفی انتخاب میکند و یک جفت کلید عمومی / خصوصی ایجاد می کند (طبق استاندارد فعلی ، الگوریتم امضای دیجیتال منحنی بیضوی یاECDSA ) که از نظر ریاضی مرتبط است و در زمان مصرف بیت کوین تأیید می‌شود. این عملیات راه اندازی کلید خصوصی را ایجاد می کند ، اما مراحل دیگری برای تولید آدرس Bitcoin لازم است. آدرس بیت کوین به سادگی کلید عمومی نیست. بلکه کلید عمومی برای استفاده موثرتر تغییر شکل می دهد. از طریق پروتکل های رمزگذاری اضافی(مانند SHA-256 و RIPEMD-160)، یک عملیات هش کردن (تبدیل رشته ای از کاراکتر ها به یک مقدار با طول ثابت یا کلید کوتاه تر که نشان دهنده رشته اصلی است) و عملیات اجرایی (حذف موارد مشابه) چرخه می شود. - نادیده گرفتن نویسه ها ، مانند حروف کوچک و بزرگ I و 0 و O ؛ افزودن یک جمع چک به انتها ؛ و افزودن شماره شناسایی به ابتدای آدرس - برای بیشتر آدرس های بیت کوین ، این یک 1 است ، نشان می دهد که آدرس عمومی شبکه بیت کوین است). هر چند از نظر فنی امکان پذیر نیست که دو نفر مختلف بتوانند آدرس بیت کوین یکسانی را ایجاد کنند. در چنین حالتی ، هر دو می توانند سکه ها را در آن آدرس خاص خرج کنند. احتمال وقوع این اتفاق بسیار اندک است ، اما تقریباً 99.9999999999 درصد غیرممکن است. کیف پول بیت کوین می تواند حاوی چندین آدرس باشد (یک روش امنیتی استفاده یا ایجاد آدرس جدید برای هر معامله است) ، و یک یا چند کلید خصوصی که در پرونده کیف پول ذخیره می شوند. کلیدهای خصوصی از نظر ریاضی با کلیه آدرس های بیت کوین تولید شده برای کیف پول مرتبط هستند. در بیت کوین ، یک کلید خصوصی معمولاً یک عدد 256 بیتی است (اگرچه ممکن است بعضی از کیف پول ها بین 128 تا 512 بیت استفاده کنند) ، که می تواند به یکی از چندین روش نشان داده شود. در اینجا یک مثال از کلید خصوصی در قالب هگزادسیمال وجود دارد (256 بیت در هگزادسیمال 32 بایت یا 64 کاراکتر در محدوده 0–9 یاA – F است):E9 87 3D 79 C6 D8 7D C0 FB 6A 57 78 63 33 89 F445 32 13 30 3D A6 1F 20 BD 67 FC 23 3A A3 32 62در اینجا مثال دیگری از کلید خصوصی و آدرس عمومی مربوط به آن وجود دارد:کلید خصوصی:79186670301299046436858412936420417076660923359050732094116068951337164773779آدرس عمومی:1EE8rpFCSSaBmG19sLdgQLEWuDaiYVFT9Jانجام نوعی محاسبه برگشتی برای بدست آوردن کلید خصوصی از کلید عمومی یا غیرممکن است (در عملیات هش ، که فقط یک طرفه است یا تکنیک های دیگر) یا بسیار گران است. (قدرت محاسباتی فوق العاده ای که برای تأیید معامله مدت زمان طولانی تری کار می کند). برای دریافت بیت کوین فقط آدرس لازم است ، در حالی که جفت کلید عمومی / خصوصی برای ارسال بیت کوین مورد نیاز است.</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sat, 23 Jan 2021 20:23:31 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس پنج قسمت یک: درک مجموعه‌ها</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-five-part-one-collections-fo265fkeaoe9</link>
                <description>۳.درک مجموعه‌ها (collections)در این تکلیف شما درباره مجموعه ها بیشتر می آموزید،که لیست‌ها، و یک نوع جدید از مجموعه به‌نام نگاشت مخلوط (hash maps) را شامل می‌شود.گام ۱: درباره لیست ها بیشتر یاد بگیرید۱. لیست ها و لیست های قابل تغییر پیش از این معرفی شدند. آن‌ها ساختار‌داده های بسیار کاربردی هستند، به این دلیل کاتلین تعدادی تابع توکار برای لیست ها ارائه می کند. فهرست جزئی توابع لیست را بررسی کنید. شما می توانید فهرست کامل مستندات برای لیست و لیست های قابل تغییر را در مستندات کاتلین پیدا کنید.add(element: E)یک مورد را به لیست قابل تغییر اضافه می‌کندremove(element: E) یک مورد را از لیست قابل تغییر حذف می‌کندreversed()یک نسخه از لیست را با عناصر به ترتیب وارونه برمی‌گرداندcontains(element: E)اگر لیست شامل مورد باشد یک true برمی‌گرداندsubList(fromIndex: Int, toIndex: Int)بخشی از لیست را باز می گرداند که از اولین شاخص شروع می‌شود اما شامل شاخص آخر نیست۲. همچنان با هسته ارتباطی REPL کار می‌کنید، یک لیست از اعداد بسازید و متد ()sum را روی آن صدا بزنید. این تمامی عناصر را با هم جمع می کند. val list = listOf(1, 5, 3, 4)
println(list.sum()) ⇒ 13۳. یک لیست از رشته ها بسازید و آن را جمع کنید.val list2 = listOf(&amp;quota&amp;quot, &amp;quotbbb&amp;quot, &amp;quotcc&amp;quot)println(list2.sum())⇒ error: none of the following functions can be called with the arguments supplied:۴. اگر عنصر چیزی باشد که list نتواند به طور مستقیم جمع کند، مانند یک رشته، شما می توانید با استفاده از ()sumby. و یک تابع لامبدا مشخص کنید که چگونه آن را جمع کند، برای مثال برای جمع کردن طول رشته‌ها. نام پیش‌فرض یک آرگومان لامبدا it است و اینجا وقتی که لیست را می پیماییم it به هر عنصر از لیست اشاره دارد.val list2 = listOf(&amp;quota&amp;quot, &amp;quotbbb&amp;quot, &amp;quotcc&amp;quot)println(list2.sumBy { it.length }) ⇒ 6۵. کارهای بیشتری هست که می توانید با لیست انجام دهید. تنها راه برای دیدن عملکردهای قابل دسترس این است که یک لیست داخل InteliiJ IDEA بسازید، یک نقطه اضافه کنید و بعد به لیست کامل کردن خودکار در راهنمای ابزار نگاه کنید. این برای هر شی‌ای کار می کند. این را با list امتحان کنید.فهرست کامل کردن خودکار در راهنمای ابزاربرای دیدن عملکرد برای یک کلاس، یک شی داخل IntelliJ IDEA بسازید، یک نقطه پس از نام آن اضافه کنید، و بعد به فهرست کامل کننده خودکار درون راهنمای ابزار نگاه کنید. این برای همه شی‌ها کار می کند.۶. متد ()listIterator را از فهرست انتخاب کنید، و بعد با استفاده از عبارت for همه عناصر که با فاصله از هم جدا شدند را چاپ کنید.val list2 = listOf(&amp;quota&amp;quot, &amp;quotbbb&amp;quot, &amp;quotcc&amp;quot)for (s in list2.listIterator()) {    println(&amp;quot$s &amp;quot)}⇒ a bbb cc گام ۲: از نگاشت مخلوط (hash maps) استفاده کنیددر کاتلین شما تقریباً می توانید هر چیزی را با استفاده از ()hashMapOf به چیز دیگری نگاشت کنید. نگاشت مخلوط به نوعی مانند یک لیست از جفت ها است، که مقدار اول به عنوان کلید عمل می‌کند.۱. یک نگاشت مخلوط بسازید که علائم، که کلیدها هستند و بیماری های ماهی، که مقادیر هستند را جور می‌کند. val cures = hashMapOf(&amp;quotwhite spots&amp;quot to &amp;quotIch&amp;quot, &amp;quotred sores&amp;quot to &amp;quothole disease&amp;quot)۲. سپس شما می توانید مقدار بیماری را بر اساس کلید علائم، با استفاده از متد ()get، یا حتی مختصر‌تر با براکت مربعی [‌ ] بازیابی کنید.println(cures.get(&amp;quotwhite spots&amp;quot)) ⇒ Ichprintln(cures[&amp;quotred sores&amp;quot])⇒ hole disease۳. یک علامت بیماری که در نگاشت وجود ندارد را امتحان کنید. println(cures[&amp;quotscale loss&amp;quot])⇒ null اگر یک کلید در نگاشت نباشد، تلاش برای بازگرداندن بیماری مطابق با مقدار null را برمی‌گرداند. بر اساس داده نگاشت شده، ممکن است هیچ همسانی برای یک کلید وجود نداشته باشد. برای این کاتلین تابع ()getOrDefault را ارائه می‌کند.۴. با استفاده از ()getOrDefault جستجو برای کلیدی که همسان ندارد را امتحان کنید.println(cures.getOrDefault(&amp;quotbloating&amp;quot, &amp;quotsorry, I don&#039;t know&amp;quot)) ⇒ sorry, I don&#039;t knowاگر نیاز دارید تا چیزی بیشتر از بازگرداندن یک مقدار انجام دهید، کاتلین تابع ()getOrElse را ارائه می‌کند.۵. کد را برای استفاده از ()getOrElse به جای ()getOrDefault تغییر دهید.println(cures.getOrElse(&amp;quotbloating&amp;quot) {&amp;quotNo cure for this&amp;quot})⇒ No cure for thisبه جای بازگرداندن یک مقدار پیش فرض ساده، کدی که درون آکولاد { } باشد اجرا می‌شود. در این مثال else فقط یک رشته بازمی‌گرداند، اما می توانست مثل پیدا کردن یک صفحه وب با یک درمان برای بیماری  و بازگرداندن آن تجملی باشد.مانند لیست قابل تغییر (mutableListOf) شما می توانید یک نگاشت قابل تغییر (mutableMapOf) بسازید. یک نگاشت قابل تغییر به شما اجازه می دهد مورد ها را اضافه یا حذف کنید. Mutable یعنی قابل تغییر و immutable یعنی غیر قابل تغییر.۶. یک نگاشت از فهرست موجودی که قابل اصلاح باشد بسازید، که یک رشته ابزار را به تعداد موارد نگاشت می‌کند. آنرا با تور ماهی گیری (fish net) داخل آن بسازید، بعد با استفاده از ()put سه پودر تمیز کننده مخزن (tank scrubbers) به فهرست موجودی اضافه کنید، و بعد تور ماهی را با ()remove حذف کنید.val inventory = mutableMapOf(&amp;quotfish net&amp;quot to 1)
inventory.put(&amp;quottank scrubber&amp;quot, 3)
println(inventory.toString())
inventory.remove(&amp;quotfish net&amp;quot)
println(inventory.toString())⇒ {fish net=1, tank scrubber=3}{tank scrubber=3}مجموعه های غیر قابل تغییر در فضای نخی (threaded) کاربردی هستند جایی که اگر نخ های مختلف به یک مجموعه دسترسی پیدا کنند ممکن است مشکلاتی ایجاد شود.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Wed, 28 Oct 2020 21:12:30 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس پنج قسمت یک: درباره جفت‌ها و سه‌گانه‌ها</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-five-part-one-pairs-triples-zuiexb0t9g7c</link>
                <description>۲. درباره جفت‌ها و سه‌گانه‌هادر این تکلیف شما در مورد جفت‌ها و سه‎گانه‌ها و تخریب ساختار آنها بیشتر می‌آموزید. جفت‌ها و سه‌گانه‌ها کلاس‌های داده‌ای پیش ساخته برای دو یا سه مورد نوعی (generic) هستند. این می‌تواند برای برگرداندن یک یا دو مقدار از یک تابع کاربردی باشد.فرض کنید که یک List از ماهی و یک تابع ()isFreshWater برای چک کردن ماهی آب شیرین یا ماهی آب شور داشته باشید. تابع ()List.partition دو لیست برمی‌گرداند، یکی با مورد‌هایی که شرط true دارند، و دیگری برای موردهایی که شرط false دارند.val twoLists = fish.partition { isFreshWater(it) }
println(&amp;quotfreshwater: ${twoLists.first}&amp;quot)
println(&amp;quotsaltwater: ${twoLists.second}&amp;quot)گام ۱: چند جفت و سه‌گانه بسازید۱. هسته ارتباطی REPL را باز کنید.۲. یک جفت بسازید، که یک تکه از تجهیزات را با چیزی که برای آن استفاده می شود مرتبط می‌کند، بعد مقادیر را چاپ ‌کنید. شما می‌توانید با ساختن یک عبارت که دو مقدار، مانند دو رشته را، با استفاده از کلمه کلیدی to به هم وصل می‌کند یک جفت بسازید، سپس با استفاده از first. یا second. به هر کدام از مقادیر ارجاع دهید.val equipment = &amp;quotfish net&amp;quot to &amp;quotcatching fish&amp;quot
println(&amp;quot${equipment.first} used for ${equipment.second}&amp;quot)⇒ fish net used for catching fish۳. یک سه‌گانه بسازید و آن را با استفاده از ()toString چاپ کنید، سپس آنرا با استفاده از ()toList به یک لیست تبدیل کنید. شما سه‌گانه را با استفاده از ()Triple و سه مقدار می‌سازید. برای ارجاع به هر مقدار از second ،.first. و third. استفاده کنید.val numbers = Triple(6, 9, 42)
println(numbers.toString())
println(numbers.toList())⇒ (6, 9, 42)
[6, 9, 42]مثال‌های بالا از نوع یکسان برای همه بخش‌های جفت و سه‌گانه استفاده می‌کنند، اما این الزامی نیست. بخش‌ها می‌توانستند یک رشته، یک عدد، یا یک لیست، یا برای مثال - حتی یک جفت یا سه‌گانه باشند.۴. یک جفت بسازید که بخش اول آن خود یک جفت است.val equipment2 = (&amp;quotfish net&amp;quot to &amp;quotcatching fish&amp;quot) to &amp;quotequipment&amp;quot
println(&amp;quot${equipment2.first} is ${equipment2.second}\n&amp;quot)
println(&amp;quot${equipment2.first.second}&amp;quot)⇒ (fish net, catching fish) is equipment
⇒ catching fishگام ۲: ساختار چند جفت و سه‌گانه را تغییر دهیدبه جدا کردن جفت ها و سه‌گانه‌ها به قطعات سازنده آن‌ها تغییر ساختار (destructuring) گفته می شود. جفت‌ها و سه‌گانه‌ها را به تعداد متغیرهای مناسب به اختصاص دهید، و کاتلین مقدار هر بخش را به ترتیب اختصاص می دهد.۱. ساختار یک جفت را تغییر دهید و مقادیر آن را چاپ کنید.val equipment = &amp;quotfish net&amp;quot to &amp;quotcatching fish&amp;quot
val (tool, use) = equipment
println(&amp;quot$tool is used for $use&amp;quot)⇒ fish net is used for catching fish ۲. ساختار یک سه گانه را تغییر دهید و مقادیر آن را چاپ کنید.val numbers = Triple(6, 9, 42)val (n1, n2, n3) = numbersprintln(&amp;quot$n1 $n2 $n3&amp;quot)   ⇒ 6 9 42توجه کنید که تغییر ساختار جفت ها و سه‌گانه‌ها مانند کلاسهای داده عمل می‌کند که در آزمایشگاه کد قبلی پوشش داده شد.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Wed, 28 Oct 2020 20:06:28 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس پنج قسمت یک: خوش آمدید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-five-part-one-welcome-voajytwkdu3x</link>
                <description>1.خوش آمدیدمواد این درس شامل آزمایشگاه کد (کد‌لب) با تکالیف پیشنهادی است.شما بیشترین بهره را از این دوره می‌برید اگر درس‌ها را به ترتیب کار کنید، اما این الزامی نیست. بر اساس دانش‌خودتان، شما می‌توانید بعضی بخش ها را مختصر بخوانید. این دوره برای برنامه‌نویسانی است که با یک زبان برنامه‌ نویسی شی گرا آشنا هستند و می‌خواهند زبان کاتلین را بیاموزند.بوت کمپ آنلاین آموزش زبان Kotlin برای برنامه نویسان اندروید دوره گوگل معرفی‌نامهدر این آزمایشگاه کد شما با برخی امکانات کاربردی کاتلین شامل جفت‌ها، مجموعه‌ها، و توابع افزونه آشنا می‌شوید.به جای ساختن یک اپلیکیشن نمونه، درس‌های این دوره برای ساختن دانش شما طراحی شده، اما درس‌ها نیمه مستقل از یکدیگر است تا بتوانید از بخش‌های آشنا عبور کنید. برای متصل کردن درس‌ها، بیشتر مثال‌ها از یک تم آکواریوم استفاده می‌کند، برای دیدن داستان کامل آکواریوم، دوره بوت کمپ کاتلین برای برنامه نویسان روی وب سایت Udacity را چک کنید.آکواریوم کاتلین و آندروید آنچه باید پیش از شروع بدانیدنحو توابع در کاتلین، کلاس‌ها، و متد‌هاچگونه با هسته ارتباطی Koltin REPL در IntelliJ IDEA کار کنیدچگونه در نرم‌افزار IntelliJ IDEA یک کلاس جدید بسازید و برنامه را اجرا کنیدچه چیزی یاد می‌گیرید؟چگونگی کار با جفت ها (pair) و سه‌گانه‌ها (triple) درباره مجموعه‌ها (collections)تعریف کردن و استفاده از ثابت‌ها (constant)نوشتن توابع افزونهچه کاری انجام می‌دهید؟درباره جفت‌ها و سه‌گانه‌ها و نگاشت‌ِ هش (hash map) در REPL یاد می‌گیریدروشهای متفاوت سازماندهی ثوابت را می‌آموزیدیک تابع افزونه و یک خصوصیت افزونه (extension property) می‌نویسیدبخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Wed, 28 Oct 2020 18:43:43 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: تکلیف</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-homework-zp4gkm3tnu5n</link>
                <description>۱۳. تکلیف به این سوالات پاسخ دهید تا دانش خودتان را بسنجید.به این سوالات پاسخ دهیدسوال 1کلاس ها یک متد خاص دارند که از یک نمونه اولیه برای ساختن اشیا آن کلاس را میزبانی می کند. نام آن متد چیست؟یک سازنده (builder)یک معرفی کننده (instantiator)یک سازنده (constructor)یک طرح اولیه (blueprint) سوال 2 کدام یک از عبارات پایین درباره رابط ها و کلاس های انتزاعی صحیح نیست؟ کلاس های انتزاعی می تواند سازنده داشته باشند. رابط ها  می‌توانند سازنده داشته باشند. رابط ها و کلاس های انتزاعی می‌توانند مستقیماً نمونه سازی‌ شوند. خصوصیات انتزاعی باید با زیر کلاس های کلاس انتزاعی پیاده سازی شوند.سوال 3 کدام یک از گزینه های پایین یک اصلاح کننده دیداری کاتلین برای خصوصیات، متدها و از این قبیل نیست؟internalnosubclassprotectedprivateسوال 4کلاس داده‌ های مقابل را فرض کنید:data class Fish(val name: String, val species:String, val colors:String)کدام یک از گزینه های زیر کد صحیح برای ساختن و تخریب شی Fish نیست؟val (name1, species1, colors1) = Fish(&quot;Pat&quot;, &quot;Plecostomus&quot;, &quot;gold&quot;)val (name2, _, colors2) = Fish(&quot;Bitey&quot;, &quot;shark&quot;, &quot;gray&quot;)val (name3, species3, _) = Fish(&quot;Amy&quot;, &quot;angelfish&quot;, &quot;blue and black stripes&quot;)val (name4, species4, colors4) = Fish(&quot;Harry&quot;, &quot;halibut&quot;)سوال 5بیایید بگوییم شما یک باغ وحش پر از حیوانات دارید که همه آنها نیاز به محافظت دارند. کدام یک از گزینه های زیر بخشی از پیاده سازی محافظت نیست؟یک رابط (interface) برای انواع مختلف از غذای حیوانات.یک کلاس محافظت انتزاعی (abstract Caretaker) که می توانید از آن انواع مختلف محافظت را بسازید.یک رابط (interface) برای دادن آب تمیز به حیوانات.یک کلاس داده‌ای (data) برای  برای یک ورودی در برنامه  غذادهی.پایان درس چهار*/بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 25 Oct 2020 19:57:18 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: بیشتر یاد بگیرید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-learn-more-kwfm5fzkjczc</link>
                <description>۱۲. بیشتر یاد بگیریدمستندات کاتلیناگر اطلاعات بیشتری درباره هر بخشی از این دوره می خواهید، یا اگر مشکلی دارید، می توانید از وب سایت کاتلین برای کمک استفاده کنید. [این مستندات انگلیسی است]قراردادهای کاتلیناصطلاحات کاتلینکلاس‌ها و وراثتسازنده‌هاتوابع کارخانهخصوصیات و میدان‌هاکلاس‌های انتزاعیرابط‌هانمایندگیکلاس‌های داده‌ایبرابریتخریبتعریف اشیاکلاس‌های شمارشیکلاس‌های مهر شدهمدیریت خطاهای اختیاری با استفاده از کلاس‌های مهر شده کاتلینآموزش‌های کاتلیندر این وب سایت https://play.kotlinlang.org مثال‌ها و معما‌های کاتلین به همراه مجموعه‌ای از مستندات مرجع و همچنین یک مترجم آنلاین کد کاتلین موجود است.دوره در وب سایت Udacityبرای دیدن این دوره در وب سایت Udacity روی لینک بوت کمپ کاتلین برای برنامه نویسان کلیک کنید. [این دوره به زبان انگیسی و رایگان است]برنامه IntelliJ IDEAمستندات برای IntelliJ IDEA روی وب سایت JetBrains موجود است.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 25 Oct 2020 19:39:06 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: خلاصه</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-summary-betg2n46itee</link>
                <description>۱۱. خلاصهاین درس مفاهیم زیادی را پوشش داد. در حالیکه بسیاری از مباحث باید از زبانهای برنامه نویسی شی گرای دیگر آشنا باشد، کاتلین امکانات دیگری برای مختصر سازی و افزایش خوانایی کد اضافه می‌کند.کلاس ها و سازنده ها در کاتلین با استفاده از class یک کلاس می سازید کاتلین به طور خودکار تنظیم کننده ها (setters) و گیرنده هایی (getters) برای خصوصیات می سازد. سازنده اصلی را به طور مستقیم داخل تعریف کلاس تعریف می کنید.  برای مثال: class Aquarium(var length: Int = 100, var width: Int = 20, var height: Int = 40)اگر یک سازنده اصلی نیاز به کد اضافه داشته باشد، آن‌ را درون یک یا چند بلوک init می نویسیم.یک کلاس می تواند با استفاده از constructor یک یا چند سازنده ثانویه  بسازد، اما روش کاتلین استفاده از یک تابع کارخانه (factory function) است.تنظیم کننده‌های‌پدیداری و زیرکلاس‌هاهمه کلاس‌ها و توابع در کاتلین به صورت پیش‌فرض public هستند، اما شما می توانید از تنظیم کننده‌ها برای تغییر پدیداری به internal، یا private، یا protected استفاده کنید. برای ساختن یک زیر کلاس، کلاس والد باید به عنوان open علامت گذاری شده باشد. برای برتری دادن متدها و خصوصیات در یک زیر کلاس، متدها و خصوصیات باید با استفاده از open در کلاس والد علامت گذاری شده باشد. یک کلاس مهر شده فقط می تواند داخل فایلی که تعریف شده زیر کلاس شود. با استفاده از پیشوند sealed می توانید یک کلاس مهر شده بسازید.کلاس های داده‌ای، یگانه و شمارشی با استفاده از پیشوند data یک کلاس داده ای تعریف می‌کنید.تخریب (Destructuring) یک راه کوتاه برای اختصاص خصوصیات یک شیء داده‌ای به متغیرهای جداگانه است. ساختن یک کلاس یگانه به جای class با استفاده از object انجام می شود.با استفاده از کلاس شمارشی (enum class) یک شمارشی ایجاد کنید. کلاس های انتزاعی، رابط ها و تفویض نمایندگی کلاس های انتزاعی و رابط ها دو راه برای اشتراک رفتارهای مشترک بین کلاس ها هستند. یک کلاس انتزاعی خصوصیات و رفتار تعریف می کند، اما پیاده سازی را به زیر کلاس ها واگذار می کند. یک رابط (inteface) رفتار را تعریف می‌کند و می‌تواند پیاده‌سازی پیش فرض برای بعضی از رفتارها یا همه رفتارها ارائه کند. وقتی شما از رابط ها برای ساخت یک کلاس استفاده می کنید، عملکرد کلاس به روش کلاس‌هایی که شامل می شود قابل تعمیم است. [تفویض] نمایندگی رابط (Interface delegation) از ترکیب بندی استفاده می کند، اما همچنین نمایندگی پیاده سازی را به کلاس های رابط تفویض می کند. ترکیب کردن یک راه قدرتمند برای اضافه کردن عملکرد به یک کلاس با استفاده از نمایندگی رابط است. به طور عمومی ترکیب کردن ترجیح داده می شود، اما ارث بری از یک کلاس انتزاعی جواب بهتری برای برخی مسائل است.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 25 Oct 2020 19:29:26 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: درباره کلاس‌های‌یگانه‌، کلاس‌های شمارشی، و کلاس‌های مهر شده یاد بگیرید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-singletons-enums-sealed-classes-zx2v31hl9xbm</link>
                <description>۱۰. درباره کلاس‌های‌یگانه‌، کلاس‌های شمارشی، و کلاس‌های مهر شده یاد بگیریددر این تکلیف شما درباره کلاس‌های خاص در کاتلین خواهید آموخت از جمله: کلاسهای یگانه کلاسهای شمارشی کلاسهای مهر شدهگام  ۱: یادآوری کلاس های یگانه مثال پیشین کلاس GoldColor  را به یاد بیاورید.object GoldColor : FishColor {
   override val color = &amp;quotgold&amp;quot
}چون همه نمونه‌های GoldColor یک کار را انجام می‌دهد،  به جای class به عنوان object تعریف شد تا آن را یگانه بسازیم. فقط یک نمونه از آن می‌تواند وجود داشته باشد.گام  ۲:  یک کلاس شمارشی (enum) بسازیدکاتلین از شمارشی‌ها پشتیبانی می کند، که به شما اجازه می دهد تا چیزی را بشمارید و با استفاده از نام به آن ارجاع دهید، مثل سایر زبان ها. با استفاده از پیشوند enum یک شمردنی تعریف کنید. یک تعریف پایه شمارشی فقط به لیستی از نام ها نیاز دارد، اما شما همچنین می توانید یک یا چند میدان مرتبط با هر نام تعریف کنید.۱. در Decoration.kt یک مثال از enum را امتحان کنید.enum class Color(val rgb: Int) {
   RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF);
}شمردنی ها کمی مانند کلاسهای یگانه هستند - فقط یکی و فقط یکی از هر مقدار در شمردن وجود خواهد داشت. برای مثال فقط یک Color.RED، یک Color.GREEN و یک Color.BLUE وجود خواهد داشت. در این مثال مقدار های RGB به خصوصیت rgb اختصاص داده شده اند تا اجزا رنگی را مشخص کند. همچنین شما می توانید مقدار ترتیبی یک enum را با استفاده از خصوصیت ordinal و نام آن را با استفاده از خصوصیت name بگیرید.۲. یک مثال دیگر از کلاس شمارشی را امتحان کنید.enum class Direction(val degrees: Int) {
    NORTH(0), SOUTH(180), EAST(90), WEST(270)
}

fun main() {
    println(Direction.EAST.name)
    println(Direction.EAST.ordinal)
    println(Direction.EAST.degrees)
}⇒ EAST
2
90 گام ۳: یک کلاس مهر شده بسازیدیک کلاس مهر شده (sealed class) کلاسی است که می‌تواند زیر کلاس شود، اما فقط داخل فایلی که تعریف شده است. اگر بخواهید کلاس را در فایل دیگری زیر کلاس کنید یک خطا می گیرید. چون کلاس ها و زیر کلاس ها در یک فایل قرار دارند، کاتلین همه زیر کلاس ها را به صورت ایستا می شناسد.  در زمان کامپایل، کامپایلر همه کلاس ها و زیر کلاس ها را میبیند و می داند که این همه ی آن ها است،پس کامپایلر می‌تواند چک‌های اضافه برای شما انجام دهد.۱. در AquariumFish.kt یک نمونه از کلاس مهر شده، با تم آبزیان را امتحان کنید.sealed class Seal
class SeaLion : Seal()
class Walrus : Seal()

fun matchSeal(seal: Seal): String {
   return when(seal) {
       is Walrus -&gt; &amp;quotwalrus&amp;quot
       is SeaLion -&gt; &amp;quotsea lion&amp;quot
   }
}کلاس Seal نمی‌تواند در فایل دیگر زیر کلاس شود. اگر می خواهید انواع Seal دیگری اضافه کنید باید آنها را به همان فایل اضافه کنید. این کلاسهای مهر شده را به یک راه امن برای نمایش تعداد ثابت از انواع تبدیل می کند. برای مثال کلاسهای مهر شده برای برگرداندن موفقیت یا خطا از یک API شبکه عالی هستند.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 25 Oct 2020 19:01:05 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: یک کلاس داده‌ای بسازید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-data-class-mgpozygqtx9q</link>
                <description>۹. یک کلاس داده ای بسازیدکلاس داده‌ای مانند یک struct در سایر زبان هاست - فقط برای این وجود دارد که چند داده نگهداری کند - اما یک شیِ‌کلاس‌داده‌ای همچنان یک شی است. شی‌های کلاس داده‌ای کاتلین فواید دیگری هم دارند، مانند ابزارهایی برای چاپ و کپی کردن. در این تکلیف شما یک کلاس داده‌ای ساده می سازید و درباره پشتیبانی کاتلین از کلاس های داده ای می‌آموزید.گام ۱:   یک کلاس داده ای بسازید۱. یک بسته جدید به نام decor زیر بسته example.myapp برای نگه داشتن کد جدید بسازید. روی example.myapp در پنل Project راست کلیک کنید و مسیر File &gt; New &gt; Package را انتخاب کنید.۲. داخل بسته یک کلاس جدید به نام Decoration بسازید.package example.myapp.decor

class Decoration {
}۳.  برای ساختن یک کلاس داده ای از Decoration کلمه کلیدی data را پیشوند کلاس قرار دهید.۴. برای ارائه دادنِ داده به کلاس یک خصوصیت رشته‌ای به نام rocks به آن اضافه کنید.data class Decoration(val rocks: String) {
}۵. داخل فایل، خارج از کلاس یک تابع ()makeDecorations برای ساختن و چاپ کردن یک نمونه از Decoration با &quot;granite&quot; اضافه کنید.fun makeDecorations() {
    val decoration1 = Decoration(&amp;quotgranite&amp;quot)
    println(decoration1)
}۵. یک تابع ()main برای صدا زدن ()makeDecorations و اجرا کردن برنامه اضافه کنید. به خروجی مخصوصی که توسط کلاس داده‌ای ساخته شده توجه کنید.⇒ Decoration(rocks=granite)۶. داخل  ()makeDecorations، دو شی Decoration دیگر که هر دو تخته سنگ (slate) هستند معرفی کنید و آن‌ها را چاپ کنید.fun makeDecorations() {
    val decoration1 = Decoration(&amp;quotgranite&amp;quot)
    println(decoration1)

    val decoration2 = Decoration(&amp;quotslate&amp;quot)
    println(decoration2)

    val decoration3 = Decoration(&amp;quotslate&amp;quot)
    println(decoration3)
}۷. داخل ()makeDecorations، یک عبارت چاپ برای چاپ کردن نتیجه مقایسه decoration1 با decoration2 و یک عبارت دیگر برای مقایسه decoration3 با decoration2 اضافه کنید. از متد ()equals که توسط کلاس‌های داده ای ارائه شده است استفاده کنید.    println (decoration1.equals(decoration2))
    println (decoration3.equals(decoration2))۸. کد را اجرا کنید.⇒ Decoration(rocks=granite)
Decoration(rocks=slate)
Decoration(rocks=slate)
false
trueشما می توانستید از == برای امتحان کردن مساوی بودن d1 == d2 و d3 == d2 استفاده کنید. در کاتلین استفاده از  == روی شی‌های کلاس‌داده‌ای مانند استفاده از ()equals است. اگر نیاز دارید تا مراجعه دو متغیر به یک شی را امتحان کنید (برابری ارجاع) از عملگر === استفاده کنید. درباره مساوی بودن در کاتلین داخل مستندات بیشتر بخوانید.با اینکه آنها مانند استراکت در زبان‌های دیگر هستند به یاد داشته باشید که کلاس داده‌ای شی هستند. اختصاص دادن یک شی کلاس داده‌ای به یک متغیر دیگر ارجاع به آن شی را کپی می کند، نه محتوای آن را. برای کپی کردن محتوای کلاس داده‌ای به یک شی جدید از متد ()copy استفاده کنید.متد ()copy و ()equals، و ابزارهای دیگر کلاس داده‌ای فقط به خصوصیات تعریف شده در سازنده اصلی رجوع می‌کنند.گام ۲:  استفاده از تخریب ساختار (destructuring)برای گرفتن خصوصیات یک شی داده و اختصاص دادن آنها به متغیرها، شما می توانستید آنها را یکباره اختصاص دهید، مثل این:val rock = decoration.rock
val wood = decoration.wood
val diver = decoration.diverبه جای این، شما می توانید متغیر بسازید، یکی برای هر خصوصیت، و شیء داده را به گروهی از متغیرها اختصاص دهید. کاتلین مقدار خصوصیت را داخل هر متغیر قرار می دهد.val (rock, wood, diver) = decorationبه این تخریب ساختار (destructuring) گفته می‌شود که یک راه کوتاه کاربردی است. تعداد متغیر ها باید با تعداد خصوصیات همخوانی داشته باشد، و متغیر ها به ترتیبی که داخل کلاس تعریف شده‌اند اختصاص می‌یابند. این یک مثال کامل است که می‌توانید در Decoration.kt امتحان کنید.// Here is a data class with 3 properties.
data class Decoration2(val rocks: String, val wood: String, val diver: String){
}

fun makeDecorations() {
    val d5 = Decoration2(&amp;quotcrystal&amp;quot, &amp;quotwood&amp;quot, &amp;quotdiver&amp;quot)
    println(d5)

// Assign all properties to variables.
    val (rock, wood, diver) = d5
    println(rock)
    println(wood)
    println(diver)
}⇒ Decoration2(rocks=crystal, wood=wood, diver=diver)
crystal
wood
diverاگر به تعدادی از خصوصیات نیاز ندارید، می توانید با استفاده از _ به جای نام متغیر از آنها گذر کنید، مانند کدی که در پایین نشان داده شده است.    val (rock, _, diver) = d5بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 25 Oct 2020 18:33:03 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: استفاده از نمایندگی رابط‌</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-interface-delegation-gkgaiqxfx9x1</link>
                <description>8.  استفاده از نمایندگی رابط‌در تکلیف قبلی کلاس های انتزاعی، رابط ها و مفهوم ترکیب بندی معرفی شدند. نمایندگی رابط (Interface delegation) یک تکنیک پیشرفته است که در آن متدهای یک رابط توسط یک شی کمک‌کننده (یا نماینده) پیاده سازی می شوند، که پس از آن توسط کلاس استفاده می شود. این تکنیک زمانی می تواند کاربردی باشد که از یک رابط در مجموعه‌ای از کلاس‌های غیرمرتبط استفاده کنید:شما عملکرد رابط مورد نیاز را به یک کلاس کمک کننده جداگانه اضافه می‌کنید، و هر کدام از کلاس ها یک نمونه از کلاس کمک کننده را برای پیاده سازی عملکرد استفاده می کنند.در این مثال، شما از نمایندگی رابط برای اضافه کردن عملکرد به کلاس استفاده می‌کنید.گام ۱: یک رابط جدید بسازید۱. داخل AquariumFish.kt کلاس AquariumFish را حذف کنید.  به جای ارث بری از کلاس AquariumFish، کلاس Plecostomus و Shark برای هر کدام از کارهای ماهی ها و رنگ های‌شان رابط پیاده سازی می کنند.۲. یک رابط به نام FishColor بسازید که رنگ را به عنوان یک رشته تعریف می کند.interface FishColor {
    val color: String
}۳. کلاس Plecostomus را برای پیاده سازی دو رابط تغییر دهید، FishAction و FishColor شما نیاز دارید تا color از FishColor و ()eat از FishAction را برتری دهید.class Plecostomus: FishAction, FishColor {
    override val color = &amp;quotgold&amp;quot
    override fun eat() {
        println(&amp;quoteat algae&amp;quot)
    }
}۴. کلاس Shark را تغییر دهید تا دو رابط FishAction  و FishColor را به جای ارث بری از AquariumFish پیاده‌سازی کنند.class Shark: FishAction, FishColor {
    override val color = &amp;quotgray&amp;quot
    override fun eat() {
        println(&amp;quothunt and eat fish&amp;quot)
    }
}۵.  کد کامل شما باید مانند این باشد:package example.myapp

interface FishAction {
    fun eat()
}

interface FishColor {
    val color: String
}

class Plecostomus: FishAction, FishColor {
    override val color = &amp;quotgold&amp;quot
    override fun eat() {
        println(&amp;quoteat algae&amp;quot)
    }
}

class Shark: FishAction, FishColor {
    override val color = &amp;quotgray&amp;quot
    override fun eat() {
        println(&amp;quothunt and eat fish&amp;quot)
    }
}گام ۲: یک کلاس یگانه بسازیدپس از این، شما بخش نمایندگی را با ساختن یک کلاس کمک‌کننده که FishColor را پیاده سازی می کند خواهید ساخت. شما یک کلاس پایه به نام GoldColor می سازید که FishColor را پیاده سازی می کند - تمام کاری که انجام می دهد این است که بگوید رنگ طلایی است.ساختن نمونه های متعدد از GoldColor دلیلی ندارد، زیرا همه آنها دقیقاً یک کار را انجام می‌دهند. پس کاتلین به شما اجازه می دهد  یک کلاس تعریف کنید به گونه ای که فقط یک نمونه از آن را با استفاده از کلمه کلیدی object به جای class تعریف کنید. کاتلین آن یک نمونه را می‌سازد، و آن نمونه توسط نام کلاس ارجاع می شود. سپس همه اشیا دیگر می‌توانند از این یک نمونه استفاده کنند - هیچ راهی برای ساختن نمونه های دیگر از این کلاس وجود ندارد. اگر با الگوی کلاس های یگانه آشنا هستید این روش ساخت کلاس یگانه در کاتلین است.۱. در AquariumFish.kt یک شی برای GoldColor بسازید. رنگ را برتری دهید.object GoldColor : FishColor {
   override val color = &amp;quotgold&amp;quot
}گام ۳: یک رابط نماینده برای FishColor اضافه کنیدحالا شما آماده استفاده از نمایندگی رابط هستید.۱. در AquariumFish.kt برتری color از Plecostomus را حذف کنید.۲. کلاس Plecostomus را برای گرفتن رنگ از GoldColor تغییر دهید. این کار را با اضافه کردن by GoldColor به تعریف کلاس انجام می دهید که نمایندگی می سازد. به جای پیاده سازی FishColor از پیاده سازی ارائه شده توسط GoldColor استفاده کنید. پس هر بار به color دسترسی پیدا می کنید آن به GoldColor تفویض شده است.class Plecostomus:  FishAction, FishColor by GoldColor {
   override fun eat() {
       println(&amp;quoteat algae&amp;quot)
   }
} با کلاسی که داریم همه پلوکوها طلایی خواهند بود اما این ماهی ها در واقع رنگ های مختلفی دارند. شما می توانید با اضافه کردن یک پارامتر سازنده با رنگ پیشفرض GoldColor برای Plecostomus این را مشخص کنید.۳. کلاس Plecostomus را طوری تغییر دهید که fishColor را با سازنده‌اش بگیرد، و پیش فرض آن را GoldColor تنظیم کند. نمایندگی را از by GoldColor به by fishColor تغییر دهید.class Plecostomus(fishColor: FishColor = GoldColor):  FishAction,
       FishColor by fishColor {
   override fun eat() {
       println(&amp;quoteat algae&amp;quot)
   }
}گام ۴:  یک رابط نماینده برای FishAction اضافه کنیدبه همان روش قبل شما می‌توانید از نمایندگی رابط برای FishAction استفاده کنید.۱. در AquariumFish.kt یک کلاس PrintingFishAction بسازید که FishAction را پیاده سازی می کند، که یک رشته به نام food می‌گیرد و آنچه ماهی می‌خورد را چاپ می‌کند.class PrintingFishAction(val food: String) : FishAction {
    override fun eat() {
        println(food)
    }
}۲. در کلاس Plecostomus تابع برتری داده شده ()eat را حذف کنید، زیرا آن را با یک نمایندگی جایگزین می‌کنید.۳. در تعریف Plecostomus، به FishAction نمایندگی PrintingFishAction بدهید و &quot;eat algae&quot; را به آن  پاس دهید.۴. با این نمایندگی ها هیچ کدی داخل بدنه کلاس Plecostomus وجود ندارد، پس آکولاد {} را حذف کنید، زیرا همه سوارکردن‌ها (override) توسط نمایندگی رابط مدیریت شد.class Plecostomus (fishColor: FishColor = GoldColor):
        FishAction by PrintingFishAction(&amp;quoteat algae&amp;quot),
        FishColor by fishColorنمودار پایین کلاس های Shark و Plecostomus را نمایش می دهد اعضای آنها از رابط PrintingFishAction و FishColor تشکیل شدند اما پیاده‌سازی به آن ها تفویض شد.دو کلاس، دو رابط با نمایندگینمایندگی رابط قدرتمند است، و شما باید فکر کنید وقتی از یک تابع انتزاعی در زبان دیگر استفاده می‌کنید چگونه از آنها استفاده کنید. این به شما اجازه می‌دهد تا از ترکیب بندی برای اضافه کردن رفتارها استفاده کنید، به جای تعداد زیادی زیر کلاس که هر کدام از آنها به شیوه خاصی ساخته می‌شوند.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 25 Oct 2020 17:39:44 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار:  مقایسه کلاس‌های انتزاعی و رابط‌ها</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-abstract-class-vs-interfaces-ts5k77nvwd0p</link>
                <description>7. مقایسه کلاس‌های انتزاعی و رابط‌هاگاهی شما  نیاز دارید یک رفتار مشترک یا خصوصیت برای اشتراک گذاری بین چند کلاس مرتبط به یکدیگر تعریف کنید.  کاتلین دو راه برای انجام این کار پیشنهاد می کند، رابط ها (interfaces) و کلاس های انتزاعی (abstract classes).  در این تکلیف شما یک کلاس انتزاعی AquariumFish برای خصوصیات مشترک همه ماهی ها می سازید.  شما یک رابط به نام FishAction برای تعریف رفتار معمول همه ماهی ها تعریف می کنید.نه یک کلاس انتزاعی و نه یک رابط می توانند توسط خودشان معرفی شوند،  که یعنی شما نمی توانید اشیا از آن نوع را به طور مستقیم بسازید.کلاس های انتزاعی سازنده دارند.رابط ها نمی توانند منطق سازنده داشته باشند یا توضیح ذخیره کنند.کلاس های انتزاعی همیشه open هستند؛ شما  نیازی به علامت زدن آنها با open ندارید. خصوصیات و متدهای یک کلاس انتزاعی غیر انتزاعی هستند مگر اینکه شما به طور صریح آنها را با کلمه کلیدی abstract علامت بزنید.  این یعنی زیر کلاس ها می توانند آنطور که داده شده از آنها استفاده کنند.  اگر خصوصیات یا متدها انتزاعی باشند زیر کلاس ها باید آن را پیاده سازی کنند.گام ۱.  یک کلاس انتزاعی بسازید۱.  زیر example.myapp یک فایل جدید به نام AquariumFish.kt بسازید.۲. یک کلاس جدید به نام AquariumFish بسازید و آن را با abstract علامت بزنید.۳. یک خصوصیت String به نام color اضافه کنید و آن را با abstract علامت بزنید.package example.myapp

abstract class AquariumFish {
    abstract val color: String
}۴.  دو زیر کلاس از AquariumFish به نام های Shark و Plecostomus بسازید.۵.  چون color انتزاعی است زیر کلاس ها باید آن را  پیاده سازی کنند.  Shark را خاکستری و Plecostomus را طلایی کنید.class Shark: AquariumFish() {
    override val color = &amp;quotgray&amp;quot
}

class Plecostomus: AquariumFish() {
    override val color = &amp;quotgold&amp;quot
}۶.  در main.kt،  یک تابع ()makeFish برای امتحان کردن کلاس های تان بسازید. Shark و Plecostomus را معرفی کنید و بعد رنگ هر کدام را چاپ کنید.۷. کد امتحانی پیشین در ()main را حذف کنید و ()makeFish را صدا بزنید. کد شما باید مانند کد زیر باشد.فایل  main.kt:package example.myapp

fun makeFish() {
    val shark = Shark()
    val pleco = Plecostomus()

    println(&amp;quotShark: ${shark.color}&amp;quot)
    println(&amp;quotPlecostomus: ${pleco.color}&amp;quot)
}

fun main () {
    makeFish()
}۸.  برنامه را اجرا و خروجی را مشاهده کنید.⇒ Shark: gray 
Plecostomus: goldنمودار زیر کلاس Shark و کلاس Plecostomus را نمایش می دهد،  که از کلاس انتزاعی AquariumFish زیر کلاس شدند.یک کلاس انتزاعی و دو زیر کلاسگام ۲.  یک رابط بسازید۱.  در  AquariumFish.kt یک رابط FishAction با یک متد ()eat بسازید.interface FishAction  {
    fun eat()
}۲.  رابط FishAction را به هر کدام از زیر کلاس ها اضافه کنید، و ()eat را با چاپ کردن کاری که ماهی انجام می‌دهد پیاده سازی کنید.class Shark: AquariumFish(), FishAction {
    override val color = &amp;quotgray&amp;quot
    override fun eat() {
        println(&amp;quothunt and eat fish&amp;quot)
    }
}

class Plecostomus: AquariumFish(), FishAction {
    override val color = &amp;quotgold&amp;quot
    override fun eat() {
        println(&amp;quoteat algae&amp;quot)
    }
}۳.  در تابع ()makeFish کاری کنید که هر ماهی که ساختید با صدا زدن تابع ()eat چیزی بخورد.fun makeFish() {
    val shark = Shark()
    val pleco = Plecostomus()
    println(&amp;quotShark: ${shark.color}&amp;quot)
    shark.eat()
    println(&amp;quotPlecostomus: ${pleco.color}&amp;quot)
    pleco.eat()
}۴. برنامه را اجرا و خروجی را مشاهده کنید.⇒ Shark: gray
hunt and eat fish
Plecostomus: gold
eat algae نمودار پایین کلاس Shark و کلاس Plecostomus را نمایش می دهد، هر دوی آنها از رابط FishAction استفاده می کنند و آن را پیاده سازی می کند.دو کلاس و یک رابطچه زمانی از کلاس های انتزاعی و چه زمانی از رابط ها استفاده کنیدمثال های بالا ساده هستند، اما وقتی شما تعداد زیادی کلاسهای به هم وابسته داشته باشید کلاس های انتزاعی و رابط ها می توانند به شما کمک کنند تا طراحی تمیزتر، سازماندهی شده تر و با نگهداری آسان تر داشته باشید.همانطور که در بالا اشاره شد کلاس های انتزاعی می توانند سازنده داشته باشند، و رابط‌ها نمی‌توانند، اما به جز این بسیار شبیه هستند. پس چه زمانی باید از هرکدام از آنها استفاده کنید؟وقتی از رابط ها برای ساخت یک کلاس استفاده می کنید عملکرد کلاس توسط نمونه کلاس‌هایی که در آن قرار دارد تعمیم می یابد. ترکیب بندی برای آسان تر ساختن استفاده دوباره از کد است و از ارث بری از یک کلاس انتزاعی بهتر است. همچنین شما می توانید از رابط‌های چندگانه داخل یک کلاس استفاده کنید اما فقط می‌توانید از کلاس انتزاعی زیر کلاس بسازید.وقتی در کاتلین برنامه طراحی می‌کنید به این فکر کنید که چگونه می توانید از ترکیبات برای ساختن یک اپلیکیشن توسط بخش های سازنده کوچک استفاده کنید.ترکیب بندی معمولاً به کپسول سازی بهتر، کاهش وابستگی متقابل، رابطه‌های تمیزتر و کدهای کاربردی تر منجر می شود.  به این دلایل استفاده از ترکیب بندی با رابط ها طراحی مقدم است.  در طرف دیگر ارث بری از یک کلاس انتزاعی یک راه حل طبیعی برای برخی مسائل است.  شما باید از ترکیب بندی استفاده کنید اما وقتی ارث بری در کاتلین مفهوم دارد پس بیایید آن را هم انجام دهیم! اگر تعداد زیادی متد و یک یا دو پیاده سازی پیش فرض دارید از رابط استفاده کنید برای مثال در AquariumAction زیر:interface AquariumAction {
    fun eat()
    fun jump()
    fun clean()
    fun catchFish()
    fun swim()  {
        println(&amp;quotswim&amp;quot)
    }هرگاه نمی توانید یک کلاس را کامل کنید از یک کلاس انتزاعی استفاده کنید. برای مثال، وقتی به کلاس  AquariumFish برمی‌گردید می‌توانید کاری کنید همه AquariumFish ها FishAction را پیاده سازی کند یک پیاده سازی پیش فرض برای eat ارائه می‌دهد در حالی که color را انتزاعی می کنید زیرا واقعا رنگ پیش فرضی برای ماهی وجود ندارد.interface FishAction  {
    fun eat()
}

abstract class AquariumFish: FishAction {
   abstract val color: String
   override fun eat() = println(&amp;quotyum&amp;quot)
}بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 25 Oct 2020 16:44:08 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: درباره زیرکلاس‌ها و وراثت بیشتر یاد بگیرید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-subclasses-inhertance-klk7zlvqowcn</link>
                <description>6. درباره زیرکلاس‌ها و وراثت بیشتر یاد بگیریددر این تکلیف، یاد می‌گیرید کلاس ها و ارث بری چگونه در کاتلین کار می‌کنند. آنها مانند آنچه در سایر زبان ها دیده‌اید هستند اما تفاوت هایی دارند. در کاتلین به صورت پیش فرض کلاس ها نمی‌توانند زیر کلاس داشته باشند.  به طور مشابه خصوصیات و متغیرهای عضو نمی توانند توسط زیرکلاس ها برتر گرفته شوند (با اینکه قابل دسترسی هستند.)شما باید کلاس را به عنوان open علامت بزنید تا اجازه زیر کلاس شدن را به آن بدهید. به طور مشابه،  باید خصوصیات و متغیرهای عضو را به عنوان open علامت بزنید، تا آنها را در زیر کلاس برتری دهید.  کلمه کلیدی open لازم است، تا از نشت جزئیات پیاده سازی به عنوان بخشی از رابط کلاس جلوگیری شود. گام ۱:  کلاس آکواریوم را open کنید در این گام شما کلاس Aquarium را open می کنید تا بتوانید در قدم بعدی آن را برتری دهید. ۱.  کلاس Aquarium و همه خصوصیات آن را با کلمه کلیدی open علامت بزنید.open class Aquarium (open var length: Int = 100, open var width: Int = 20, open var height: Int
= 40) {
    open var volume: Int
        get() = width * height * length / 1000
        set(value) {
            height = (value * 1000) / (width * length)
        } ۲. یک خصوصیت shape که open باشد با مقدار &quot;rectangle&quot; اضافه کنید.   open val shape = &amp;quotrectangle&amp;quot۳.  خصوصیت water که open باشد با گیرنده هایی که ۹۰ درصد از حجم Aquarium را برمی‌گرداند اضافه کنید.    open var water: Double = 0.0
        get() = volume * 0.9۴. کد را به متد ()printSize برای چاپ کردن شکل و مقدار آب به عنوان درصدی از حجم اضافه کنید.fun printSize() {
    println(shape)
    println(&amp;quotWidth: $width cm &amp;quot +
            &amp;quotLength: $length cm &amp;quot +
            &amp;quotHeight: $height cm &amp;quot)
    // 1 l = 1000 cm^3
    println(&amp;quotVolume: $volume l Water: $water l (${water/volume*100.0}% full)&amp;quot)
} ۵. در ()buildAquarium، کد را برای ساختن یک Aquarium با طول ۲۵ عرض ۲۵ و ارتفاع ۴۰ تغییر دهید.fun buildAquarium() {
    val aquarium6 = Aquarium(length = 25, width = 25, height = 40)
    aquarium6.printSize()
}۶. برنامه را اجرا کنید و خروجی جدید را مشاهده کنید.⇒ aquarium initializing
rectangle
Width: 25 cm Length: 25 cm Height: 40 cm 
Volume: 25 l Water: 22.5 l (90.0% full)گام ۲:  یک زیر کلاس بسازید۱.  یک زیر کلاس از Aquarium با نام TowerTank بسازید، که یک مخزن استوانه ای به جای یک مخزن مستطیلی می‌سازد. شما می توانید TowerTank را زیر Aquarium اضافه کنید، زیرا می توانید یک کلاس دیگر داخل همان فایل کلاس Aquarium اضافه کنید.۲. در TowerTank ، خصوصیت ارتفاع که داخل سازنده تعریف شد را برتری بدهید.  برای برتری دادن یک خصوصیت از کلمه کلیدی override داخل زیر کلاس استفاده کنید. کلاس ها باید  پارامتر های سازنده شان را صریح تعریف کنند.۳.  یک سازنده برای TowerTank بسازید تا  diameter (قطر) را بگیرد.  مقدار قطر برای طول و عرض را زمانی استفاده کنید که سازنده را داخل سوپر کلاس Aquarium را صدا می‌زنید.class TowerTank (override var height: Int, var diameter: Int): Aquarium(height = height, width
= diameter, length = diameter) {۴.  برای محاسبه استوانه خصوصیت حجم را برتری دهید. فرمول استوانه  PI ضرب در مربع شعاع در ارتفاع است. شما باید ثابت PI را از java.lang.Math وارد کنید.     override var volume: Int
    // ellipse area = π * r1 * r2
    get() = (width/2 * length/2 * height / 1000 * PI).toInt()
    set(value) {
        height = ((value * 1000 / PI) / (width/2 * length/2)).toInt()
    }۵. در TowerTank خصوصیت water را  برتری دهید تا ۸۰ درصد حجم باشد.override var water = volume * 0.8۶.    مقدار shape را برتری دهید تا یک &quot;cylinder&quot; (استوانه) باشد.override val shape = &amp;quotcylinder&amp;quot ۷. کلاس TowerTank نهایی شما باید چیزی مثل کد پایین باشد.فایل Aquarium.kt:package example.myapp
import java.lang.Math.PI
... // existing Aquarium class
class TowerTank (override var height: Int, var diameter: Int): Aquarium(height = height, width
= diameter, length = diameter) {
    override var volume: Int
    // ellipse area = π * r1 * r2
    get() = (width/2 * length/2 * height / 1000 * PI).toInt()
    set(value) {
        height = ((value * 1000 / PI) / (width/2 * length/2)).toInt()
    }
    override var water = volume * 0.8
    override val shape = &amp;quotcylinder&amp;quot
}۸.  در ()buildAquarium،  یک TowerTank با قطر ۲۵ سانتیمتر و ارتفاع ۴۵ سانتیمتر بسازید اندازه را چاپ کنید.فایل main.kt:package example.myapp

fun buildAquarium() {
    val myAquarium = Aquarium(width = 25, length = 25, height = 40)
    myAquarium.printSize()
    val myTower = TowerTank(diameter = 25, height = 40)
    myTower.printSize()
}  ۹. برنامه را اجرا کنید و خروجی را مشاهده کنید.⇒ aquarium initializing
rectangle
Width: 25 cm Length: 25 cm Height: 40 cm 
Volume: 25 l Water: 22.5 l (90.0% full)
aquarium initializing
cylinder
Width: 25 cm Length: 25 cm Height: 40 cm 
Volume: 18 l Water: 14.4 l (80.0% full)بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sat, 24 Oct 2020 19:17:29 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: درباره اصلاح کننده‌های پدیداری یاد بگیرید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-visibility-modifiers-y4ez3npefdgd</link>
                <description>5. درباره اصلاح کننده‌های پدیداری یاد بگیریدتا به اینجا هیچ  اصلاح کننده پدیداری مانند public یا private نداشتیم. به این خاطر که همه چیز به صورت پیش فرض در کاتلین عمومی است  که یعنی همه چیز میتواند از همه جا قابل دسترس باشد از جمله کلاس‌ها، متدها، خصوصیات و متغیرهای عضو. در کاتلین کلاسها، اشیا، رابط ها، سازنده ها، توابع، خصوصیات و تنظیم کننده های آنها می‌توانند اصلاح کننده پدیداری (visibility modifiers) داشته باشند. تنظیم کننده public یعنی خارج از کلاس پدیدار باشد. همه چیز به صورت پیش‌فرض عمومی است شامل متغیرها و متدهای کلاس. تنظیم کننده internal یعنی فقط داخل آن ماژول پدیدار است. یک ماژول مجموعه‌ای از فایلهای کاتلین است که به هم کامپایل می‌شوند، برای مثال یک کتابخانه یا اپلیکیشن. تنظیم کننده private یعنی فقط داخل آن کلاس پدیدار است (یا داخل فایل منبع اگر با توابع کار می‌کنید.)تنظیم کننده protected مانند private است اما همچنین برای همه زیر کلاس‌ها پدیدار است. برای اطلاعات بیشتر مستندات اصلاح کننده پدیداری در کاتلین را مشاهده کنید.متغیر های عضوخصوصیات داخلی کلاس یا متغیر های عضو به صورت پیشفرض public هستند. اگر آنها را با var تعریف کنید، آن‌ها تغییر پذیر هستند، که یعنی خوانده می شوند و نوشته می شوند. اگر آنها را به عنوان val تعریف کنید آنها پس از مقدار دهی اولیه فقط قابل خواندن هستند.اگر یک خصوصیت میخواهید که کد شما بتواند بخواند و بنویسد اما خارج کد فقط قابل خواندن باشد می‌توانید خصوصیات و گیرنده را عمومی بگذارید و تنظیم کننده را خصوصی اعلام کنید همانطور که در پایین نشان داده شده است.var volume: Int
    get() = width * height * length / 1000
    private set(value) {
        height = (value * 1000) / (width * length)
    }بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sat, 24 Oct 2020 18:17:31 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار:  یک سازنده کلاس اضافه کنید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-class-constructors-mqmz6ykngjeh</link>
                <description>4. یک سازنده کلاس اضافه کنیددر این تکلیف، شما یک سازنده برای کلاس می‌سازید، و کار با خصوصیات را ادامه می‌دهید.گام 1: یک سازنده بسازیددر این گام، شما یک سازنده به کلاس Aquarium که در تکلیف قبل ساختید اضافه می‌کنید. در مثال‌های قبلی، هر نمونه از Aquarium با ابعاد یکسان ساخته می‌شود. شما می‌توانید ابعاد را وقتی که ساخته شد با تنظیم خصوصیات تغییر دهید، اما برای شروع راحت‌تر است که آن را با اندازه‌های صحیح بسازید.در بعضی زبان‌های برنامه نویسی، سازنده با ساختن یک متد داخل کلاس که نامی مثل نام کلاس دارد ساخته می‌شود. در کاتلین، شما سازنده را مستقیما داخل کلاس تعریف می‌کنید، پارامترها را داخل پرانتز تعریف می‌کنید اگر کلاس یک متد باشد. مانند تابع‌ها در کاتلین، پارامترها می‌توانند شامل مقدار اولیه باشد.1. در کلاس Aquarium که پیشتر ساختید، تعریف کلاس را برای قرار دادن سه پارامتر سازنده با مقادیر پیش‌فرض برای length، width، height تغییر دهید، و خصوصیات متناظر را به آن‌ها اختصاص دهید.class Aquarium(length: Int = 100, width: Int = 20, height: Int = 40) {
   // Dimensions in cm
   var length: Int = length
   var width: Int = width
   var height: Int = height
...
}2. روش کوتاه‌تر کاتلین تعریف مستقیم خصوصیات با سازنده است، با استفاده از var یا val، و کاتلین همچنین گیرنده و تنظیم کننده‌ها را به طور خودکار می‌سازد. سپس می‌توانید تعریف خصوصیت‌ها را در بدنه کلاس عوض کنید.class Aquarium(var length: Int = 100, var width: Int = 20, var height: Int = 40) {
...
}3. وقتی با استفاده از سازنده یک شی Aquarium می‌سازید، می‌توانید هیچ آرگومانی مشخص نکنید و همه مقدارهای پیش فرض را بگیرید، یا بعضی از آن‌ها، یا همه آن‌ها را مشخص کنید و یک Aquarium با اندازه‌های سفارشی بسازید. در تابع ()buildAquarium، راه‌های مختلف ساختن شی Aquarium  با استفاده از پارامتر را امتحان کنید.fun buildAquarium() {
    val aquarium1 = Aquarium()
    aquarium1.printSize()
    // default height and length
    val aquarium2 = Aquarium(width = 25)
    aquarium2.printSize()
    // default width
    val aquarium3 = Aquarium(height = 35, length = 110)
    aquarium3.printSize()
    // everything custom
    val aquarium4 = Aquarium(width = 25, height = 35, length = 110)
    aquarium4.printSize()
}4. برنامه را اجرا کنید و نتایج را مشاهده کنید.⇒ Width: 20 cm Length: 100 cm Height: 40 cm 
Width: 25 cm Length: 100 cm Height: 40 cm 
Width: 20 cm Length: 110 cm Height: 35 cm 
Width: 25 cm Length: 110 cm Height: 35 cm توجه کنید که شما نیازی به سربار کردن سازنده و نوشتن نسخه‌های متفاوت برای هر یک از موارد ندارید (به اضافه تعدادی برای دیگر ترکیبات). کاتلین چیزی که برای ساختن مقادیر پیشفرض و پارامترهای نام دار نیاز است را می‌سازد.گام 2: بلوک init اضافه کنیدنمونه سازنده‌های بالا فقط خصوصیات را اعلام می‌کنند و مقدار یک عبارت را به آن‌ها تخصیص می‌دهند. اگر سازنده شما به مقدار دهی اولیه بیشتری نیاز دارد، می‌توانید آن را در یک یا چند بلوک init قرار دهید. در این گام، شما چند بلوک init به کلاس Aquarium اضافه می‌کنید.1. در کلاس Aquarium ، یک بلوک init برای چاپ کردن آغاز شی، و یک بلوک دیگر برای چاپ مقادیر به لیتر  اضافه کنید.class Aquarium (var length: Int = 100, var width: Int = 20, var height: Int = 40) {
    init {
        println(&amp;quotaquarium initializing&amp;quot)
    }
    init {
        // 1 liter = 1000 cm^3
        println(&amp;quotVolume: ${width * length * height / 1000} l&amp;quot)
    }
}2. برنامه را اجرا کنید و نتایج را ببینید.aquarium initializing
Volume: 80 l
Width: 20 cm Length: 100 cm Height: 40 cm 
aquarium initializing
Volume: 100 l
Width: 25 cm Length: 100 cm Height: 40 cm 
aquarium initializing
Volume: 77 l
Width: 20 cm Length: 110 cm Height: 35 cm 
aquarium initializing
Volume: 96 l
Width: 25 cm Length: 110 cm Height: 35 cm توجه کنید که بلوک های init به ترتیبی که در تعریف کلاس ظاهر می‌شوند اجرا خواهند شد، و همه آن‌ها وقتی اجرا می‌شوند که سازنده صدا زده شود.پارامترهای سازنده اولیه می‌توانند در بلوک های آغاز کننده استفاده شوند. هر خصوصیت که در بلوک های سازنده استفاده شود باید از قبل تعریف شود.گام 3: در مورد سازنده‌های فرعی (secondary constructors) بیاموزیددر این گام، شما درباره سازنده های فرعی می‌آموزید و یکی از آن‌ها را به کلاس اضافه می‌کنید. علاوه بر سازنده‌های اصلی، که یک یا چند بلوک init دارند، یک کلاس کاتلین همچنین می‌تواند یک یا چند سازنده فرعی  برای سربار کردن سازنده داشته باشد که سازنده‌هایی با آرگومان‌های متفاوت هستند.شیوه کدنویسی کاتلین می‌گوید هر کلاس باید یک سازنده داشته باشد، با استفاده از مقادیر پیش فرض و پارامترهای نام دار. زیر استفاده از چند سازنده به مسیرهای کدی بیشتر منجر می‌شود، و امکان اینکه یک یا چند مسیر امتحان نشده باقی بماند را بیشتر می‌کند. پیش از نوشتن سازنده فرعی، فکر کنید آیا یک تابع کارخانه به جای آن کار می‌کند یا نه، تا تعریف کلاس را تمیز نگه‌دارید.هر سازنده ثانویه باید سازنده اولیه را صدا بزند، یا با استفاده از ()this یا به صورت غیر مستقیم به وسیله یک سازنده فرعی. این یعنی هر بلوک init که داخل سازنده اولیه باشد برای همه سازنده ها صدا زده می‌شوند، و همه کد داخل سازنده اولیه در ابتدا اجرا می‌شود.1. در کلاس Aquarium، یک سازنده فرعی (ثانویه) تعداد ماهی را به عنوان آرگومان می‌گیرد، با استفاده از کلمه کلیدی constructor. یک خصوصیت val به نام tank برای حجم محاسبه شده آکواریوم به لیتر بر اساس تعداد ماهی بسازید. 2 لیتر آب را برای هر ماهی در نظر بگیرید، به اضافه یک فضای اضافه تا آب به بیرون نریزد.constructor(numberOfFish: Int) : this() {
    // 2,000 cm^3 per fish + extra room so water doesn&#039;t spill
    val tank = numberOfFish * 2000 * 1.1
}2. داخل سازنده فرعی، طول و عرض(که در سازنده اولیه تعریف شدند) را مانند قبل نگه دارید، و ارتفاع لازم برای ساختن حجم داده شده را محاسبه کنید.    // calculate the height needed
    height = (tank / (length * width)).toInt()3. داخل تابع ()buildAquarium، برای ساختن Aquarium با استفاده از سازنده فرعی یک فراخوانی بسازید. اندازه و حجم را چاپ کنید. fun buildAquarium() {
    val aquarium6 = Aquarium(numberOfFish = 29)
    aquarium6.printSize()
    println(&amp;quotVolume: ${aquarium6.width * aquarium6.length * aquarium6.height / 1000} l&amp;quot)
}4. برنامه را اجرا کنید و نتایج را مشاهده کنید.⇒ aquarium initializing
Volume: 80 l
Width: 20 cm Length: 100 cm Height: 31 cm 
Volume: 62 lتوجه کنید که حجم دو بار چاپ شد، یکبار توسط بلوک init در سازنده اصلی پیش از اجرای سازنده فرعی، و یک  بار توسط کد داخل ()buildAquarium.شما کلمه کلیدی constructor را داخل سازنده اولیه هم قرار دادید، اما در بیشتر موارد این الزامی نیست.گام 4: یک خصوصیت گیرنده اضافه کنیددر این گام، شما یک گیرنده صریح خصوصیت اضافه می‌کنید. کاتلین وقتی خصوصیات را تعریف کنید به طور خودکار گیرنده ها و تنظیم کننده ها را تعریف می‌کند، اما بعضی وقت ها مقدار یک خصوصیت نیاز به محاسبه شدن یا تنظیم شدن دارد. برای مثال، در بالا شما حجم Aquarium را چاپ کردید. شما می‌توانید حجم را با تعریف کردن یک متغیر و یک گیرنده برای آن به عنوان خصوصیت بسازید. زیرا volume باید محاسبه شود، گیرنده نیاز دارد مقدار محاسبه شده را برگرداند، که شما آن را با یک تابع تک خطی انجام می‌دهید.1. در کلاس Aquarium، یک خصوصیت volume از نوع Int تعریف کنید، و یک متد ()get که حجم را در خط بعدی محاسبه می‌کند تعریف کنید.val volume: Int
    get() = width * height * length / 1000       // 1000 cm^3 = 1 l2. بلوک init چاپ کننده حجم را بردارید.3. کد داخل ()buildAquarium که حجم را چاپ می‌کند بردارید.4. در متد ()printSize، یک خط برای چاپ کردن حجم اضافه کنید.fun printSize() {
    println(&amp;quotWidth: $width cm &amp;quot +
            &amp;quotLength: $length cm &amp;quot +
            &amp;quotHeight: $height cm &amp;quot
    )
    // 1 l = 1000 cm^3
    println(&amp;quotVolume: $volume l&amp;quot)
}5. برنامه را اجرا کنید و نتایج را مشاهده کنید.⇒ aquarium initializing
Width: 20 cm Length: 100 cm Height: 31 cm 
Volume: 62 lابعاد و حجم مانند قبل هستند، اما حجم فقط یکبار بعد از آغاز کامل شی توسط سازنده اصلی و فرعی چاپ می‌شود.گام 5: یک خصوصیت تنظیم کننده اضافه کنیددر این گام، شما یک خصوصیت تنظیم کننده (setter) برای حجم می‌سازید.1. در کلاس Aquarium، نوع volume را به var تغییر دهید تا بتواند بیش از یکبار تنظیم شود.2. با اضافه کردن یک متد ()set پایین گیرنده، یک تنظیم کننده برای خصوصیت volume اضافه کنید، که ارتفاع را دوباره بر اساس مقدار آب محاسبه می‌کند. طبق قراداد، نام پارامتر تنظیم کننده value است، اما شما می‌توانید به دلخواه آن را تغییر دهید.var volume: Int
    get() = width * height * length / 1000
    set(value) {
        height = (value * 1000) / (width * length)
    }3. در ()buildAquarium، یک کد برای تنظیم حجم آکواریوم به 70 لیتر اضافه کنید. اندازه جدید را چاپ کنید.fun buildAquarium() {
    val aquarium6 = Aquarium(numberOfFish = 29)
    aquarium6.printSize()
    aquarium6.volume = 70
    aquarium6.printSize()
}4. برنامه را اجرا کنید و ارتفاع و حجم تبدیل شده را مشاهده کنید.⇒ aquarium initialized
Width: 20 cm Length: 100 cm Height: 31 cm 
Volume: 62 l
Width: 20 cm Length: 100 cm Height: 35 cm 
Volume: 70 lبخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Tue, 20 Oct 2020 20:23:57 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: یک کلاس بسازید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-create-class-zsdtbehmwjmi</link>
                <description>3. یک کلاس بسازیددر این تکلیف، شما یک بسته جدید، یک کلاس با چند خصوصیت و یک متد می‌سازید.گام 1: یک بسته بسازیدبسته‌ها می‌توانند در سازمان دادن به کد ها به شما کمک کنند. 1. در پنل Project، زیر پروژه Hello Kotlin، روی پوشه src راست کلیک کنید.2. مسیر New &gt; Package را انتخاب کنید و نام بسته را example.myapp بگذارید.گام 2: یک کلاس همراه خصوصیات بسازیدکلاس‌ها با کلمه کلیدی class ساخته می‌شوند، و نام کلاس طبق قرارداد با حرف بزرگ شروع می‌شود.1. روی بسته  example.myapp راست کلیک کنید.2. مسیر New &gt; Kotlin File / Class را انتخاب کنید.3. زیر Kind، گزینه Class را انتخاب کنید، و نام کلاس را Aquarium بگذارید. برنامه IntelliJ IDEA نام بسته را داخل فایل قرار می‌دهد و یک کلاس خالی Aquarium برای شما می‌سازد.4. داخل کلاس Aquarium، خصوصیات var برای طول، عرض و ارتفاع (به سانتی متر) تعریف و مقدار دهی اولیه کنید.خصوصیات را با مقدار پیش‌فرض مقدار دهی کنید.package example.myapp

class Aquarium {
    var width: Int = 20
    var height: Int = 40
    var length: Int = 100
}در زیر پوسته، کاتلین به طور اتوماتیک گیرنده ها (getter) و تنظیم کننده هایی (setters)  برای خصوصیاتی که در کلاس Aquarium تعریف کردید می‌سازد، تا شما بتوانید مستقیما به خصوصیات دسترسی داشته باشید، برای مثال، myAquarium.length.اگر این خصوصیات را به جای var با val ساختید، خصوصیات تغییر پذیر خواهند بود. می‌توانستید یکبار آن‌ها را تنظیم کنید، تا همه نمونه‌های Aquarium ابعاد یکسانی خواهند داشته باشند.همچنین توجه کنید که IntelliJ IDEA زیر نام هر var در کد شما خط می‌کشد، اما نه برای val. شیوه کدنویسی کاتلین جایی که امکان دارد داده تغییر پذیر را ترجیح می‌دهد، پس IntelliJ IDEA توجه شما را به داده تغییر پذیر جلب می‌کند تا استفاده از آن را کاهش دهید.گام 3: یک تابع ()main بسازیدیک فایل جدید به نام main.kt برای نگه‌داشتن تابع ()main بسازید.1. در پنل Project در طرف چپ، روی بسته example.package راست کلیک کنید.2. مسیر  New &gt; Kotlin File / Class را انتخاب کنید.3. زیر لیست کشویی Kind، تنظیم File را نگه‌دارید، و نام فایل را main.kt بگذارید. IntelliJ IDEA نام بسته را  در فایل قرار می‌دهد، اما کلاس را تعیین نمی‌کند.4. یک تابع ()buildAquarium تعریف کنید و داخل آن یک نمونه از Aquarium بسازید. برای ساختن یک نمونه، کلاس را مانند یک تابع ()Aquarium ارجاع دهید. این سازنده (constructor) کلاس را صدا می‌زند و یک نمونه از کلاس Aquarium می‌سازد، مثل کاری که استفاده از new در سایر زبان‌ها انجام می‌دهد.5. یک تابع ()main تعریف کنید و ()buildAquarium را صدا بزنید.package example.myapp

fun buildAquarium() {
    val myAquarium = Aquarium()
}

fun main() {
    buildAquarium()
}گام 4: یک متد اضافه کنید1. در کلاس Aquarium، یک متد برای چاپ کردن خصوصیات ابعاد آکواریوم اضافه کنید.   fun printSize() {
        println(&amp;quotWidth: $width cm &amp;quot +
                &amp;quotLength: $length cm &amp;quot +
                &amp;quotHeight: $height cm &amp;quot)
    }2. در main.kt، داخل ()buildAquarium، متد ()printSize را روی myAquarium صدا بزنید.fun buildAquarium() {
    val myAquarium = Aquarium()
    myAquarium.printSize()
}3. برنامه را با کلیک کردن روی مثلث سبز کنار تابع ()main اجرا کنید. نتیجه را مشاهده کنید.⇒ Width: 20 cm Length: 100 cm Height: 40 cm 4. در ()buildAquarium، برای تنظیم ارتفاع به 60 و چاپ کردن خصوصیات کد اضافه کنید.fun buildAquarium() {
    val myAquarium = Aquarium()
    myAquarium.printSize()
    myAquarium.height = 60
    myAquarium.printSize()
}5. برنامه را اجرا کنید و خروجی را مشاهده کنید.⇒ Width: 20 cm Length: 100 cm Height: 40 cm 
Width: 20 cm Length: 100 cm Height: 60 cm بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Tue, 20 Oct 2020 18:58:01 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: واژه‌ شناسی</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-terminology-ud6lanwkuntr</link>
                <description>2. واژه شناسیمقررات برنامه نویسی زیر باید پیش از این برای شما آشنا باشند:کلاس‌ها نقشه هایی برای شی‌ها (objects) هستند. برای نمونه؛ یک کلاس Aquarium یک طرح برای ساخت یک شی آکواریوم است.اشیا نمونه‎ای از تابع هستند؛ یک شی آکواریوم در واقع یک کلاس Aquarium است.خصوصیات مشخصات کلاس‌ها هستند، شامل طول، عرض، و ارتفاع یک Aquarium.متدها، که توابع عضو خوانده می‌شوند، عملکرد کلاس هستند. متدها (شیوه) کاری هستند که می‌توانید با شی انجام دهید. برای مثال، شما می‌توانید یک شی Aquarium را ()fillWithWater کنید.یک رابط (interface) مشخصاتی است که یک کلاس می‌تواند اجرا کند. برای  نمونه، پاک کردن برای اشیا معمول است و همچنین برای آکواریوم‌ها، و معمولا پاک کردن برای اشیا مختلف به روش‌های مشابه انجام می‌شود. پس می‌توانید یک رابط به نام clean داشته باشید که یک متد ()clean تعریف می‌کند. کلاس Aquarium می‌تواند یک رابط Clean برای تمیز کردن آکواریوم با یک اسفنج نرم داشته باشد.بسته‌ها (Packages) یک راه برای گروه بندی کردن و مرتب کردن کد و ساختن کتابخانه کد هستند. وقتی یک بسته ساخته شد، شما می‌توانید محتوای بسته را به فایلی دیگر وارد (import) کنید و از کد و کلاس‌های آن استفاده کنید.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Tue, 20 Oct 2020 03:30:12 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس چهار: خوش آمدید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-four-welcome-kuykmakpmp1x</link>
                <description>1.خوش آمدیدمواد این درس شامل آزمایشگاه کد (کد‌لب) با تکالیف پیشنهادی است.شما بیشترین بهره را از این دوره می‌برید اگر درس‌ها را به ترتیب کار کنید، اما این الزامی نیست. بر اساس دانش‌خودتان، شما می‌توانید بعضی بخش ها را مختصر بخوانید.بوت کمپ آنلاین آموزش زبان Kotlin برای برنامه نویسان اندروید دوره گوگل معرفی‌نامهدر این آزمایشگاه کد، شما یک برنامه کاتلین می‌سازید و درباره کلاس‌ها و اشیا در کاتلین می‌آموزید. به جای ساختن یک اپلیکیشن نمونه، درس‌های این دوره برای ساختن دانش شما طراحی شده، اما درس‌ها نیمه مستقل از یکدیگر است تا بتوانید از بخش‌های آشنا عبور کنید. برای متصل کردن درس‌ها، بیشتر مثال‌ها از یک تم آکواریوم استفاده می‌کند، برای دیدن داستان کامل آکواریوم، دوره بوت کمپ کاتلین برای برنامه نویسان روی وب سایت Udacity را چک کنید.آکواریوم کاتلین و آندروید آنچه باید پیش از شروع بدانیداصول اولیه کاتلین، از جمله نوع‌ها، عملگرها، و حلقه‌هانحو تابع در کاتلیناصول اولیه برنامه نویسی شی گرااصول اولیه یک IDE از جمله IntelliJ IDEA یا Android Studioچه چیزی یاد می‌گیرید؟چگونه در کاتلین کلاس بسازید و به خواص (properties) دسترسی پیدا کنید چگونه سازنده (constructors) کلاس بسازید و از آن استفاده کنیدچگونه یک زیرکلاس بسازید، و ارث بری چطور کار می‌کنددرباره کلاس‌های انتزاعی، رابط‌ها (interfaces) ، و اختیارات رابط‌ها یاد می‌گیریدچگونه کلاس‌داده بسازید و از آن استفاده کنیدچگونه از کلاس‌های singleton ، enum، و کلاس‌های مهرشده استفاده کنیدچه کاری انجام می‌دهید؟یک کلاس با خواص می‎‌سازیدیک سازنده برای کلاس می‌سازیدیک زیرکلاس می‌سازیدنمونه‌هایی از کلاس‌های انتزاعی و رابط‌ها را امتحان می‌کنیدیک کلاس‌داده ساده می‌سازیددرباره singleton، enum، و کلاس‌های مهرشده می‌آموزیدبخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Mon, 19 Oct 2020 21:06:31 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس سه: تکلیف</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-three-homework-t3q80uzz9wrk</link>
                <description>10. تکلیفبه این سوالات پاسخ دهید تا دانش خودتان را بسنجید.به این سوالات پاسخ دهیدسوال 1تابع زیر مقدار true برمی‌گرداند اگر عنصر، داخل رشته‌ای که روی آن صدا زده شده موجود باشد. خروجی کد کدام است؟contains(element: String)val decorations = listOf (&amp;quotrock&amp;quot, &amp;quotpagoda&amp;quot, &amp;quotplastic plant&amp;quot, &amp;quotalligator&amp;quot, &amp;quotflowerpot&amp;quot)
println(decorations.filter {it.contains(&#039;p&#039;)})[pagoda, plastic, plant][pagoda, plastic plant][pagoda, plastic plant, flowerpot][rock, alligator]سوال 2در تابع زیر، کدام پارامتر لازم است؟fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = 20, 
numDecorations: Int = 0): Boolean {...}numDecorationsdirtydaytemperatureسوال 3چگونه تابع اول را به تابع دوم واگذار می‌کنید؟increaseDirty( start: Int ) = start + 1updateDirty(dirty: Int, operation: (Int) -&gt; Int)updateDirty(15, &amp;increaseDirty())updateDirty(15, increaseDirty())updateDirty(15, (&quot;increaseDirty()&quot;))updateDirty(15, ::increaseDirty)پایان درس سه*/بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 18 Oct 2020 18:39:50 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس سه: بیشتر یاد بگیرید</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-three-learn-more-iyshjzjhe8h0</link>
                <description>9. بیشتر یاد بگیریدمستندات کاتلیناگر اطلاعات بیشتری درباره هر بخشی از این دوره می خواهید، یا اگر مشکلی دارید، می توانید از وب سایت کاتلین برای کمک استفاده کنید. [این مستندات انگلیسی است]قراردادهای کاتلیناصطلاحات کاتلینقالب‌های رشتهعبارت whenتابع‌های تک عبارتیتوابع مرتبه بالا و لامبداهافیلترهادنباله‌هانحو خواندن آخرین پارامترآموزش‌های کاتلیندر این وب سایت https://play.kotlinlang.org مثال‌ها و معما‌های کاتلین به همراه مجموعه‌ای از مستندات مرجع و همچنین یک مترجم آنلاین کد کاتلین موجود است.دوره در وب سایت Udacityبرای دیدن این دوره در وب سایت Udacity روی لینک بوت کمپ کاتلین برای برنامه نویسان کلیک کنید. [این دوره به زبان انگیسی و رایگان است]برنامه IntelliJ IDEAمستندات برای IntelliJ IDEA روی وب سایت JetBrains موجود است.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 18 Oct 2020 18:28:04 +0330</pubDate>
            </item>
                    <item>
                <title>بوت کمپ Kotlin برای برنامه نویسان اندروید درس سه: خلاصه</title>
                <link>https://virgool.io/@iqson/kotlin-bootcamp-for-android-programmers-google-lesson-three-summary-zh7vgoclpyad</link>
                <description>8. خلاصهبرای ساختن یک فایل منبع کاتلین در IntelliJ IDEA، با یک پروژه کاتلین (Kotlin Project) شروع کنید.برای کامپایل و اجرای یک برنامه در IntelliJ IDEA، روی مثلث سبز کنار تابع ()main کلیک کنید. خروجی در پنجره گزارشات (log) نمایش داده ‌می‌شود.در IntelliJ IDEA، آرگومان‌های مسیر کنترل برای واگذار کردن به ()main را از مسیر Run &gt; Edit Configurations مشخص کنید.تقریبا همه چیز در کاتلین مقدار دارد. شما می‌توانید با استفاده از مقدار یک if یا when به عنوان یک عبارت یا مقدار بازگشتی کد خودتان را مختصر کنید.آرگومان‌های پیش‌فرض نیاز به نسخه‌های مختلف از تابع و متد را از بین می‌برد. برای مثال:fun swim(speed: String = &amp;quotfast&amp;quot) { ... }توابع فشرده، یا توابع تک عبارتی، کد شما را خوانا تر می‌کند. برای مثال:fun isTooHot(temperature: Int) = temperature &gt; 30شما برخی از پایه‌های فیلترهایی که از لامبدا استفاده می‌کنند را آموختید. برای مثال:val beginsWithP = decorations.filter { it [0] == &#039;p&#039; }یک عبارت لامبدا، عبارتی است که می‌تواند یک تابع بی‌نام بسازد. عبارات لامبدا بین آکولاد {} تعریف می‌شوند.در توابع مرتبه بالا، شما یک تابع مثل یک عبارت لامبدا را به عنوان داده به تابع دیگر واگذار می‌کنید. برای مثال: dirtyLevel = updateDirty(dirtyLevel) { dirtyLevel -&gt; dirtyLevel + 23}در این درس مطالب مهمه درباره لامبداها وجود دارد، به خصوص اگر تازه با لامبدا آشنا شدید. در درس‌های بعدی دوباره لامبداها و توابع مرتبه بالا را می‌بینیم.شاید متوجه شده باشید در کاتلین، مثل سایر زبان‌ها بیشتر از یک راه صحیح برای انجام کارها وجود دارد. فشرده ساختن کد گاهی به خوانایی و حتی قدرت آن کمک می‌کند و گاهی نه. وقتی بیشتر در مورد کاتلین بیاموزید، شاید راه‌های آسان‌تر و مختصرتر برای انجام کارها پیدا کنید.بخش قبل | فهرست درس | بخش بعد</description>
                <category>امـیـــــرحســـــین آریا</category>
                <author>امـیـــــرحســـــین آریا</author>
                <pubDate>Sun, 18 Oct 2020 18:17:56 +0330</pubDate>
            </item>
            </channel>
</rss>