<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های رضا عبدالملکی</title>
        <link>https://virgool.io/feed/@reza_abdolmaleki</link>
        <description>Develope Apple Devices APP by Swift</description>
        <language>fa</language>
        <pubDate>2026-06-16 19:57:31</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/695683/avatar/hzWfGe.jpeg?height=120&amp;width=120</url>
            <title>رضا عبدالملکی</title>
            <link>https://virgool.io/@reza_abdolmaleki</link>
        </image>

                    <item>
                <title>همه چیز درباره ی Common Language Infrastructure CLI</title>
                <link>https://virgool.io/@reza_abdolmaleki/%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%DB%8C-common-language-infrastructure-cli-dh26hegtlqpb</link>
                <description>زیرساخت زبان مشترک (Common Language Infrastructure CLI)سی‌شارپ یک زبان برنامه‌نویسی شی گرا است. این زبان به‌طور اساسی یک استاندارد است که مشخص می‌کند چه چیزی به‌عنوان نحو معتبر شناخته می‌شود. به‌تنهایی، سی‌شارپ کاربرد کمی دارد زیرا برای کامپایل و اجرای برنامه‌ها به زیرساخت زبان مشترک (CLI) وابسته است. CLI نیز به‌نوبه خود استانداردی است که مشخصات زیر را تعریف می‌کند:Virtual Execution System (VES) :‌ سیستم اجرای مجازیCommon Intermediate Language (CIL) : زبان میانی مشترکCommon Type System (CTS) : سیستم نوع مشترکCommon Language Specification (CLS) : مشخصات زبان مشترکFramework : چارچوب زبان میانی مشترک (CIL)خب، تصور کن که وقتی برنامه‌نویس‌ها با زبان‌های مختلف مثل سی‌شارپ یا پایتون برنامه‌نویسی می‌کنند، در واقع دارند یک داستان به زبان خاصی می‌نویسند. حالا برای اینکه کامپیوتر بتواند این داستان را بفهمد و اجرا کند، باید به زبانی تبدیل شود که کامپیوترها می‌توانند بخوانند.در زبان‌هایی مثل C و ++C ، این داستان مستقیماً به زبان کامپیوتر تبدیل می‌شود، که به آن کد ماشین می‌گویند. اما در سی‌شارپ، داستان به یک زبان واسطه به نام زبان میانی مشترک (CIL) تبدیل می‌شود. این زبان واسطه مثل یک زبان جهانی است که همه کامپیوترها می‌توانند آن را بفهمند، به شرطی که یک مترجم خاص به نام سیستم اجرای مجازی (VES) داشته باشند.حالا چرا به آن “مشترک” می‌گویند؟ چون این زبان واسطه فقط برای سی‌شارپ نیست و زبان‌های دیگری هم می‌توانند داستان‌های خود را به این زبان تبدیل کنند. این یعنی برنامه‌هایی که با زبان‌های مختلف نوشته شده‌اند، می‌توانند با هم در یک برنامه کار کنند. مثل این است که هر نویسنده‌ای با هر زبانی می‌تواند داستانش را به این زبان جهانی ترجمه کند و همه بتوانند آن را بخوانند. سیستم اجرای مجازی (Virtual Execution System VES)وقتی یک برنامه‌نویس با زبان سی‌شارپ برنامه‌ای می‌نویسد، این برنامه به یک زبان واسطه‌ای به نام CIL تبدیل می‌شود. حالا برای اینکه این برنامه روی کامپیوتر اجرا شود، به یک محیط خاص نیاز داریم که به آن سیستم اجرای مجازی یا VES می‌گویند.VES مثل یک مترجم زنده است که وقتی برنامه اجرا می‌شود، بلافاصله کد CIL را به زبانی که کامپیوتر می‌فهمد (کد ماشین) تبدیل می‌کند. این فرآیند را “کامپایل در لحظه” یا JIT می‌نامند. VES همچنین مثل یک مدیر عمل می‌کند و مراقب است که برنامه به درستی اجرا شود، مثلاً مطمئن می‌شود که برنامه حافظه را درست استفاده کند و کارهایی که نباید انجام دهد، انجام ندهد.وقتی برنامه اجرا می‌شود، VES به آن کمک می‌کند که به‌طور ایمن و کارآمد کار کند. به همین دلیل، به این برنامه‌ها “کد مدیریت‌شده” می‌گویند.گاهی اوقات ممکن است این ترجمه زنده (JIT) باعث شود که برنامه کمی دیرتر شروع به کار کند. برای حل این مشکل، می‌توانیم از یک روش دیگر به نام NGen استفاده کنیم که قبل از اجرای برنامه، کد را به زبان ماشین تبدیل می‌کند. این کار معمولاً زمانی انجام می‌شود که برنامه روی کامپیوتر نصب می‌شود، تا وقتی برنامه اجرا می‌شود، سریع‌تر شروع به کار کند. سیستم نوع مشترک (CTS Common Type System) و  مشخصات زبان مشترک (CLS Common Language Specification)برنامه‌نویس‌ها با زبان‌های مختلفی مثل سی‌شارپ و ویژوال بیسیک برنامه می‌نویسند، درست مثل اینکه آدم‌ها با زبان‌های مختلفی مثل فارسی و انگلیسی صحبت می‌کنند. حالا اگر این برنامه‌ها بخواهند با هم کار کنند، باید یک راهی باشد که همه آنها بتوانند همدیگر را بفهمند.سیستم نوع مشترک (CTS) مثل یک قانون یا استاندارد است که به همه این زبان‌های برنامه‌نویسی می‌گوید که چطور داده‌ها و اطلاعات را در حافظه کامپیوتر ذخیره کنند. این کار باعث می‌شود که وقتی برنامه‌ای با یک زبان نوشته شده و برنامه دیگری با زبان دیگری، بتوانند با هم کار کنند و مشکلی پیش نیاید.حالا مشخصات زبان مشترک (CLS) مثل یک بخش خاص از این قوانین است که هدفش این است که کتابخانه‌ها یا مجموعه‌هایی از کدها را بسازد که بتوانند با همدیگر کار کنند. یعنی برنامه‌نویس‌ها می‌توانند کدهایی بنویسند که با کدهای نوشته‌شده به زبان‌های دیگر همخوانی داشته باشد و همه با هم کار کنند، مثل اینکه آدم‌ها بتوانند با هم صحبت کنند حتی اگر زبان‌های مختلفی داشته باشند. Framework (کتابخانه کلاس پایه و کتابخانه کلاس چارچوب)CLI مجموعه‌ای از کلاس‌های پایه را مشخص می‌کند که باید برای اجرای کد CLI در دسترس باشند، که به‌عنوان کتابخانه کلاس پایه (BCL) شناخته می‌شود. BCL شامل رابط‌های برنامه‌نویسی کاربردی (API) است که به اجرای کد CIL اجازه می‌دهد تا با محیط زمان اجرا و سیستم‌عامل زیرین تعامل داشته باشد. فراتر از اصول اولیه، کتابخانه کلاس چارچوب .NET نیز وجود دارد. این کتابخانه مایکروسافت شامل API هایی برای ایجاد رابط‌های کاربری گرافیکی، برنامه‌های پایگاه داده، دسترسی به وب و موارد دیگر است. خلاصهخب، فرض کن که زیرساخت زبان مشترک یا CLI مثل یک زمین بازی بزرگ است که همه برنامه‌نویس‌ها می‌توانند در آن بازی کنند و برنامه‌هایشان را اجرا کنند. این زمین بازی به طور خاص برای زبان سی‌شارپ طراحی شده، اما زبان‌های دیگر هم می‌توانند در آن بازی کنند.در این زمین بازی، چند چیز مهم وجود دارد:Common Intermediate Language) CIL): این مثل یک زبان جهانی است که همه برنامه‌ها به آن ترجمه می‌شوند تا کامپیوترها بتوانند آنها را بفهمند.Virtual Execution System) VES): این مثل یک دستگاه جادویی است که کدهای برنامه را می‌گیرد و آنها را به زبان کامپیوتر تبدیل می‌کند تا اجرا شوند.Common Type System) CTS): این مثل قوانینی است که به همه برنامه‌نویس‌ها می‌گوید چطور اطلاعاتشان را ذخیره کنند تا برنامه‌های مختلف بتوانند با هم کار کنند.Common Language Specification) CLS): این هم مثل یک مجموعه قوانین خاص است که به برنامه‌نویس‌ها کمک می‌کند تا کدهایی بنویسند که با کدهای زبان‌های دیگر همخوانی داشته باشد.CLI کمک می‌کند تا برنامه‌هایی که با زبان‌های مختلف نوشته شده‌اند، بتوانند با هم کار کنند. همچنین، یک مجموعه از ابزارها و کدهای آماده به نام کتابخانه کلاس Dot NET Framework وجود دارد که به برنامه‌نویس‌ها کمک می‌کند تا برنامه‌های مختلفی مثل بازی‌ها، برنامه‌های اینترنتی و غیره را راحت‌تر بسازند. این ابزارها شامل چیزهایی مثل کار با فایل‌ها، شبکه، پایگاه‌های داده و طراحی ظاهر برنامه‌ها می‌شوند.</description>
                <category>رضا عبدالملکی</category>
                <author>رضا عبدالملکی</author>
                <pubDate>Sat, 02 Nov 2024 11:16:12 +0330</pubDate>
            </item>
                    <item>
                <title>Error Handeling در زبان برنامه نویسی سوییفت</title>
                <link>https://virgool.io/@reza_abdolmaleki/error-handeling-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B3%D9%88%DB%8C%DB%8C%D9%81%D8%AA-il8oogl0aky0</link>
                <description>Handling  یا مدیریت خطا در زبان برنامه‌نویسی Swift یک روش است که برنامه نویسان می‌توانند با استفاده از آن، خطاها و استثناهایی که در هنگام اجرای برنامه رخ می‌دهند را شناسایی و کنترل کنند. این روش به شما امکان می‌دهد برنامه خود را به صورت یکپارچه و قابل پیش‌بینی طراحی کنید و از اتفاقات غیرمنتظره جلوگیری کنید.یکی از روش‌های مدیریت خطا در Swift استفاده از نوع داده Error است. شما می‌توانید خطاهای خود را تعریف کنید و با استفاده از آنها بتوانید از خطاها پیام‌های خاصی را برای کاربران یا سیستم ارسال کنید.نوع داده ی ERROR دقیقا چیه ؟‌در Swift، نوع داده Error یک پروتکل هست که برای نمایش خطاها و استثناها استفاده می‌شه. این پروتکل در اساس یک پروتکل تمام‌عیار (protocol-oriented) است (مطالعه Protocol ها) و تعیین می‌کنه که نوع داده‌ای که به عنوان یک خطا یا استثنا استفاده می‌شود باید چه ویژگی‌ها و عملکردها را داشته باشه.پروتکل Error تعریف شده در Swift فقط یک توالی خالی از متدها و پراپرتی ها هست. به این معنی که هیچ پراپرتی یا متد اجباری برای این پروتکل تعریف نشده است. این به برنامه‌نویس امکان می‌دهد تا خطاهای خود را با دقت و توجه به نیازهای خاص خود تعریف کند.وقتی یک نوع داده، مثل یک enum یا یک ساختار (struct)، از پروتکل Error پیروی کند، به آن خطا،  قابل شناسایی یا (throwable) می‌گوییم. به عبارت دیگر، می‌توانید یک نوع داده خاص را به عنوان Error Type در نظر بگیرید و آن را در صورت لزوم throw (پرتاب) کنید تا از طریق مکانیزم‌های Error Handling مورد تشخیص و کنترل قرار گیرد.استفاده از نوع داده Error در Swift به شما امکان می‌دهد خطاهای سفارشی خود را تعریف کنید و آن‌ها را در ارتباط با عملیات‌ها و قسمت‌هایی از برنامه‌ی خود که ممکن است خطا رخ دهند، استفاده کنید.بیایید با یک مثال ساده توضیح دهم. فرض کنید که شما یک سیستم مدیریت فایل دارید و نیاز دارید برنامه‌ای بنویسید که فایل مورد نظر را باز کند. اما اگر فایل مورد نظر پیدا نشود، یک خطا رخ داده است. در اینجا می‌توانید از Error Handling برای کنترل خطاها استفاده کنید. به صورت زیر می‌توانید کد را بنویسید:تعریف یک نوع داده به نام FileError که از نوعError ارث برده است.تابعی بنام openFile که یک نام فایل دریافت می‌کند و ممکن است خطا رخ دهد.در صورتی که خطا fileNotFound رخ دهد، پیام &quot;فایل پیدا نشد&quot; چاپ می‌شود.در غیر این صورت، پیام &quot;خطای ناشناخته رخ داد&quot; چاپ می‌شود.توی این مثال، یک نوع داده به نام FileError تعریف شده که از Error به ارث می‌برد. سپس تابع openFile فایل را می‌گشاید و در صورت عدم پیدا شدن فایل، خطا را پرتاب می‌کند. در بلاک do-catch، ما تلاش می‌کنیم تا تابع openFile را اجرا کنیم و در صورتی که خطای fileNotFound رخ دهد، پیام مناسب را چاپ می‌کنیم. در غیر این صورت، خطای ناشناخته رخ داده است.استفاده از do-catch و روش‌های دیگری از Error Handling در Swift به شما امکان می‌دهد تا با خطاهایی که در هنگام اجرا رخ می‌دهند مقابله کنید و رفتار مناسب را برای برنامه خود تعیین کنید.موفق باشید.</description>
                <category>رضا عبدالملکی</category>
                <author>رضا عبدالملکی</author>
                <pubDate>Mon, 03 Jul 2023 12:41:23 +0330</pubDate>
            </item>
                    <item>
                <title>پروتکل (PROTOCOL) در برنامه نویسی SWIFT</title>
                <link>https://virgool.io/@reza_abdolmaleki/%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84-protocol-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-swift-tytg1wnolii3</link>
                <description>در زبان برنامه‌نویسی Swift، پروتکل‌ها (Protocols) به شما امکان می‌دهند یک مجموعه از الزامات و عملکردها را برای نوع‌ها (Types) مشخص کنید. این الزامات و عملکردها می‌توانند تعیین کننده‌ی نحوه‌ی عملکرد یک Type باشند و به شما اجازه می‌دهند تا رابط‌های مشترک بین نوع‌ها را تعریف کنید.اگر با زبان های برنامه نویسی دیگری مانند زبان های دات نت آشنایی دارید در واقع همان اینترفیس ها هستند.یک پروتکل تنها شامل بر تعیین متد‌ها، پراپرتی ها و دیگر اعضای مورد نیاز است و برای پیاده‌سازی نمی‌تواند مقدار پیش‌فرضی ارائه کند. از این رو، پروتکل به تنهایی نمی‌تواند نمونه‌ای از خود باشد.در ادامه، یک مثال ساده از تعریف و پیاده‌سازی یک پروتکل در Swift آورده شده است:مثال پروتکل در سوییفتدر این مثال، پروتکل &#x60;Animal&#x60; تعریف شده است. این پروتکل دارای دو الزام است: یک ویژگی &#x60;name&#x60; که نام حیوان را نگه می‌دارد و یک متد &#x60;makeSound&#x60; که صدای حیوان را تولید می‌کند. سپس، پروتکل &#x60;Animal&#x60; در دو نوع، یعنی کلاس &#x60;Cat&#x60; و ساختار &#x60;Dog&#x60; پیاده‌سازی شده است. در هر کلاس یا ساختار، این الزامات را باید برآورده کنید.سپس، با ساختن یک نمونه از کلاس &#x60;Cat&#x60; و ساختار &#x60;Dog&#x60;، می‌توانیم متد‌های &#x60;makeSound&#x60; را صدا بزنیم و خروجی مورد انتظار را دریافت کنیم.</description>
                <category>رضا عبدالملکی</category>
                <author>رضا عبدالملکی</author>
                <pubDate>Sun, 02 Jul 2023 18:22:19 +0330</pubDate>
            </item>
                    <item>
                <title>Capturing values in closures (SWIFT)</title>
                <link>https://virgool.io/@reza_abdolmaleki/capturing-values-in-closures-swift-wcyge5ltwfc8</link>
                <description>Capturing values in closures  یعنی دریافت و ذخیره مقادیر متغیرها از محدوده اطراف یک closure است. وقتی یکclosure به مقداری از متغیرها، ثابت‌ها یا متغیرهای دیگر در محدوده اطراف دسترسی دارهو اون‌ها رو به صورت مرجع یا By Reference ذخیره می‌کنه، مقادیر مرتبط توی closure نگه داشته می‌شه و در زمان اجرا می‌تونه به آن‌ها دسترسی داشته باشه.مثالاین قابلیت بسیار مفید هست ، زمانی که می‌خواید یک closure رو به عنوان پارامتری داخل یک تابع یا متد استفاده کنید و بخواید داده‌های بیرونی را به اون منتقل کنید تا در زمان اجرا از آن‌ها استفاده کنید.در مثال (تصویر) ، یک closure به نام &quot;incrementBy&quot; تعریف می‌شه که مقدار یک عدد را به عدد دیگری اضافه می‌کنه. متغیر &quot;total&quot; با مقدار 10 تعریف شده. بعد با فراخوانی closure &quot;incrementBy&quot; با پارامتری برابر با 5، مقدار total به 15 تغییر می‌کنه.Closure در زمان اجرا به مقدار total دسترسی داره و تغییرات رو در اون اعمال می‌کنه.کلوژر&quot;incrementBy&quot; به متغیر &quot;total&quot; در محدوده اطراف دسترسی داره و مقدار اون را به صورت Reference ذخیره می‌کند. هر زمان کهclosure فراخوانی بشه و عملیات اضافه کردن رو انجام بده، تغییرات در مقدار total اعمال می‌شه.بنابراین، capturing values in closures در زمانی که نیاز به استفاده از داده‌های بیرونی در یکclosure دارید، بسیار کاربردیه. با استفاده از این قابلیت، می‌توانید داده‌های بیرونی را بهclosure منتقل کرده و در زمان اجرا از آن‌ها استفاده کنید.</description>
                <category>رضا عبدالملکی</category>
                <author>رضا عبدالملکی</author>
                <pubDate>Sun, 02 Jul 2023 17:36:30 +0330</pubDate>
            </item>
            </channel>
</rss>