جادو ( برنامه نویسی ) کیست؟ توضیح بده.
در زمینه برنامه نویسی کامپیوتر، جادو یک اصطلاح غیر رسمی برای انتزاع است؛از آن برای توصیف کد با وظایف پیچیده استفاده می شود در حالی که این پیچیدگی را پنهان می کند تا یک رابط ساده ارائه دهد. این اصطلاح تا حدودی مسخره آمیز است و اغلب دارای مفاهیم بد است، که نشان می دهد رفتار واقعی کد بلافاصله آشکار نمی باشد. برای مثال، مکانیسم های تایپ و بسته بندی پلیمورف پرل اغلب به عنوان "جادویی" نامیده می شوند. این اصطلاح به این معنی است که پیچیدگی پنهان حداقل در اصل قابل درک است، در مقایسه با جادو سیاه و جادو عمیق که تکنیک های اسرارآمیز را توصیف می کند که عمداً پنهان شده یا بسیار دشوار است. با این حال، این اصطلاح می تواند به صورت جذابی نیز استفاده شود، که نشان دهنده "جذابیت" در مورد کد است. عمل چنین انتزاعی به عنوان "خودآگاهانه" انجام می شود، یک ترکیب از "خودکار" و "جادویی".مبهم بودن مرجع."جادو" به رویه ها که محاسبات را بر مبنای داده هایی که صراحتا به آنها ارائه نشده است، با دسترسی به دیگر ماژول ها، موقعیت های حافظه یا متغیرهایجهانی انجام می دهند که آنها نباید این انجام دهند(به عبارت دیگر ، آنها به طور مرجع شفاف نیستند). بر طبق آخرین مدل های معماری نرم افزار، حتی وقتی از برنامه نویسی ساختاری استفاده می شود، معمولا ترجیح داده می شود برای اینکه هر تابع هر بار به یک شکل رفتار کند همان استدلال ها به آن انتقال داده می شوند، در نتیجه ی یکی از اصول اساسی برنامه نویسی کاربردی. وقتی یک تابع این قانون را رعایت نمی کند ، اغلب گفته می گویند که شامل"جادو"می باشد.یک مثال ساده از جادوی منفی کد زیر در پی‌اچ‌پی می باشد:function magic() global $somevariable; echo $somevariable;$somevariable = true;magic();در حالی که کد بالا واضح می باشد، اگر در یک پروژه بزرگ دیده شود، درک این موضوع که متد codice_1 از کجا ارزش خود را دریافت می کند، اغلب دشوار می باشد. بهتر است آن کد با استفاده از مفهوم زیر نوشته شود:function noMagic($myvariable) echo $myvariable;$somevariable = true;noMagic($somevariable);نامتعامد.این توصیف "جادو" یا "جادویی" را می توان به یک نوع داده ، قطعه کد، کلمه کلیدی یا آدرس ماشینی که شامل ویژگی هایی می باشد، تعمیم داد که به‌وسیلهٔ اشیاء مشابه به اشتراک گذاشته نمی شود. ممکن است خواص جادویی مستند باشد یا نباشد.انواع.جادوی عمیق به تکنیک هایی اشاره دارد که به شکل گسترده شناخته شده نیستند و ممکن است عمداً به طور پنهان نگهداری شوند. تعداد چنین تکنیک هایی در طول زمان کاهش یافته است، به خصوص در زمینه رمزنگاری ، که در آن امنیت از طریق مبهم به مقدار فراوانی به سود امنیت از طریق طراحی می باشد که اجازه می دهد، و اغلب بررسی عمومی رها شده را تشویق می کند."فایل Jargon" میان جادوی عمیق، که به کد برمبنای دانش نظری باطنی اشاره می کند، و جادوی سیاه، که به کدهای مبتنی بر تکنیک‌هایی اشاره دارد که به نظر کار می‌کنند ولی عاری از توضیح نظری می باشند، تمایز ایجاد می کند. همچنین جادوگری سنگین را تعریف می کند که به کدهای برمبنای پیچیدگی های مبهم یا غیر مستند سخت افزار یا نرم افزار خاص اشاره می کند. برای مثال، نظر نامحبوب«از شما انتظار نمی رود که این را بفهمید» : عده کثیری از خوانندگان Lions' Book، تفسیری با حاشیه نویسی آموزشی درباره ی کد منبع هسته نسخه یونیکس نسخه 6، این تعبیر را که در کد پیدا می شود تفسیر کردند تا بعضی از آنها را پیشنهاد دهند. خرد نظری عمیق در قطعه مبهم نمایش داده می شد، با این حال در واقع عملکرد "جادویی" آن صرفاً به ویژگی به‌خصوصی از روش بهینه سازی کامپایلر C برای سخت افزار PDP-11 که نسخه 6 یونیکس برای اجرا بر روی آن طراحی شده بود وابسته بود.