View Full Version : توابع کتاب خانه ای
blackknight
سه شنبه 20 اسفند 1398, 21:39 عصر
با سلام. من تازه دارم C++ را شروع می کنم و برام این سوال پیش اومده که چه طوری بدون نیاز به توابع کتاب خانه ای برنامه نوشت ؟ به نظر من مثلا باید فقط از کلمات کلیدی استفاده کرد برای فلان کار بعد که یاد گرفتیم چه جوریه از توابع کتاب خانه ای استفاده کنیم چون حفظ کردن توابع مثل حفظ کردن راه حل می مونه... .اگر میشه کد برنامه HELLO WORLD رو برای مثال بدون توابع کتاب خانه ای قرار بدید
the king
چهارشنبه 21 اسفند 1398, 06:19 صبح
با سلام. من تازه دارم C++ را شروع می کنم و برام این سوال پیش اومده که چه طوری بدون نیاز به توابع کتاب خانه ای برنامه نوشت ؟ به نظر من مثلا باید فقط از کلمات کلیدی استفاده کرد برای فلان کار بعد که یاد گرفتیم چه جوریه از توابع کتاب خانه ای استفاده کنیم چون حفظ کردن توابع مثل حفظ کردن راه حل می مونه... .اگر میشه کد برنامه HELLO WORLD رو برای مثال بدون توابع کتاب خانه ای قرار بدید
این ایده ای که در ذهنتون دارید که اول بدون استفاده از توابع کتابخانه ای از ساختار و ماهیت داخلی هر روتینی اطلاع پیدا کنید و بعد که یادشون گرفتید از کتابخانه ها استفاده کنید چند تا مشکل اساسی داره.
اولین مشکل اش اینه که زمان کافی برای انجامش رو نخواهید داشت. مثلا می خواهید توابع گرافیکی رو کنار بذارید، بسیار عالی، خوندن کتاب 1600 صفحه ای Programmer's Guide to the EGA, VGA, and Super VGA Cards رو شروع می کنید تا ببینید چطور میشه با سخت افزار کارت گرافیکی ارتباط برقرار کرد، بعد می بینید برای فهمیدن و درک مطالبش به پیش زمینه هایی لازم دارید، کجا باید دنبالش بگردید؟ کتاب 1300 صفحه ای PC Intern - System Programming. خیلی خوب. خدا میدونه با چه مشقتی و در چه مدت زمانی مطالعه شون می کنید. بعدش قاعدتا می توانید برای کارت های گرافیکی کدی طراحی کنید که بتونه چیزی رسم کنه یا متنی رو نمایش بده. اما دقیقا کار با کدوم کارت گرافیکی رو یاد گرفتید؟ مهمه، چون هر مدل سخت افزاری مشخصات و قابلیت های خاص خودش رو داره و متاسفانه سازگاری زیادی هم با هم ندارند. برای فلان مدل کارت گرافیکی خاصی کدی می نویسید که الزاما برای سیستم های سخت افزاری دیگه قابل استفاده نیست. این وقتی که صرف کردید برای افزایش دانش فنی تون خیلی موثر بود ولی متاسفانه دانشی است که براتون بهره وری نداره، احتمال اینکه جایی از این دانش واقعا استفاده کنید خیلی خیلی کمه. وقت تون رو برای چیزی صرف کردید که کمک خاصی بهتون نکرده و نمیدونستید هم با مشکلی مواجه نمی شدید.
دومین مشکل اینه که سازگاری در پلتفرم های مختلف وابسته به استفاده از کتابخانه های استاندارد زبانه. شما اگر کدی بنویسید که مستقیما روی دیسک اطلاعات ذخیره کنه، برنامه ای میسازید که سازگاری با سیستم ها و سخت افزار های مختلف رو از دست میده، با فلان مدل درایو سازگاری داره و با فلان مدل نداره. چیزی که خیلی اهمیت داره سازگاری ئه. هیچوقت هم نمی توانید تمامی سخت افزار های موجود و مستندات شون رو داشته باشید تا کدی بنویسید که با همه سخت افزار ها سازگار باشه.
سومین مشکل ایده تون اینه که بلد بودن نحوه استفاده از توابع رو با حفظ کردن شون معادل فرض کردید. برنامه نویس قرار نیست همه توابع کتابخانه ای (چه استاندارد و چه غیر استاندارد) رو حفظ کنه، بعضی هاشون رو که مکررا استفاده می کنه رو قاعدتا حفظ میشه، چه بخواد و چه نخواد. ولی کلا هر وقت نیاز به عملیات خاصی داشت، جستجو می کنه، جستجو در سایت ها و کتاب های مرجع نه چیزی از اعتبار برنامه نویس کم میکنه و نه حفظ بودن جزئیات تمامی کتابخانه ها اعتبار خاصی داره.
چهارمین مشکل ایده تون اینه که هر چقدر که حافظه خوبی داشته باشید نمی توانید تمامی الگوریتم های مورد نیاز در توابع رو بخاطر بسپارید یا حفظ کنید. برای هر موردی که بخاطر نداشته باشید هم زمانی لازمه صرف کنید، که سرعت کد نویسی تون رو خیلی کم میکنه.
پنجمین مشکل اینه کدی که می نویسید به اندازه کتابخانه های متعارف مورد استفاده قرار نگرفته اند، نواقص نهفته شون مشخص نیست، بهینه سازی لازم روشون صورت نگرفته.
کدی می نویسید که احتمالا ایراد و باگ داره. زمان زیادی لازمه که از بی نقص بودن روتینی که به الگوریتم اش مسلط نیستید تا حدی مطمئن بشید، بصورت قطعی که هیچوقت نمیشه مطمئن شد.
ممکنه 5 سال از یک روتینی که خودتون کدش رو نوشتید بدون هیچگونه مشکلی استفاده کنید، ولی در نهایت معلوم بشه باگ هایی داشته و هر برنامه ای ازش استفاده کرده ایراد داشته.
ششمین مشکل اینه که برای طراحی هر الگوریتمی یکسری پیش زمینه ها و اطلاعات اولیه لازمه، برای یکسری الگوریتم های عمومی راحته ولی مباحث و موضوعاتی هستند که دانش فنی زیادی لازم دارند که یادگیری شون دشوار ئه. اگر هم بهشون مسلط نباشید نمی توانید الگوریتم شون رو درک کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.