<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های شهرام شبیری</title>
        <link>https://virgool.io/feed/@m_73586245</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-19 09:31:10</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/3777415/avatar/PdCWPX.jpg?height=120&amp;width=120</url>
            <title>شهرام شبیری</title>
            <link>https://virgool.io/@m_73586245</link>
        </image>

                    <item>
                <title>یک تصویر کلی از شبکه‌ عصبی: بدون پیچیدگی، بدون ریاضی</title>
                <link>https://virgool.io/@m_73586245/%DB%8C%DA%A9-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%DA%A9%D9%84%DB%8C-%D8%A7%D8%B2-%D8%B4%D8%A8%DA%A9%D9%87-%D8%B9%D8%B5%D8%A8%DB%8C-%D8%A8%D8%AF%D9%88%D9%86-%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%DA%AF%DB%8C-%D8%A8%D8%AF%D9%88%D9%86-%D8%B1%DB%8C%D8%A7%D8%B6%DB%8C-oeqzcqcb40vs</link>
                <description>مقدمهدر این مطلب قصد داریم یک مدل ذهنی ساده از نحوه‌ی عملکرد شبکه‌های عصبی و فرآیند train کردن آن‌ها ارائه دهیم. برای توضیح بهتر، از مثال تبدیل تصاویر اعداد دست‌نویس به عدد متناظر استفاده می‌کنیم. تمام مواردی که در ادامه مطرح می‌شود صرفاً برای ایجاد یک درک مفهومی و ذهنی از نحوه‌ی عملکرد شبکه‌های عصبی و فرآیند train کردن آن‌ها است — نه لزوماً همان چیزی که امروزه در دنیای واقعی و پیاده‌سازی‌های عملی مورد استفاده قرار می‌گیرد.خواندن این مطلب نیاز به هیچ پیش‌نیازی ندارد.نورون چیست؟هر نورون در یک شبکه عصبی عددی بین صفر و یک را نگه می‌دارد که به آن activation گفته می‌شود. برای مثال، در پردازش تصویر، مقدار روشنایی یک پیکسل در یک تصویر سیاه‌ و سفید می‌تواند همان مقدار activation نورون در لایه‌ی ورودی باشد. در مسئله‌ی تشخیص اعداد از روی تصویر، لایه‌ی خروجی شبکه معمولاً شامل ۱۰ نورون است (برای اعداد ۰ تا ۹)، و مقدار فعال‌سازی هر نورون نشان‌دهنده‌ی شباهت تصویر ورودی به آن عدد است.هدف شبکه عصبی چیست؟هدف اصلی شبکه عصبی، یافتن روشی است که بتواند داده‌های خام (مانند پیکسل‌های تصویر) را به مفاهیم انتزاعی‌تر (مثل اشیاء یا اعداد) تبدیل کند.به عنوان مثال، در مسئله‌ی تشخیص عدد از تصویر:لایه‌ی اول شبکه -مجموعه‌ای از نورون‌ها- از پیکسل‌های خام تشکیل شده است. یعنی هر پیکسل متناظر یک نورون است.لایه‌ی دوم یاد می‌گیرد از روی پیکسل‌ها، الگوهایی مانند لبه‌ها (edges) را استخراج کند.لایه‌های بعدی از ترکیب این لبه‌ها، الگوهای پیچیده‌تر (patterns) مثل خطوط و منحنی‌ها را شناسایی می‌کنند.در نهایت، لایه‌ی خروجی این الگوها را با مفاهیمی مانند عدد «8» یا «9» مطابقت می‌دهد.لایه‌های شبکه عصبی در مثال تشخیص عدد از روی تصویروزن و بایاس (Weight &amp; Bias):در شبکه عصبی، هر نورون از یک لایه به تمام نورون‌های لایه‌ی بعدی متصل است. هر اتصال دارای وزنی (Weight) است که مشخص می‌کند خروجی یک نورون تا چه حد بر فعال‌سازی نورون بعدی تأثیر بگذارد.به عنوان مثال، اگر نورونی در لایه‌ی اول (مثلاً یک پیکسل روشن) فعال باشد، وزن‌ها تعیین می‌کنند که کدام نورون‌ها در لایه‌ی دوم (مثلاً نورون‌های شناسایی‌کننده‌ی لبه‌ها) فعال شوند.برای افزایش دقت مدل، هر نورون علاوه بر وزن‌ها، یک بایاس (Bias) نیز دارد؛ مقداری ثابت که به مجموع ورودی‌ها اضافه می‌شود تا شبکه بتواند مرز تصمیم (decision boundary) را بهتر تنظیم کند و در نتیجه انعطاف‌پذیری بیشتری در یادگیری روابط پیچیده داشته باشد.در نهایت، برای تبدیل مجموع وزن‌دار ورودی‌ها و بایاس به عددی بین صفر و یک، از تابع فعال‌سازی (Activation Function) مانند Sigmoid یا ReLU استفاده می‌شود.حال این پرسش مطرح می‌شود که شبکه عصبی چگونه یاد می‌گیرد وزن‌ها و بایاس‌های خود را به‌گونه‌ای تنظیم کند که از مجموعه‌ای از داده‌های خام، به درک یک مفهوم (مثلاً تشخیص عدد در تصویر) برسد؟ در ادامه به پاسخ این سؤال می‌پردازیم.فرض کرده‌ایم که مسئله‌ی ما تشخیص اعداد دست‌نویس از روی تصویر است. برای آموزش شبکه به یک دیتاست برچسب‌دار (Labeled Dataset) نیاز داریم؛ یعنی مجموعه‌ای از تصاویر اعداد دست‌نویس که عدد واقعیِ هر تصویر از قبل مشخص باشد. هدف این است که شبکه عصبی یاد بگیرد بین پیکسل‌های تصویر و عدد متناظر با آن رابطه برقرار کند.در آغاز، وزن‌ها و بایاس‌ها معمولاً به‌صورت تصادفی مقداردهی می‌شوند، بنابراین خروجی اولیه‌ی شبکه بسیار نادرست و تصادفی است. در این مرحله، شبکه هیچ درکی از داده ندارد.اینجاست که مفهوم تابع هزینه (Cost Function) وارد می‌شود.تابع هزینه (Cost Function):تابع هزینه مشخص می‌کند که خروجی فعلی شبکه چقدر با خروجی واقعی (مقدار صحیح) فاصله دارد. هر چه مقدار تابع هزینه بیشتر باشد، یعنی پیش‌بینی شبکه اشتباه‌تر بوده است.به زبان ساده:اگر شبکه خروجی درستی بدهد (مثلاً تصویر عدد ۳ را درست تشخیص دهد)، مقدار تابع هزینه کم خواهد بود.اگر شبکه اشتباه کند (مثلاً عدد ۳ را به‌عنوان ۸ تشخیص دهد)، مقدار تابع هزینه زیاد می‌شود.هدف آموزش شبکه عصبی این است که مقدار تابع هزینه را به حداقل برساند؛ یعنی وزن‌ها و بایاس‌ها طوری تنظیم شوند که پیش‌بینی شبکه تا حد ممکن به مقدار واقعی نزدیک شود.نحوه‌ی محاسبه هزینهپس از محاسبه هزینه برای همه داده‌های برچسب‌گذاری شده، از تمام خروجی‌های cost function میانگین گرفته می‌شود. این عدد نشان‌دهنده‌ی دقت کلی شبکه عصبی در پیش‌بینی داده‌هاست.در این مرحله هدف ما این است که بفهمیم چطور می‌توان مقدار cost را کاهش داد. برای ساده‌سازی، می‌توان کل شبکه عصبی را مانند یک تابع ریاضی بزرگ در نظر گرفت که ورودی آن وزن‌ها و بایاس‌ها هستند و خروجی‌اش عددی است که توسط cost function محاسبه می‌شود. اگر این تابع را در یک فضای دوبعدی فرض کنیم، (در دنیای واقعی این یک مسئله n بعدی است که نمی‌توان آن را visualize کرد،) هدف ما پیدا کردن نقطه‌ی minimum این تابع است — یعنی جایی که مقدار cost کمترین مقدار ممکن باشد.البته در عمل به دنبال local minimum هستیم، نه لزوماً global minimum، چون پیدا کردن کمینه‌ی کلی برای تابعی با میلیون‌ها پارامتر بسیار پیچیده است.پیدا کردن local minفرآیند ساده‌ی رسیدن به local minimum را می‌توان به شکل زیر خلاصه کرد:با یک ترکیب تصادفی از وزن‌ها و بایاس‌ها شروع می‌کنیم.مقدار cost را محاسبه می‌کنیم.با استفاده از یک تابع ریاضی (مثل gradient)، وزن‌ها و بایاس‌ها را کمی تغییر می‌دهیم.دوباره cost را محاسبه می‌کنیم:اگر مقدار cost کم‌تر شد، در همان جهت ادامه می‌دهیم.اگر مقدار cost زیاد شد، جهت تغییر را معکوس می‌کنیم.این فرآیند بارها تکرار می‌شود تا زمانی که دیگر کاهش قابل توجهی در cost دیده نشود.به این الگوریتم که مشخص می‌کند وزن‌ها و بایاس‌ها در هر مرحله چگونه تغییر کنند تا cost کاهش یابد، Backpropagation گفته می‌شود. در ادامه به نحوه‌ی عملکرد آن پرداخته خواهد شد.Backpropagation چیست؟برای درک بهتر، با یک مثال پیش برویم. فرض کنید تصویری از عدد ۲ داریم و آن را به شبکه عصبی می‌دهیم. خروجی شبکه مجموعه‌ای از activation‌ها در ۱۰ نورون لایه آخر است (هر نورون نماینده‌ی یکی از اعداد ۰ تا ۹ است).در حالت ایده‌آل، می‌خواهیم نورون متناظر با عدد ۲ مقدار activation نزدیک به ۱ داشته باشد و سایر نورون‌ها به ۰ نزدیک باشند. اما در عمل، خروجی شبکه با این انتظار فاصله دارد — مثلاً نورون عدد ۳ نیز تا حدی فعال شده است.حالا سؤال این است: چطور باید شبکه را طوری تنظیم کنیم که خروجی به هدف نزدیک‌تر شود؟ما نمی‌توانیم مستقیماً activation نورون‌ها را تغییر دهیم؛ تنها چیزی که در کنترل ماست وزن‌ها (weights) و بایاس‌ها (biases) هستند.ایده این است که وزن‌هایی که باعث افزایش activation نورون درست (عدد ۲) می‌شوند را افزایش دهیم و وزن‌هایی که به اشتباه نورون‌های دیگر را فعال کرده‌اند را کاهش دهیم. نورون‌هایی که در لایه قبل فعال‌تر بوده‌اند، تأثیر بیشتری در این تغییر دارند. پس وزن اتصالات (legs) بین نورون‌های فعال‌تر در لایه قبل و نورون هدف در لایه بعد باید بیشتر تنظیم شوند.به صورت استعاری، این مفهوم با Hebbian theory در نوروسایکولوژی هم‌خوانی دارد که می‌گوید:“Neurons that fire together, wire together.”یعنی نورون‌هایی که با هم فعال می‌شوند، ارتباط قوی‌تری با هم شکل می‌دهند.در Backpropagation، ما این فرایند را برای تمام خروجی‌ها (اعداد ۰ تا ۹) انجام می‌دهیم و اثر هرکدام را بر وزن‌های بین لایه‌ها لحاظ می‌کنیم.در واقع وزن هر اتصال بین دو لایه، بر اساس میانگین تغییرات خطا (error gradients) برای تمام داده‌های آموزش تنظیم می‌شود.این فرآیند از آخرین لایه شبکه شروع می‌شود و مرحله‌به‌مرحله به سمت لایه‌های ابتدایی ادامه می‌یابد — به همین دلیل نام آن Backpropagation است.اما اجرای این کار برای کل دیتاست بسیار پرهزینه است.برای کاهش هزینه محاسباتی از روشی به نام Stochastic Gradient Descent) SGD) استفاده می‌شود.نزول گرادیان تصادفی یا  Stochastic Gradient Descent) SGD):در SGD، ما کل داده‌های آموزشی (مثلاً تصاویر اعداد دست‌نویس) را به هم می‌زنیم -بُر می‌زنیم- و آن‌ها را به مجموعه‌های کوچکتر به نام mini-batch (مثلاً ۱۰۰ تصویر) تقسیم می‌کنیم به ترتیبی که هر min-batch نماینده‌ی خوبی از کل داده‌ها باشد.سپس Backpropagation را فقط روی یکی از این mini-batch‌ها اجرا می‌کنیم، خطا را محاسبه کرده و وزن‌ها را به‌روزرسانی می‌کنیم. این کار را برای مجموعه بعدی تکرار می‌کنیم و انقدر پیش می‌رویم که با تغییر اعمال شده در وزن‌ها، کاهش محسوسی در هزینه ایجاد نشود.مسیر طی شده برای رسیدن به local min با الگوریتم SGDمنابع:مطلب فوق براساس ‌پلی‌لیست Neural Networks از کانال یوتیوب 3Blue 1Brown تهیه شده است. در این کانال پلی‌لیست‌های مختلفی در حوزه علوم‌کامپیوتر وجود دارد که به شیوه‌ای ساده و قابل فهم، مطالب پیچیده را ارائه می‌کنند.</description>
                <category>شهرام شبیری</category>
                <author>شهرام شبیری</author>
                <pubDate>Thu, 20 Nov 2025 10:59:46 +0330</pubDate>
            </item>
                    <item>
                <title>۱۰۰ اشتباه در گولنگ و نحوه جلوگیری از آنها</title>
                <link>https://virgool.io/@m_73586245/%DB%B1%DB%B0%DB%B0-%D8%A7%D8%B4%D8%AA%D8%A8%D8%A7%D9%87-%D8%AF%D8%B1-%DA%AF%D9%88%D9%84%D9%86%DA%AF-%D9%88-%D9%86%D8%AD%D9%88%D9%87-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%A2%D9%86%D9%87%D8%A7-qeit1ha6lvxa</link>
                <description>«۱۰۰ اشتباه در گولنگ و نحوه جلوگیری از آنها» عنوان کتابی است که اخیراََ آن را مطالعه کردم. برای این کتاب یک مجموعه‌ی ویدیویی ساختم که می‌خواهم در این مطلب به معرفی آن بپردازم. این مطلب می‌تواند حکم یک پلی‌لیست توسعه یافته را برای مخاطبین این ویدیوها داشته باشد.چطور این ایده شکل گرفت؟حدود یک سال است که یک عادت جدید را در تیم دنبال می‌کنیم. یک کتاب (در حوزه مهندسی نرم‌افزار) انتخاب می‌کنیم، آن را بخش به بخش مطالعه کرده، آن‌چه را مطالعه کردیم در جلسات هفتگی با یکدیگر به اشتراک می‌گذاریم.آخرین کتابی که مطالعه کردیم، «۱۰۰ اشتباه در گولنگ و نحوه جلوگیری از آنها» بود. در ابتدا فکر می‌کردیم که کتاب علاوه بر آنچه می‌دانیم چیز زیادی به ما اضافه نکند، برای همین گفتیم بگذار یک فرصت کوتاه به این کتاب بی‌نوا هم داده باشیم و برای این فرصت کوتاه تصمیم گرفتیم چند فصل آخر کتاب، یعنی فصل‌های همزمانی (concurrency) و optimization را مطالعه کنیم. کتاب ابداََ بی‌نوا نبود و به ما نشان داد که دانش ما در خصوص گولنگ، در بعضی حوزه‌ها آنقدرها که فکر می‌کردیم عمیق نیست. توانستیم با مطالعه همین چند فصل به اشتباهاتی در دنیای واقعی پی ببریم و همچین دید عمیق‌تری نسبت به گولنگ پیدا کنیم. به این نتیجه رسیدیم که فصل‌های اول کتاب نیز ارزش مطالعه دارد و از ابتدا شروع به خواندن کتاب کردیم.از مطالعه کتاب تا ساخت ویدیومن که قبلاََ یک دوره ویدیویی به منظور بررسی کتاب High performance MySQL تهیه کرده و بازخوردهای مثبتی از آن دریافت کرده بودم، تصمیم گرفتم که برای بررسی این کتاب نیز یک دوره ویدیویی تهیه کنم.با توجه به بازخوردهایی که از بررسی ویدیویی قبلی دریافت کردم، تصمیم گرفتم قالب ویدیوها را تغییر دهم. ویدیوهای بررسی ۱۰۰ اشتباه در گولنگ کوتاه‌تر هستند. براساس بازخوردهایی که دریافت کردم، کوتاه بودن ویدیوها، این امکان را برای مخاطب ایجاد می‌کند که آنها را در نشست‌های کوتاه‌تری ببیند و این موضوع حس پیشرفت بهتری برای او ایجاد می‌کند. اما در در کنار این مزیت، کوتاه شدن ویدیوها یک اشکال به همراه دارد: متعدد شدن ویدیوها. تعدد ویدیوها ممکن است باعث شود مخاطب برای مشاهده ویدیوها سردرگم شود: از کجا شروع کنم؟ تا کجا پیش رفته بودم؟ من دنبال موضوع بخصوصی هستم، آن را کجا پیدا کنم؟پلی‌لیست یوتیوب، تا حدی این مشکل را حل می‌کند ولی شاید استفاده از آن به اندازه کافی ساده نباشد. به همین منظور، تصمیم گرفتم این مطلب را بنویسم. در اینجا همه ویدیوها را لیست می‌کنم و در مورد هر کدام توضیح مختصری ارائه کرده و لینک یوتیوب مرتبط را در مقابل آن قرار می‌دهم.بازخورد شما چطور به من کمک می‌کند؟در این مسیر من یک تازه‌کار هستم، بازخوردهای شما برای من در پاسخ به این سوالات بسیار اهمیت دارد. آیا محتوایی که تولید می‌کنم مفید و کاربردی است؟ آیا از کیفیت لازم برخوردار است؟ آیا این مسیر را ادامه بدهم؟ پس لطفا از ارائه بازخورد با لایک یا دیسلایک، کامنت یا هر روش دیگری که می‌دانید، من را در این مسیر یاری کنید.فصل ۱- Go: Simple to learn but hard to۰- مقدمه و فصل اولکمی در مورد بازخوردهای ویدیوهای قبلی صحبت کردم و فصل اول کتاب را به اختصار توضیح دادم.فصل ۲- Code and project organization۱، ۲ و ۳ - استثنائاََ سه اشتباه در یک ویدیواینجا هنوز در خصوص فرمت ویدیوها به جمع بندی نرسیده بودم و سه اشتباه را در یک ویدیو گفتم.اشتباه ۱ در مورد شدو کردن ناخواسته (Unintended variable shadowing)، اشتباه ۲ در مورد بلاک‌های تو در تو (Unnecessary nested code) و اشتباه ۳ در خصوص استفاده نامناسب از فانکشن ()init است (Misusing init functions).۴ و ۵- استثنای مکرر(!) دو اشتباه در یک ویدیواشتباه ۴ در خصوص استفاده بیش از حد از Getter و Setter است (Overusing getters and setters).اشتباه ۵ به موضوعی با عنوان آلودگی اینترفیسی می‌پردازد (Interface pollution). در این اشتباه در خصوص نوع نگاه ما به اینترفیس‌ها در گولنگ و تفاوت آن با زبان‌های پاردایم شی‌گرا صحبت می‌شود.۶- تعریف اینترفیس در پکیج پیاده‌سازی کننده آن - Interface on the producer sideدر گولنگ، تعریف کردن اینترفیس در پکیجی که آن را پیاده‌سازی (satisfy) می‌کند (به نوعی) اشتباه است.۷- برگرداندن اینترفیس در خروجی فانکشن - Returning interfacesبرگرداندن اینترفیس در خروجی فانکشن، (به نوعی) اشتباه است. این موضوع دست کلاینت را می‌بندد.۸- استفاده از any (معمولا) بی‌معنی است - any says nothingاستفاده از any یا اینترفیس خالی (interface{}) در عموم موارد منجر به مشکل overgeneralization خواهد شد.۹- گیج شدن در مورد اینکه بلاخره کجا باید از جنریک استفاده کنیم - Being confused about when to use genericsمفهوم generics در گولنگ توضیح داده می‌شود. همچنین پیشنهاد می‌شود که در چه مواردی از جنریک‌ها استفاده کنیم و در چه مواردی استفاده از جنریک‌ها ارزش افزوده ای ایجاد نمی‌کند.۱۰- آگاه نبودن از تبعاتی که ‌type embedding می‌تواند به دنبال داشته باشد - Not being aware of the possible problems with type embeddingمفهوم type embedding در گولنگ توضیح داده می‌شود. همچنین بیان می‌شود که استفاده از type embedding می‌تواند منجر به اکسپورت شدن ناخواسته توابع و ... شود.۱۱- عدم استفاده از پترن فانکشنال آپشن - Not using functional options patternدر نبود optional parameters در گولنگ، از چه پترن‌هایی می‌توانیم برای مدیریت کانفیگ‌های ‌optional استفاده کنیم. سه روش معرفی می‌شود که functional options pattern کامل‌ترین آنها است.۱۲- ساختاربندی نامناسب پروژه - Project misorganizationدر خصوص ساختار پروژه‌ها -دایرکتوری‌های پروژه- در گولنگ صحبت می‌شود.۱۳- ساختن پکیج‌های خیلی عمومی با نام‌هایی مثل common, base, utility و ... - Creating utility packagesدر مورد تعریف پکیج‌ها با نام‌ها و کاربردهای بیش از حد عمومی صحبت می‌شود.۱۴- بی تفاوت بودن نسبت به تداخل اسم پکیج‌ها - Ignoring package name collisionsموضوع این اشتباه، استفاده از نام یکسان برای متغییر، پکیج و ... و پیامدهای ناشی از آن است.۱۵- عدم کامنت گذاری مناسب - Missing code documentationدر گولنگ کامنت گذاری بر روی فانکشن‌ها، استراکت‌ها و ... ای که به بیرون پکیج اکسپورت می‌شوند، توصیه شده است.۱۶- عدم استفاده از لینترها - Not using lintersدر این بخش به اهمیت استفاده از لینترها اشاره شده است.فصل ۳- Data types۱۷- گیج شدن در هنگام استفاده از عبارت‌های مبنای ۸ - Creating confusion with octal literalsفصل سوم کتاب به اشتباهات پیرامون data type ها -بجز ‌string که خود یک فصل مستقل دارد- اسلایس (slice) و مپ (map) می‌پردازد. در  اشتباه شماره ۱۷ در خصوص عبارات مبنای ۸ صحبت شده است.۱۸- بی‌توجهی به سرریز شدن اعداد صحیح - Neglecting integer overflowsنوع داده صحیح (integer) می‌تواند سرریز (overflow) شود. در این اشتباه در خصوص نحوه سرریز شدن و روش جلوگیری از آن صحبت شده است.۱۹- عدم درک صحیح اعداد ممیز شناور - Not understanding floating pointsدر این تاپیک در خصوص اعداد ممیز شناور (floating point) و چالش‌هایی که در کار با این اعداد وجود دارد، صحبت می‌شود.۲۰- عدم درک صحیح از طول (length) و ظرفیت (capacity) در اسلایس - Not understanding slice length and capacityاین اشتباه در مورد عدم درک صحیح از طول (length) و ظرفیت (capacity) در اسلایس‌ها است. این موضوع می‌تواند منجر به کاهش کارایی (performance) در کار با اسلایس‌ها شود.۲۱- مقداردهی اولیه ناکارآمد اسلایس - Inefficient slice initializationدر این اشتباه به بررسی این موضوع پرداخته می‌شود که عدم مقداردهی اولیه مناسب اسلایس، می‌.تواند چه تبعاتی به دنبال داشته باشد.۲۲- گیج شدن در مورد تفاوت اسلایس nil و خالی - Being confused about nil vs. empty slicesاین اشتباه در خصوص تفاوت (و شباهت) اسلایس nil و خالی (empty) است.۲۳- استفاده از روش نادرست برای کنترل خالی بودن اسلایس - Not properly checking if a slice is emptyدر این اشتباه به موضوع چک کردن خالی بودن اسلایس پرداخته می‌شود. آیا مقایسه اسلایس با nil روش مناسبی برای بررسی خالی بودن اسلایس است؟۲۴- استفاده از روش نادرست برای کپی کردن اسلایس - Not making slice copies correctlyدر این تاپیک به اشتباهات رایج در کپی کردن اسلایس‌ها پرداخته می‌شود. همچنین یک روش جایگزین (به جای فانکشن copy) برای کپی کردن اسلایس‌ها معرفی می‌شود.۲۵- تبعات ناخواسته در هنگام استفاده از فانکشن ‌append برای چسباندن المان‌های جدید به اسلایس - Unexpected side effects using slice appendاستفاده از فانکشن append می‌تواند ساید افکت‌های ناخواسته‌ای به دنبال داشته باشد. در این اشتباه به این ساید افکت‌ها و روش‌های جلوگیری از آنها پرداخته شده است.</description>
                <category>شهرام شبیری</category>
                <author>شهرام شبیری</author>
                <pubDate>Sat, 18 Jan 2025 16:31:34 +0330</pubDate>
            </item>
            </channel>
</rss>