سفر به اعماق کامپیوتر (قسمت چهارم)

.سلاام

امروز حالتون چطوره؟

انچه در ادامه میخونید متن پادکست ما هست کی میتونید از اینجا گوش بدید همچنین میتونید مارو از اینجاها دنبال کنید.

https://castbox.fm/episode/%D8%B3%D9%81%D8%B1-%D8%A8%D9%87-%D8%A7%D8%B9%D9%85%D8%A7%D9%82-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1(%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85)-id2716424-id332336567?country=us


سلام.

حالتون چطوره؟

اینجا که اینترن پلاس پلاسه.توی اینترن پلاس پلاس ما سعی می‌کنیم تجربه های شخصی خودمون رو با منابع علمی قاطی کنیم و چیزایی بهتون بگیم که توی راه برنامه نویس بهتری شدن کمکتون کنه و سردرگمی شمارو کم کنه.

الانم شما دارید به چهارمین قسمت سفر به اعماق کامپیوتر گوش میدید.

سفر به اعماق کامپیوتر هم یکی از سری پادکست های ماست که توش اصطلاحت فنی رو تعریف میکنیم.

اگه قسمت های قبلی این سری رو گوش نکردید اونارو هم گوش کنید.

توی این قسمت من که فلانی ام با فلانیمون میخوایم در مورد لایبری و فریمورک که قبلا چند بار قولش رو داده بودیم صحبت کنیم و در بخش دوم پادکست هم میریم سراغ شی گرایی.

«موزیک»

خوب اول از همه میریم سراغ code reusability که ینی قابلیت استفاده ی مجدد از کد.

دیگه اگه مارو دنبال کرده باشید میدونید که ما مستقیم نمی‌ریم سر اصل داستان.

خیلی اصولی و ریشه ای میریم جلو که قشنگ مطلبو جا بندازیم.

تعریف راحت ترش اینه که کدی که شما مینویسی چقدر راحته که ازش دوباره بتونی استفاده کنی؟

برای مثال ما توی اکثر زبون های برنامه نویسی یه چیزی به اسم تابع داریم.

شما وقتی یه تابع مینویسید در واقع دارید یه تیکه کُد reusable می‌نویسید که از جاهای مختلف برنامه میتونید صدا بزنیدش و ازش استفاده کنید. که این خیلی خوبه و خیلی کمک میکنه. که کد نوشتن براتون راحت تر بشه و مجبور نباشید کد های تکراری مشابه هم رو جاهای مختلف برنامه بنویسید.

تازه اینجوری اگه اون تابع باگ داشته باشه رفع کردنش خیلی راحت تره تا اینکه بخواید برید ده جای برنامه دونه دونه اصلاح کنید. و این دونه دونه اصلاح کردن ها علاوه بر وقتی که ازتون میگیره احتمال خطا رو هم بالا میبره و قطعا یه روز گندش در میاد.

از ما گفتن بود.

حالا این تابع که گفتیم یه سطح پایینی از reusability هست. بعد از اون سوال بعدی که میتونید از خودتون بپرسید اینه که آیا من میتونم این تابع رو کپی پیست کنم تو یه برنامه ی دیگه ام ازش استفاده کنم؟

قبل از جواب دادن به این سوال میریم سراغ مفهوم دیگه ای به اسم dependency یا وابستگی.

جواب این سوال دقیقا تو همینه.

ینی باید از خودتون بپرسید که چیزای مورد نیاز برای اجرا شدن تابع من چقدر وابسته به برنامه ی منه.

اگه خیلی وابسته به برنامه شما باشه نمیتونید زارتی بدون هیچ تغییری کپی پیست اش کنید تو یه پروژه ی دیگه اتون و ازش استفاده کنید و نیاز به یسری تغییرات داره که توی پروژه ی جدیدتون درست کار کنه.

و این

ینی کدی که نوشتید خیلی هم reusable نبوده.

و توی هر پروژه ای که توش اون تیپ کار نیاز باشه مجبورید یه تایمی رو برای تغییر دادن و هماهنگ کردن اون تیکه کدتون با پروژه ی جدیدتون کنار بزارید.

حالا فرض میکنیم که شما یه تابعی نوشتید که به پروژه ی شما هیچ وابستگی نداره یا ساده تر بگیم مستقل از پروژه ی شماست.

حالا به راحتی میتونید بدون هیچ تغییری کپی پیست اش کنید جاهای دیگه و ازش استفاده کنید.

اینجوری میتونید ادعا کنید که کد های reusable تری نوشتید.

آفرین ?

اما اگه پاتون رو یه قدم فرا تر بزارید چی؟

«پیش به سوی بینهایت و فراتر از آن»

حالا همه ی اینا رو گفتیم که برسیم به تعریف لایبری.

ببینید یه لایبری یه تیکه کده از پیش نوشته شده ی مستقل هست که شما میتونید اونو به برنامه اتون اضافه کنید و ازش استفاده کنید.

حتی تو زبون های کامپایلی این کد ها به صورت کامپایل شده در اختیار شما قرار میگیرن و اینجوری حتی کامپایلر شما زحمت کامپایل کردن اون لایبری هم گردنش نیست.

«با صدای یواش»

اگه نمیدونید زبون کامپایلی چیه باید پاشید برید قسمت های قبلی ما رو به ترتیب گوش کنید بیاید.

«بی صدای یواش»

خلاصه که لایبری دیگه آخرت reusability عه.?

حالا بریم به چند تا سوالی که ممکنه تو ذهنتون ایجاد شده باشه جواب بدیم.

این لایبری هارو از کجا میتونیم گیر بیاریم؟

بسته به زبان برنامه نویسی که دارید استفاده میکنید راه های مختلفی میتونه وجود داشته باشه. مثلا اگه یه لایبری میخواید که تو مثلا java فلان کار رو بکنه برید تو گوگل سرچ کنید:

folan kar library for java

حتما اگه لایبری برای اون کار وجود داشته باشه آموزش نصب و استفاده ازش هم وجود داره.

البته خیلی مواقع هم لایبری ها نوشته میشن ولی در اختیار عموم قرار نمیگیرن و مثلا فلان شرکت یه لایبری نوشته که فقط خودش استفاده کنه.

تازه یسری لایبری هم هستن که پولی ان.

آیا منی که دارم این پادکست رو گوش میدم میتونم لایبری بنویسم؟

منی که دارم این پادکست رو ضبط میکنم که میتونم. پس تو ام میتونی. ولی اگه نوشتی در اختیار عموم قرارش بده که بقیه هم استفاده کنن. هر چی آدمای بیشتری ازش استفاده کنن reusable تره?.

در کل لایبری ها اندازه های خیلی مختلفی دارن یه لایبری ممکنه صد ها هزار خط کد باشه و یه لایبری دیگه چار تا تابع کوچولو باشه.

اگه خواستید یه لایبری بنویسید هم برید سرچ کنید ببینید توی زبان برنامه نویسی که کار میکنید راه اصولی برای نوشتن لایبری و منتشر کردنش چیه.

توی لایبری که مینویسم میتونم از لایبری های دیگه استفاده کنم؟!

بله یه لایبری میتونه به لایبری های دیگه وابستگی داشته باشه. حالا جالب میشه اگه اون لایبری ها هم باز به یسری لایبری دیگه وابستگی داشته باشن و تازه اون یکی…

<two hours later>

اونا هم باز به یسری لایبری دیگه وابسته باشن.

حالا شما میتونید یه درخت وابستگی یا dependency tree رو تصور کنید. که برای اینکه یه لایبری کار کنه نیاز هست که تمام شاخه ها و برگ های درخت هم نصب بشن.

و این وظیفه توی خیلی از زبون های برنامه نویسی به عهده ی package manager هاست.

این package manager ها این درخت وابستگی رو درک میکنن و وقتی شما میاید یه لایبری رو نصب کنید میرن همه ی وابستگی هاش رو دانلود و نصب میکنن.

«خیلی ممنون معروف»

حالا جالبه بدونید یکی از چیزایی که باعث میشه یه زبون برنامه نویسی پیشرفت کنه و محبوب بشه لایبری هایی هست که برای اون زبون نوشته شده.

مثلا میگن پایتون توی هوش مصنوعی زبون قدرتمندیه و دلیلش اینه که لایبری های خفنی تو این زمینه براش نوشته شده.

اما بریم سراغ فریم ورک.

ببینید فریم ورک یه چیزی تو مایه های لایبریه.

بعضی جا ها میگن مجموعه ای از لایبری هاست.

در کل مثل لایبری کد های از پیش نوشته شده و مستقله ولی نحوه ی استفاده اش فرق میکنه.

یه فریم ورک با خودش ساختار میاره و شما رو مجبور میکنه که توی ساختار اون کد بزنید.

ینی توی لایبری جریان اجرا شدن برنامه دست شماست و هر جا لازم بدونید لایبری هارو صدا میکنید.

ولی توی فریم ورک جریان اجرا شدن دسته فریم ورکه و این فریم ورکه که کد هایی که شما نوشتید رو صدا میزنه.

بنابراین شما راحت میتونید وقتی وسط یه پروژه هستید یهو میبینید یه لایبری نیاز دارید همون لحظه به پروژه استون اضافه اش کنید ولی فریم ورک اینطوری نیست و معمولا باید اول پروژه برای خودتون مشخص کنید که میخواهید از چه فریم ورکی استفاده کنید و معمولا هم نمیشه چند تا فریم ورک رو که همشون توی یه زمینه کاربرد دارن رو همزمان استفاده کرد چون جریان اجرا شدن اون ها با هم متفاوته و خلاصه اصلا جور در نمیاد.

نمیگم غیر ممکنه ولی شتر گاو پلنگ میشه.

نکته ی بعدی اینه که شما بین دوراهی فریم ورک و لایبری قرار ندارید و وقتی از یه فریم ورک استفاده میکنید همچنان میتونید لایبری ها رو هم به برنامه اتون اضافه کنید و مشکلی از این نظر ندارید.

بعضی موقع ها هم مرز باریکی بین لایبری بودن و فریم ورک بودن وجود دارد و بعضی چیزا هستن که بعضیا بهشون میگن فریم ورک و بعضیا میگن لایبری اینا اینجوری ان که بخشی از جریان اجرا رو دست میگیرن و بخشی رو به عهده ی خودتون میزارن واسه همین آدما گیج میشن که به اینا چی بگن.

خلاصه که سخت نگیرید به اینا.


امیدوارم که پادکست امروز ما هم براتون مفید بوده باشه.

خیلی مهمه که مارو به دوستاتون معرفی کنید.

ما به این حمایت شما نیاز داریم تا بتونیم با قدرت تر ادامه بدیم.

مارو میتونید از جاهای مختلفی دنبال کنید.

تلگرام و اینستاگرام کست باکس و ویرگول و خیلی جاهای دیگه.

و آدرس همه اینا توی سایت ما به ادرس internplusplus.ir هست.

از هر جایی که دوست داشتید مارو دنبال کنید.

تا اپیزود بعدی و یه آموزش دیگه خدافظ.